Patch level : 12.0 1036

Files correlati     : fp0.exe fp0100a.msk fp0300a.msk
Commento :

Aggiunto il regime speciale 3 al reverse charge
This commit is contained in:
Alessandro Bonazzi 2021-02-28 21:51:58 +01:00
parent 8db92bba96
commit 3b54d64097
10 changed files with 283 additions and 263 deletions

View File

@ -35,40 +35,40 @@ TParametri_mask::TParametri_mask(const char * n) : TAutomask(n)
void TParametri_mask::save_all() const
{
fp_settings().set_db_indirizzo(get(F_INDIRIZZO));
fp_settings().set_db_database(get(F_DATABASE));
fp_settings().set_db_user(get(F_USER));
fp_settings().set_db_password(get(F_PASSWORD));
fp_settings().set_fld_dest(get(F_FLDDEST));
fp_settings().set_fld_dest_usr(get(F_FLDUSRDEST));
fp_settings().set_cofi_tras(get(F_COFI));
fp_settings().set_gest_alleg(get_bool(F_ESPORTAALLEG));
fp_settings().set_allega_fat(get_bool(F_ESPORTADOC));
fp_settings().set_f8(get_bool(F_F8));
fp_settings().set_check_not_block(get_bool(F_CHECK_NOT_BLOCK));
fp_settings().set_no_sconti_fatt(get_bool(F_CHECK_NO_SCONTI));
fp_settings().set_no_export_pronto(get_bool(F_CHECK_NO_EXPORT_PRONTO));
fp_settings().set_data_start_fatt(get_date(F_STARTFATTEL));
fp_settings().set_data_start_new_fatt(get_date(F_STARTNEWFATT));
set_db_indirizzo(get(F_INDIRIZZO));
set_db_database(get(F_DATABASE));
set_db_user(get(F_USER));
set_db_password(get(F_PASSWORD));
set_fld_dest(get(F_FLDDEST));
set_fld_dest_usr(get(F_FLDUSRDEST));
set_cofi_tras(get(F_COFI));
set_gest_alleg(get_bool(F_ESPORTAALLEG));
set_allega_fat(get_bool(F_ESPORTADOC));
set_f8(get_bool(F_F8));
set_check_not_block(get_bool(F_CHECK_NOT_BLOCK));
set_no_sconti_fatt(get_bool(F_CHECK_NO_SCONTI));
set_no_export_pronto(get_bool(F_CHECK_NO_EXPORT_PRONTO));
set_data_start_fatt(get_date(F_STARTFATTEL));
set_data_start_new_fatt(get_date(F_STARTNEWFATT));
TFP_righe_custom().save_sheet(sfield(F_FORMPERS));
TFP_nota_piede_f().save_sheet(sfield(F_NPFSHEET));
}
void TParametri_mask::load_all()
{
set(F_INDIRIZZO, fp_settings().get_db_indirizzo());
set(F_DATABASE, fp_settings().get_db_database());
set(F_USER, fp_settings().get_db_user());
set(F_PASSWORD, fp_settings().get_db_password());
set(F_FLDDEST, fp_settings().get_fld_dest());
set(F_FLDUSRDEST, fp_settings().get_fld_dest_usr());
set(F_COFI, fp_settings().get_cofi_tras());
set(F_ESPORTAALLEG, fp_settings().get_gest_alleg());
set(F_ESPORTADOC, fp_settings().get_allega_fat());
set(F_F8, fp_settings().is_f8());
set(F_CHECK_NOT_BLOCK, fp_settings().get_check_not_block());
set(F_CHECK_NO_SCONTI, fp_settings().get_no_sconti_fatt());
set(F_CHECK_NO_EXPORT_PRONTO, fp_settings().get_no_export_pronto());
set(F_INDIRIZZO, get_db_indirizzo());
set(F_DATABASE, get_db_database());
set(F_USER, get_db_user());
set(F_PASSWORD, get_db_password());
set(F_FLDDEST, get_fld_dest());
set(F_FLDUSRDEST, get_fld_dest_usr());
set(F_COFI, get_cofi_tras());
set(F_ESPORTAALLEG, get_gest_alleg());
set(F_ESPORTADOC, get_allega_fat());
set(F_F8, is_f8());
set(F_CHECK_NOT_BLOCK, get_check_not_block());
set(F_CHECK_NO_SCONTI, get_no_sconti_fatt());
set(F_CHECK_NO_EXPORT_PRONTO, get_no_export_pronto());
TFP_righe_custom().load_sheet(sfield(F_FORMPERS));
TFP_nota_piede_f().load_sheet(sfield(F_NPFSHEET));
}
@ -230,11 +230,11 @@ bool TParametri_mask::on_field_event(TOperable_field& o, TField_event e, long jo
break;
case F_STARTFATTEL:
if (e == fe_init)
o.set(fp_settings().get_data_start_fatt());
o.set(get_data_start_fatt());
break;
case F_STARTNEWFATT:
if (e == fe_init)
o.set(TFP_settings::get_date_start_new_fatt());
o.set(get_date_start_new_fatt());
default:
break;
}
@ -270,6 +270,7 @@ void TParametri_ditta::main_loop()
ad << ip << "@" << db;
SSimple_query s(ad, usr, psw, TSDB_MSSQL);
if (s.sq_is_connect())
{
pm.save_all();

View File

@ -5,7 +5,7 @@ TOOLBAR "topbar" 0 0 0 2
ENDPAGE
PAGE "Configurazione FP (1)" 0 2 0 0
PAGE "Parametri generali" 0 2 0 0
GROUPBOX DLG_NULL 78 6
BEGIN
@ -109,7 +109,7 @@ END
ENDPAGE
PAGE "Configurazione (2) " 0 2 0 0
PAGE "Personalizzazioni" 0 2 0 0
SPREADSHEET F_FORMPERS 60 6
BEGIN
@ -155,7 +155,7 @@ END
ENDPAGE
PAGE "Assistenza FP" 0 2 0 0
PAGE "Funzioni di assistenza" 0 2 0 0
BUTTON F_SETPATCH 15 2
BEGIN
@ -185,56 +185,56 @@ ENDPAGE
ENDMASK
PAGE "Elementi spredsheet" -1 -1 60 12
PAGE "Parametri tipi Documento" -1 -1 60 12
STRING S_TIPODOC 4
STRING SC_TIPODOC 4
BEGIN
PROMPT 1 1 "Tipo doc "
HELP "Lasciare libero per tutti i tipo documento"
USE %TIP
SELECT S3[37,40]!=""
INPUT CODTAB S_TIPODOC
INPUT CODTAB SC_TIPODOC
DISPLAY "Codice@10" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo SDI@10" S3[37,40]
OUTPUT S_TIPODOC CODTAB
OUTPUT SC_TIPODOC CODTAB
FLAG "UPA"
END
STRING S_TIPORIGA 4
STRING SC_TIPORIGA 4
BEGIN
PROMPT 1 2 "Tipo riga "
USE %TRI
INPUT CODTAB S_TIPORIGA
INPUT CODTAB SC_TIPORIGA
DISPLAY "Codice@10" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT S_TIPORIGA CODTAB
OUTPUT SC_TIPORIGA CODTAB
CHECKTYPE REQUIRED
END
STRING S_QTA 10
STRING SC_QTA 10
BEGIN
PROMPT 1 3 "Qta"
END
STRING S_PREZZO 10
STRING SC_PREZZO 10
BEGIN
PROMPT 1 4 "Prezzo"
USE %FRR
INPUT CODTAB S_PREZZO
INPUT CODTAB SC_PREZZO
DISPLAY "Codice@10" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT S_PREZZO CODTAB
OUTPUT SC_PREZZO CODTAB
END
STRING S_IMPONIBILE 10
STRING SC_IMPONIBILE 10
BEGIN
PROMPT 1 5 "Imponibile"
USE %FRR
INPUT CODTAB S_IMPONIBILE
INPUT CODTAB SC_IMPONIBILE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT S_IMPONIBILE CODTAB
OUTPUT SC_IMPONIBILE CODTAB
END
ENDPAGE
@ -259,17 +259,17 @@ ENDMASK
PAGE "Elementi NPF" -1 -1 60 12
STRING S_DOC 4
STRING S_DOCPF 4
BEGIN
PROMPT 1 1 "Tipo doc "
HELP "Lasciare libero per tutti i tipo documento"
USE %TIP
SELECT S3[37,40]!=""
INPUT CODTAB S_TIPODOC
INPUT CODTAB S_DOCPF
DISPLAY "Codice@10" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo SDI@10" S3[37,40]
OUTPUT S_TIPODOC CODTAB
OUTPUT S_DOCPF CODTAB
FLAG "UPA"
END

View File

@ -176,11 +176,11 @@ void TCC_mask::save_all()
cfven.zero();
cfven.put(CFV_TIPOCF, get(F_TIPOCF));
cfven.put(CFV_CODCF, riga->get(xvtil_cid2index(S_CODCF)));
cfven.put(CFV_CODCF, riga->get(cid2index(S_CODCF)));
const int err = cfven.read();
if (err == NOERR || err == _iskeynotfound)
{
cfven.put(CFV_PADESTIN, riga->get(xvtil_cid2index(S_CODSDI)));
cfven.put(CFV_PADESTIN, riga->get(cid2index(S_CODSDI)));
if (cfven.rewrite_write() != NOERR)
{
TString msg = "Fallito salvataggio record in CFVEN ";

View File

@ -56,7 +56,7 @@ public:
disable(DLG_SAVEREC);
disable(DLG_FINDREC);
load_all_fields();
const TDate data_inizio = fp_settings().get_date_start_new_fatt();
const TDate data_inizio = get_date_start_new_fatt();
if (today < data_inizio)
{
@ -82,9 +82,10 @@ void TPA_mask::save_all_fields() const
selected_docs.save_sheet(sfield(F_DOCUMENTI_TIPO));
// Salvo le impostazioni
fp_settings().set_esp_pri_empty(get_bool(F_SETDEFCOD));
fp_settings().set_esp_est(get_bool(F_SETCODEST));
fp_settings().set_esp_est_cod(get(F_VALCODEST));
set_esp_pri_empty(get_bool(F_SETDEFCOD));
set_send_all_rifs(get_bool(F_SENDALLRIFS));
set_esp_est(get_bool(F_SETCODEST));
set_esp_est_cod(get(F_VALCODEST));
}
void TPA_mask::force_reload_sheet()
@ -143,9 +144,10 @@ void TPA_mask::load_all_fields()
sheet.force_update();
sheet.show();
set(F_SETDEFCOD, fp_settings().get_esp_pri_empty());
set(F_SETCODEST, fp_settings().get_esp_est());
set(F_VALCODEST, fp_settings().get_esp_est_cod());
set(F_SETDEFCOD, get_esp_pri_empty());
set(F_SENDALLRIFS, get_send_all_rifs());
set(F_SETCODEST, get_esp_est());
set(F_VALCODEST, get_esp_est_cod());
}
void TPA_mask::fill()
@ -164,7 +166,7 @@ void TPA_mask::fill()
TString filter_selected = get(F_FATTSEL);
enable(DLG_OK, filter_selected.empty() || filter_selected == "E");
enable(DLG_SAVEREC, (fp_settings().is_f8() && filter_selected == "X") || filter_selected == "D");
enable(DLG_SAVEREC, (is_f8() && filter_selected == "X") || filter_selected == "D");
enable(DLG_FINDREC, filter_selected == "D");
enable(DLG_PRINT, _enable_chiave_fixer && filter_selected.empty());
@ -193,8 +195,8 @@ void TPA_mask::fill()
int fat_no_cod = 0;
// Disabilito la colonna del codice ufficio
docs.enable_column(docs.cid2index(S_UFFICIO), false);
const TDate data_inizio = fp_settings().get_date_start_new_fatt();
docs.enable_column(cid2index(S_UFFICIO), false);
const TDate data_inizio = get_date_start_new_fatt();
for (bool okc = rec.move_first(); okc; okc = rec.move_next())
{
@ -331,6 +333,7 @@ void TPA_mask::connect_keys()
warning_box("Impossibile allineare le chiavi di uno sheet vuoto!");
return;
}
TProgress_monitor pi(sht.items(), "Esportazione Fatture");
FOR_EACH_ARRAY_ROW(sht, r, riga)
{
@ -445,6 +448,7 @@ void TPA_mask::export_paf()
static const int col_cod_sdi = sfield(F_DOCS).cid2index(S_CODSDI);
TString_array& sht = sfield(F_DOCS).rows_array();
TDoc_fp elab;
//elab.set_cache_insert(true);
if (!sht.empty())
{
@ -661,6 +665,7 @@ void TPA_mask::set_err_paf()
if (!sht.empty())
{
TProgress_monitor pi(sht.items(), "Cambio stato fatture");
FOR_EACH_ARRAY_ROW(sht, r, riga)
{
if (!pi.add_status())

View File

@ -5,9 +5,11 @@
#define F_SETDEFCOD 404
#define F_SETCODEST 405
#define F_VALCODEST 406
#define F_SENDALLRIFS 407
#define END_MASK 499
#define F_DOCUMENTI_TIPO 301
#define S_SELCODNUM 101

View File

@ -83,7 +83,7 @@ BEGIN
ITEM "Tipo SDI"
END
GROUPBOX DLG_NULL 78 4
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 12 "@BConfigurazione Esportazione"
END
@ -94,16 +94,21 @@ BEGIN
PROMPT 2 13 "Esporta privati con codice '0000000' se privi sia di pec che di cod. destinatario"
END
BOOLEAN F_SENDALLRIFS
BEGIN
PROMPT 2 14 "Esporta tutti i dati dei documenti di riferimento"
END
BOOLEAN F_SETCODEST
BEGIN
PROMPT 2 14 "Esporta esteri con codice"
PROMPT 2 15 "Esporta esteri con codice"
MESSAGE TRUE ENABLE,F_VALCODEST
MESSAGE FALSE DISABLE,F_VALCODEST
END
STRING F_VALCODEST 7
BEGIN
PROMPT 40 14 ""
PROMPT 40 15 ""
CHECKTYPE REQUIRED
FLAG "D"
END

View File

@ -10,7 +10,7 @@
#include <reputils.h>
#include <vector>
#include <memory>
#include "cglib.h"
#include "../cg/cglib.h"
#include <map>
#define SQL_FLD "sql/"
@ -32,6 +32,8 @@ bool run_fp_psw_mask();
bool check_tables();
// Compila il numero di documento per la scrittura sui paf
TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc);
// Genera la chiave per i paf
bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt);
bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt);
@ -130,72 +132,61 @@ public:
TFP_nota_piede_f();
};
class TFP_settings : public TObject
{
public:
// Getters
const TString& get_db_indirizzo() const;
const TString& get_db_database() const;
const TString& get_db_str_con() const;
const TString& get_db_user() const;
const TString& get_db_password() const;
const TString& get_fld_dest() const;
const TString& get_fld_dest_usr() const;
const TString& get_cofi_tras() const;
const TString& get_data_start_fatt() const;
const bool get_gest_alleg() const;
const bool get_allega_fat() const;
const bool get_esp_pri_empty() const;
const bool get_esp_est() const;
const TString& get_esp_est_cod() const;
const bool is_f8() const;
const bool get_check_not_block() const;
const TString& get_body_mail(int idx = -1) const;
const TString& get_npf(const char* tipodoc, int idx) const;
const bool get_no_sconti_fatt() const;
bool get_no_export_pronto() const;
// Get tipidoc per NotaPiedeFattura
const TString get_npf_tipodoc(int indx) const;
static TDate get_date_start_new_fatt();
// TFP_settings functions
const TString& get_db_indirizzo();
const TString& get_db_database();
const TString& get_db_str_con();
const TString& get_db_user();
const TString& get_db_password();
const TString& get_fld_dest();
const TString& get_fld_dest_usr();
const TString& get_cofi_tras();
const TDate get_data_start_fatt();
const bool get_gest_alleg();
const bool get_allega_fat();
const bool get_esp_pri_empty();
const bool get_send_all_rifs();
const bool get_esp_est();
const TString& get_esp_est_cod();
const bool is_f8();
const bool get_check_not_block();
const TString& get_body_mail(int idx = -1);
const TString& get_npf(const char* tipodoc, int idx);
const bool get_no_sconti_fatt();
bool get_no_export_pronto();
// Get tipidoc per NotaPiedeFattura
const TString & get_npf_tipodoc(int indx);
TDate get_date_start_new_fatt();
// Setters
void set_db_indirizzo(const TString& ind) const;
void set_db_database(const TString& db) const;
void set_db_user(const TString& usr) const;
void set_db_password(const TString& psw) const;
void set_fld_dest(const TString& fld_dest) const;
void set_fld_dest_usr(const TString& fld_dest_usr) const;
void set_cofi_tras(const TString& cofi) const;
void set_gest_alleg(bool gest_alleg) const;
void set_allega_fat(bool allega_fatt) const;
void set_esp_pri_empty(bool esp_pri) const;
void set_esp_est(bool esp_est) const;
void set_esp_est_cod(const TString& esp_est_cod) const;
void set_f8(bool f8) const;
void set_check_not_block(bool not_block) const;
void set_body_mail(const char* msg, int idx = -1) const;
void set_no_sconti_fatt(const bool no_sconti_fatt) const;
void set_no_export_pronto(const bool no_export_pronto) const;
void set_data_start_fatt(const char* date) const;
void set_data_start_new_fatt(const char* date) const;
// Setters
void set_db_indirizzo(const TString& ind);
void set_db_database(const TString& db);
void set_db_user(const TString& usr);
void set_db_password(const TString& psw);
void set_fld_dest(const TString& fld_dest);
void set_fld_dest_usr(const TString& fld_dest_usr);
void set_cofi_tras(const TString& cofi);
void set_gest_alleg(bool gest_alleg);
void set_allega_fat(bool allega_fatt);
void set_esp_pri_empty(bool esp_pri);
void set_send_all_rifs(bool send_all_rifs);
void set_esp_est(bool esp_est);
void set_esp_est_cod(const TString& esp_est_cod);
void set_f8(bool f8);
void set_check_not_block(bool not_block);
void set_body_mail(const char* msg, int idx = -1);
void set_no_sconti_fatt(const bool no_sconti_fatt);
void set_no_export_pronto(const bool no_export_pronto);
void set_data_start_fatt(const char* date);
void set_data_start_new_fatt(const char* date);
void set_npf(const char * tipodoc, const char* msg, int idx) const;
void set_npf_tipodoc(const TString& tipodoc, int indx) const;
void set_npf(const char * tipodoc, const char* msg, int idx);
void set_npf_tipodoc(const TString& tipodoc, int indx);
void remove_para_ini(int idx);
void remove_npf_ini(const char* tipodoc, int idx);
void remove_tipodoc_npf(int idx) const;
};
void remove_para_ini(int idx);
void remove_npf_ini(const char* tipodoc, int idx);
void remove_tipodoc_npf(int idx);
inline TFP_settings& fp_settings()
{
static TFP_settings* erbuggo = nullptr;
if(erbuggo == nullptr)
{
erbuggo = new TFP_settings();
}
return *erbuggo;
}
// Mannaggia il fruttivendolo
class TFP_righe_custom : public TObject
@ -567,8 +558,8 @@ public:
int force_commit();
void set_cache_insert(const bool v) { _cache_insert = v; }
bool tracciati_2021() const { return _tracciati_2021; }
TDoc_fp();
~TDoc_fp();
};
#endif // __FPLIB_H

View File

@ -15,8 +15,10 @@
#include <cfven.h>
#include <nditte.h>
#include <unloc.h>
#include <indsp.h>
#include "../cg/cfban.h"
#include <modaut.h>
#include <netutils.h>
#include <urldefid.h>
#include "../li/letint.h"
@ -38,6 +40,7 @@ bool set_connection(SSimple_query& s)
SSimple_query& fp_db()
{
static SSimple_query* db = nullptr;
if (db == nullptr)
{
db = new SSimple_query();
@ -50,24 +53,18 @@ SSimple_query& fp_db()
bool run_fp_psw_mask()
{
static TMask* m;
// Cancello la maschera se esiste
delete m;
m = new TMask("Password", 1, 30, 5);
m->add_button_tool(DLG_OK, "~Conferma", TOOL_OK);
m->add_button_tool(DLG_CANCEL, "Annulla", TOOL_CANCEL);
m->add_string(101, 0, "Password ", 1, 1, 15, "*");
m->field(101).check_type(CHECK_REQUIRED);
while (m->run() == K_ENTER)
TMask m("Password", 1, 30, 5);
m.add_button_tool(DLG_OK, "~Conferma", TOOL_OK);
m.add_button_tool(DLG_CANCEL, "Annulla", TOOL_CANCEL);
m.add_string(101, 0, "Password ", 1, 1, 15, "*");
m.field(101).check_type(CHECK_REQUIRED);
while (m.run() == K_ENTER)
{
if (m->get(101) == "sirioFATT99") // Hardcoded password are the best!
{
if (m.get(101) == "sirioFATT99") // Hardcoded password are the best!
return true;
}
else
{
error_box("Password errata");
}
return error_box("Password errata");
}
return false;
}
@ -95,6 +92,7 @@ bool check_tables()
{
TString file_version = TFilename(file->str).name_only();
file_version = file_version.mid(2, 4);
if (file_version <= version)
continue;
ifstream f(file->str);
@ -154,10 +152,12 @@ TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc)
ret << prefisso << ndoc << postfisso;
return ret;
}
/*
* HFATT: tipocf(1) + codcf(6)
* BFATT: datadoc(8) + tipodoc_SDI(4) + numdoc(7)
*/
// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio
bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt)
{
@ -172,6 +172,7 @@ bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt)
bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '_' << tipo_doc_sdi(doc) << '_' << complete_num_fp(codnum, doc.numero());
return hfatt.full() && bfatt.full();
}
// Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento
bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt)
{
@ -207,12 +208,12 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString&
const TAnagrafica anag(LF_CLIFO, tipocf, codcf);
if (coddest.empty())
{
if (pec.full() || fp_settings().get_esp_pri_empty())
if (pec.full() || get_esp_pri_empty())
coddest = "0000000";
// Controllo se è straniero
else if (anag.estero() && anag.stato_partita_IVA() != "IT")
{
coddest = fp_settings().get_esp_est() ? fp_settings().get_esp_est_cod() : "";
coddest = get_esp_est() ? get_esp_est_cod() : "";
}
}
else
@ -1011,25 +1012,18 @@ bool TDoc_fp::initialize(TDocumentoEsteso& doc)
return false;
// Preparo il log
log(-1, _bfatt);
#ifndef DBG
// Controllo se il documento è almeno in stato di stampa
if (doc.stato() < doc.tipo().stato_finale_stampa())
{
log(3, "Il documento non e' stato ancora stampato, verra' saltato");
return false;
}
#endif
#ifndef DBG
_is_pa = doc.clifor().get_int("ALLEG") == 7;
if (!get_coddest(doc.clifor().tipo(), doc.clifor().codice(), _coddest, _pec, doc.get(DOC_CODINDSP)))
if (!doc.get_coddest(_coddest, _pec))
{
log(1, "Impossibile trovare il codice destinatario per la fattura");
return false;
}
#else
_is_pa = false;
_coddest = "M5ITOJA";
#endif
_enapec = _coddest == "0000000" && _pec.full();
_privato = _coddest.len() != 6;
_caus = TCausale(doc.tipo().causale(), doc.anno());
@ -1046,7 +1040,7 @@ bool TDoc_fp::initialize(TDocumentoEsteso& doc)
_idx_cassa_previdenziale = 1;
// Controllo custom
_has_cust = cached_custom_fp().has_custom(doc);
if(check_initial(doc) || fp_settings().get_check_not_block())
if(check_initial(doc) || get_check_not_block())
{
return _paf_container.clean_and_erase_paf(_hfatt, _bfatt);
}
@ -1124,7 +1118,7 @@ int TDoc_fp::commit()
if (_to_commit)
{
// Controllo stato diagnosticato
if (!fp_settings().get_no_export_pronto())
if (!get_no_export_pronto())
{
if (fp_db().sq_set_exec("UPDATE PAF0100F SET P1_GESTIONE = 'P' WHERE P1_GESTIONE = 'D'"))
{
@ -1495,7 +1489,7 @@ void TDoc_fp::fill_buoni(map<TString20, TFPBuono_di_consegna>& buoni, const TStr
else // Ultima riga
{
TToken_string b(memo, '\n');
// "Buono di consegna n. 1997 del 10-10-2019"
for (int i = 0; i < b.items(); ++i)
{
TToken_string str(b.get(i), ' ');
@ -1516,9 +1510,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
bool ok = true;
ok &= export_paf0100f();
#ifndef DBG
ok &= export_paf3200f();
#endif
// <CedentePrestatore>
TPaf_record& paf0200f = _paf_container.get_paf("PAF0200F");
@ -1578,7 +1572,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
if (_ditta.giuridica())
{
TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE");
anagiu.set_var("#CODICE", get_firm().get(NDT_CODANAGR));
anagiu.set_var("#CODICE", get_firm().get(NDT_CODANAGR));
if (anagiu.move_first())
{
paf0200f.set("P2_ISCRREACAP", anagiu.get(ANG_CAPSOC));
@ -1723,7 +1718,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf2700f.set("PQ_GESTIONE", "D");
ok &= insert(paf2700f);
// <DatiOrdineAcquisto>
if(doc.is_nota_credito() && doc.get(DOC_NUMDOCRIF).full())
if((doc.is_nota_credito() || get_send_all_rifs()) && doc.get(DOC_NUMDOCRIF).full())
{
TPaf_record& paf1400f = _paf_container.get_paf("PAF1400F");
reset(paf1400f);
@ -1822,7 +1817,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
const bool riftesta = main_app().has_module(LVAUT, CHK_DONGLE) && ini_get_bool(CONFIG_DITTA, "lv", "RifTest");
map<TString20, TDate> ancestors_s;
TString riga_buoni_cons;
TString temp;
TString temp;
if (riftesta)
{
@ -1867,7 +1862,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
FOR_EACH_PHYSICAL_FPRDOC(doc, r, rdoc)
{
// Controllo la riga
if (check_row(*rdoc) && !fp_settings().get_check_not_block())
if (check_row(*rdoc) && !get_check_not_block())
return false;
_idx_adg_doc_row = 1L;
bool skip_riga = false;
@ -1903,38 +1898,40 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_PRZTOTALE", ZERO);
set_IVA(_codivadefault, paf1800f);
}
else if (rdoc->is_merce())
{
if (rdoc->get(RDOC_QTA).is_zero())
{
TString msg;
msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg);
}
set_qta_prezzo(paf1800f, rdoc);
if (rdoc->iva().codice().empty())
{
set_IVA(_codivadefault, paf1800f);
}
else
set_IVA(*rdoc, paf1800f);
/*
const TDate data = doc.get(DOC_DATADOC);
paf1800f.set("PI_DTINIZIOPER", data);
paf1800f.set("PI_DTFINEPER", data);
*/
/*
* Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata
*/
else if (rdoc->is_merce())
{
if (rdoc->get(RDOC_QTA).is_zero())
{
TString msg;
msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg);
}
set_qta_prezzo(paf1800f, rdoc);
if(rdoc->iva().codice().empty())
{
set_IVA(_codivadefault, paf1800f);
}
else
set_IVA(*rdoc, paf1800f);
/*
const TDate data = doc.get(DOC_DATADOC);
paf1800f.set("PI_DTINIZIOPER", data);
paf1800f.set("PI_DTFINEPER", data);
*/
/*
* Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata
*/
if (!riftesta)
{
TArray ancestors;
find_ancestors(*rdoc, ancestors);
for (int i = ancestors.last(); i > 0; i = ancestors.pred(i))
{
_has_bolla |= true;
const TAncestor& a = dynamic_cast<const TAncestor&>(ancestors[i]);
ancestors_s.insert({ a._numdoc, a._datadoc }); // Per i buoni di consegna lavanderie
if (i == 1)
{
@ -1964,7 +1961,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
}
}
}
}
}
else if (rdoc->is_spese())
{
const TSpesa_prest& sp = rdoc->spesa();
@ -2080,10 +2077,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
ok &= insert(paf2100f);
}
else
{
// Salto tutte le altre righe
continue;
}
// <ScontoMaggiorazione>
TString80 sconto_expr = rdoc->get(RDOC_SCONTO);
TToken_string sconti;
@ -2131,6 +2127,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
if (!riftesta && f_buonocons)
{
TString& memo = riga_buoni_cons;
if (memo.full())
{
map<TString20, TFPBuono_di_consegna> buoni;
@ -2347,7 +2344,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
for(TObject* itm = tiva.first_item(); itm != nullptr; itm = tiva.succ_item())
{
const TRiepilogo_iva& riva = *dynamic_cast<const TRiepilogo_iva*>(itm);
if (!check_riepilogo(doc, riva) && !fp_settings().get_check_not_block())
if (!check_riepilogo(doc, riva) && !get_check_not_block())
return false;
add_riepilogo_iva(paf2200f, riva.cod_iva(), eiva, riva.imponibile(), riva.imposta());
}
@ -2412,6 +2409,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
long nprogr = 0; // Numero di file allegati
// Se abilitato stampo il documento e lo allego
TFilename rep;
if (_allegafattura)
{
if (!dongle().active(RSAUT))
@ -2518,10 +2516,12 @@ bool TDoc_fp::doc_to_paf(const TRectype& rec)
}
return false;
}
bool TDoc_fp::doc_to_paf(const TDoc_key& key)
{
return doc_to_paf(key_to_doc(key));
}
bool TDoc_fp::doc_to_paf(const TFilename& ini)
{
TConfig cfg(ini, "33");
@ -2531,10 +2531,12 @@ bool TDoc_fp::doc_to_paf(const TFilename& ini)
const TDoc_key key(anno, codnum, ndoc);
return doc_to_paf(key);
}
bool TDoc_fp::doc_to_paf()
{
return _doc_rec != nullptr ? doc_to_paf(*_doc_rec) : false;
}
TRectype& TDoc_fp::key_to_doc(const TDoc_key& key)
{
if(_doc_rec != nullptr)
@ -2549,23 +2551,19 @@ TRectype& TDoc_fp::key_to_doc(const TDoc_key& key)
TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false)
{
_ditta.init(LF_NDITTE, prefix().get_codditta());
_cofi = fp_settings().get_cofi_tras();
const TDate data_inizio = fp_settings().get_date_start_new_fatt();
_cofi = get_cofi_tras();
const TDate data_inizio = get_date_start_new_fatt();
_tracciati_2021 = (data_inizio <= today);
if (_cofi.blank())
_cofi = _ditta.codice_fiscale();
#ifdef DBG
_gestioneallegati = _allegafattura = false;
#else
_gestioneallegati = fp_settings().get_gest_alleg();
_allegafattura = fp_settings().get_allega_fat();
#endif
_def_fld = fp_settings().get_fld_dest();
_gestioneallegati = get_gest_alleg();
_allegafattura = get_allega_fat();
_def_fld = get_fld_dest();
if (!_def_fld.ends_with("\\"))
{
_def_fld << "\\";
}
_def_usr_fld = fp_settings().get_fld_dest_usr();
_def_usr_fld = get_fld_dest_usr();
if (_def_usr_fld.empty())
{
_def_usr_fld = _def_fld;
@ -2578,8 +2576,9 @@ TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false)
_conai_str = ini_get_string(CONFIG_DITTA, "ve", "DESCCONAIASS");
if (_conai_str.empty())
_conai_str = "Contributo CONAI assolto ove dovuto";
_nascondi_sconti_righe_fatt = fp_settings().get_no_sconti_fatt();
_nascondi_sconti_righe_fatt = get_no_sconti_fatt();
}
TDoc_fp::~TDoc_fp()
{
commit();

View File

@ -4,8 +4,6 @@
#define FILE_SECTION "fp"
#define FP_TAB_MOD "FP"
#define FP_IP "ip"
#define FP_DB "db"
#define FP_USR "usr"
@ -26,6 +24,7 @@
#define FP_CHECK_NO_EXPORT_PRONTO "noexportpronto"
#define FP_DATASTARTFATT "datastartfatt"
#define FP_DATASTARTNEWFATT "startnewtracciato"
#define FP_SEND_ALL_RIFS "sendallrifs"
// Sheet fp0300
#define FP_SLD_COD "SLD"
@ -49,241 +48,257 @@
#define FP_SHT_DEF_PREZZO "PREZZONN"
#define FP_SHT_DEF_IMPONIBILE "IMPNS"
const TString& TFP_settings::get_db_indirizzo() const
const TString& get_db_indirizzo()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_IP);
}
const TString& TFP_settings::get_db_database() const
const TString& get_db_database()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_DB);
}
const TString& TFP_settings::get_db_str_con() const
const TString& get_db_str_con()
{
return get_tmp_string().cut(0) << get_db_indirizzo() << "@" << get_db_database();
}
const TString& TFP_settings::get_db_user() const
const TString& get_db_user()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_USR);
}
const TString& TFP_settings::get_db_password() const
const TString& get_db_password()
{
return get_tmp_string().cut(0) << decode(ini_get_string(FILE_CONFIG, FILE_SECTION, FP_PSW));
}
const TString& TFP_settings::get_fld_dest() const
const TString& get_fld_dest()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_FLD_DEST);
}
const TString& TFP_settings::get_fld_dest_usr() const
const TString& get_fld_dest_usr()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_FLD_USR_DEST, "");
}
const TString& TFP_settings::get_cofi_tras() const
const TString& get_cofi_tras()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_COFI_TRAS);
}
const TString& TFP_settings::get_data_start_fatt() const
const TDate get_data_start_fatt()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_DATASTARTFATT, "01-01-2019");
return ini_get_date(FILE_CONFIG, FILE_SECTION, FP_DATASTARTFATT, "01-01-2019");
}
const bool TFP_settings::get_gest_alleg() const
const bool get_gest_alleg()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_GEST_ALLEG);
}
const bool TFP_settings::get_allega_fat() const
const bool get_allega_fat()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_ALLEG_FAT);
}
const bool TFP_settings::get_esp_pri_empty() const
const bool get_esp_pri_empty()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_PRI);
}
const bool TFP_settings::get_esp_est() const
const bool get_send_all_rifs()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_SEND_ALL_RIFS);
}
const bool get_esp_est()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_EST);
}
const TString& TFP_settings::get_esp_est_cod() const
const TString& get_esp_est_cod()
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_ESP_EST_COD, "XXXXXXX");
}
const bool TFP_settings::is_f8() const
const bool is_f8()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_F8);
}
const bool TFP_settings::get_check_not_block() const
const bool get_check_not_block()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NOT_BLOCK);
}
const TString& TFP_settings::get_body_mail(int idx) const
const TString& get_body_mail(int idx)
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_MAIL, "STOpsTOP", idx);
}
const TString& TFP_settings::get_npf(const char * tipodoc, int idx) const
const TString& get_npf(const char * tipodoc, int idx)
{
TString name; name << FP_NOTA_PIEDE_F << "-" << tipodoc;
return ini_get_string(FILE_CONFIG, FILE_SECTION, name, "FERMATIostrega", idx);
}
const TString TFP_settings::get_npf_tipodoc(int indx) const
const TString & get_npf_tipodoc(int indx)
{
TString name; name << FP_NOTA_PIEDE_F << "_tipodoc";
return ini_get_string(FILE_CONFIG, FILE_SECTION, name, "FERMATIostrega", indx);
}
TDate TFP_settings::get_date_start_new_fatt()
TDate get_date_start_new_fatt()
{
return ini_get_date(CONFIG_DITTA, FILE_SECTION, FP_DATASTARTNEWFATT, "01-01-2021");
}
const bool TFP_settings::get_no_sconti_fatt() const
const bool get_no_sconti_fatt()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, false);
}
bool TFP_settings::get_no_export_pronto() const
bool get_no_export_pronto()
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_EXPORT_PRONTO, false);
}
void TFP_settings::set_db_indirizzo(const TString& ind) const
void set_db_indirizzo(const TString& ind)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_IP, ind);
}
void TFP_settings::set_db_database(const TString& db) const
void set_db_database(const TString& db)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_DB, db);
}
void TFP_settings::set_db_user(const TString& usr) const
void set_db_user(const TString& usr)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_USR, usr);
}
void TFP_settings::set_db_password(const TString& psw) const
void set_db_password(const TString& psw)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_PSW, encode(psw));
}
void TFP_settings::set_fld_dest(const TString& fld_dest) const
void set_fld_dest(const TString& fld_dest)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_FLD_DEST, fld_dest);
}
void TFP_settings::set_fld_dest_usr(const TString& fld_dest_usr) const
void set_fld_dest_usr(const TString& fld_dest_usr)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_FLD_USR_DEST, fld_dest_usr);
}
void TFP_settings::set_cofi_tras(const TString& cofi) const
void set_cofi_tras(const TString& cofi)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_COFI_TRAS, cofi);
}
void TFP_settings::set_gest_alleg(const bool gest_alleg) const
void set_gest_alleg(const bool gest_alleg)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_GEST_ALLEG, gest_alleg);
}
void TFP_settings::set_allega_fat(const bool allega_fatt) const
void set_allega_fat(const bool allega_fatt)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_ALLEG_FAT, allega_fatt);
}
void TFP_settings::set_esp_pri_empty(const bool esp_pri) const
void set_esp_pri_empty(const bool esp_pri)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_PRI, esp_pri);
}
void TFP_settings::set_esp_est(const bool esp_est) const
void set_send_all_rifs(const bool esp_pri)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_SEND_ALL_RIFS, esp_pri);
}
void set_esp_est(const bool esp_est)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_EST, esp_est);
}
void TFP_settings::set_esp_est_cod(const TString& esp_est_cod) const
void set_esp_est_cod(const TString& esp_est_cod)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_ESP_EST_COD, esp_est_cod);
}
void TFP_settings::set_f8(const bool f8) const
void set_f8(const bool f8)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_F8, f8);
}
void TFP_settings::set_check_not_block(const bool not_block) const
void set_check_not_block(const bool not_block)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NOT_BLOCK, not_block);
}
void TFP_settings::set_body_mail(const char* msg, int idx) const
void set_body_mail(const char* msg, int idx)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_MAIL, msg, idx);
}
// Set nota piede fattura
void TFP_settings::set_npf(const char * tipodoc, const char* msg, int idx) const
void set_npf(const char * tipodoc, const char* msg, int idx)
{
TString name; name << FP_NOTA_PIEDE_F << "-" << tipodoc;
ini_set_string(FILE_CONFIG, FILE_SECTION, name, msg, idx);
}
void TFP_settings::set_no_sconti_fatt(const bool no_sconti_fatt) const
void set_no_sconti_fatt(const bool no_sconti_fatt)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, no_sconti_fatt);
}
void TFP_settings::set_no_export_pronto(const bool no_export_pronto) const
void set_no_export_pronto(const bool no_export_pronto)
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_EXPORT_PRONTO, no_export_pronto);
}
void TFP_settings::set_data_start_fatt(const char* date) const
void set_data_start_fatt(const char* date)
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_DATASTARTFATT, date);
}
void TFP_settings::set_data_start_new_fatt(const char* date) const
void set_data_start_new_fatt(const char* date)
{
ini_set_string(CONFIG_DITTA, FILE_SECTION, FP_DATASTARTNEWFATT, date);
}
void TFP_settings::remove_para_ini(int idx)
void remove_para_ini(int idx)
{
ini_remove(FILE_CONFIG, FILE_SECTION, FP_MAIL, idx);
}
void TFP_settings::remove_npf_ini(const char * tipodoc, int idx)
void remove_npf_ini(const char * tipodoc, int idx)
{
TString name; name << FP_NOTA_PIEDE_F << "-" << tipodoc;
ini_remove(FILE_CONFIG, FILE_SECTION, name, idx);
}
void TFP_settings::set_npf_tipodoc(const TString& tipodoc, int indx) const
void set_npf_tipodoc(const TString& tipodoc, int indx)
{
TString name; name << FP_NOTA_PIEDE_F << "_tipodoc";
ini_set_string(FILE_CONFIG, FILE_SECTION, name, tipodoc, indx);
}
// Rimuove linea ini in eccesso per tipodoc per nota piede fattura
void TFP_settings::remove_tipodoc_npf(const int idx) const
void remove_tipodoc_npf(const int idx)
{
TString name; name << FP_NOTA_PIEDE_F << "_tipodoc";
ini_remove(FILE_CONFIG, FILE_SECTION, name, idx);
}
@ -387,16 +402,16 @@ void TFP_nota_piede_f::write_ini_npf(const TString& tipodoc, TToken_string& msg)
// Conto quanti ne avevo salvati prima nel file ini per poi controllare
// che non sto salvando meno di quelli che ci sono già
int previous_indx = 0;
for (TString row = fp_settings().get_npf(tipodoc, previous_indx); row != "FERMATIostrega"; row = fp_settings().get_npf(tipodoc, previous_indx))
for (TString row = get_npf(tipodoc, previous_indx); row != "FERMATIostrega"; row = get_npf(tipodoc, previous_indx))
previous_indx++;
// Vado a salvare ogni riga nel file ini
for (const char* row = msg.get(); row; row = msg.get())
fp_settings().set_npf(tipodoc, row, indx++);
set_npf(tipodoc, row, indx++);
if (indx < previous_indx)
{
for (int i = indx; i < previous_indx; i++)
fp_settings().remove_npf_ini(tipodoc, i);
remove_npf_ini(tipodoc, i);
}
}
@ -405,10 +420,10 @@ void TFP_nota_piede_f::delete_ini_npf(const TString& tipodoc)
// Conto quanti ne avevo salvati prima nel file ini per poi controllare
// che non sto salvando meno di quelli che ci sono già
int previous_indx = 0;
for (TString row = fp_settings().get_npf(tipodoc, previous_indx); row != "FERMATIostrega"; row = fp_settings().get_npf(tipodoc, previous_indx))
for (TString row = get_npf(tipodoc, previous_indx); row != "FERMATIostrega"; row = get_npf(tipodoc, previous_indx))
previous_indx++;
for (int i = 0; i < previous_indx; i++)
fp_settings().remove_npf_ini(tipodoc, i);
remove_npf_ini(tipodoc, i);
}
@ -418,7 +433,7 @@ TString TFP_nota_piede_f::get_ini_npf(const TString& tipodoc)
TString msg; msg.cut(0);
int indx = 0;
for (TString row = fp_settings().get_npf(tipodoc, indx); row != "FERMATIostrega"; row = fp_settings().get_npf(tipodoc, indx))
for (TString row = get_npf(tipodoc, indx); row != "FERMATIostrega"; row = get_npf(tipodoc, indx))
{
if(indx++ > 0)
msg << '\n';
@ -432,7 +447,7 @@ void TFP_nota_piede_f::get_load()
// Prima leggo i tipi doc che ho salvato dall'ini
TString tipo_get = "";
int indx = 0;
while ((tipo_get = fp_settings().get_npf_tipodoc(indx++)) != "FERMATIostrega")
while ((tipo_get = get_npf_tipodoc(indx++)) != "FERMATIostrega")
_tipi_doc.add(tipo_get);
const int itms = _tipi_doc.items();
@ -451,7 +466,7 @@ void TFP_nota_piede_f::load_sheet(TSheet_field& sheet_field)
// Prima leggo i tipi doc che ho salvato dall'ini
TString tipo_get = "";
int indx = 0;
while((tipo_get = fp_settings().get_npf_tipodoc(indx++)) != "FERMATIostrega")
while((tipo_get = get_npf_tipodoc(indx++)) != "FERMATIostrega")
_tipi_doc.add(tipo_get);
int i = 0;
@ -495,7 +510,7 @@ void TFP_nota_piede_f::save_new_tipidoc(TSheet_field& sheet_field)
int n_tipidoc = 0;
TString npf_get;
// Conto quanti tipi doc ho nel file ini
for (int i = 0; (npf_get = fp_settings().get_npf_tipodoc(i)) != "FERMATIostrega"; i++)
for (int i = 0; (npf_get = get_npf_tipodoc(i)) != "FERMATIostrega"; i++)
{
n_tipidoc++;
_tipi_doc.add(npf_get);
@ -507,12 +522,13 @@ void TFP_nota_piede_f::save_new_tipidoc(TSheet_field& sheet_field)
{
TToken_string row = sheet_field.row(i);
TString tipodoc_sf(row.get(0));
fp_settings().set_npf_tipodoc(tipodoc_sf, i);
set_npf_tipodoc(tipodoc_sf, i);
}
if (items_sf < n_tipidoc)
for (int i = items_sf; i < n_tipidoc; i++)
fp_settings().remove_tipodoc_npf(i);
remove_tipodoc_npf(i);
}
void TFP_nota_piede_f::save_sheet(TSheet_field& sheet_field)

View File

@ -63,7 +63,7 @@ bool TFp_mail_sender::send(const TString& msg)
bool ok = false;
if (_alleg && !_mail.blank() && _accord)
{
_pdf_path = fp_settings().get_fld_dest_usr(); // Cartella dove ci sono i pdf generati
_pdf_path = get_fld_dest_usr(); // Cartella dove ci sono i pdf generati
TFilename pdf; pdf << _pdf_path << _pdf_name;
@ -90,6 +90,7 @@ bool TFp_mail_sender::send(const TString& msg)
TString hfatt, bfatt;
TPaf_record paf0100f("PAF0100F");
TString query;
if (chiave_paf(fdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
{
query << "UPDATE PAF0100F SET P1_ERRINT = 'S' WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "'";