Patch level : 12.0 nopatch
Files correlati : Commento : Implementazione invio regolarizzazioni al 07/11/2021
This commit is contained in:
parent
4405d1fb25
commit
5e3ae2faaa
@ -363,7 +363,7 @@ const char* get_ini_codcaus()
|
||||
return ini_get_string(FILE_CONFIG, FILE_SECTION, F1_CAUS);
|
||||
}
|
||||
|
||||
const char* get_codcaus(const char * tipodoc, const char* codcf)
|
||||
const char* get_codcaus(const char * tipodoc, const long codcf)
|
||||
{
|
||||
TLocalisamfile cfven(LF_CFVEN);
|
||||
cfven.put(CFV_TIPOCF, "F");
|
||||
|
@ -137,7 +137,7 @@ public:
|
||||
TFppro& fppro_db();
|
||||
|
||||
const char* get_ini_codcaus();
|
||||
const char* get_codcaus(const char * tipodoc, const char* codcf);
|
||||
const char* get_codcaus(const char * tipodoc, const long codcf);
|
||||
bool get_endatareg();
|
||||
TString get_datainireg();
|
||||
TString get_dataendreg();
|
||||
|
@ -114,7 +114,7 @@ bool TEstrazione::check_documento_vendita(const TLocalisamfile& mov, _Out_ bool&
|
||||
const TDocumento doc(mov.get(MOV_DPROVV)[0], mov.get_int(MOV_DANNO), mov.get(MOV_DCODNUM), mov.get_int(MOV_DNDOC));
|
||||
|
||||
exist_doc = true;
|
||||
if (chiave_paf(doc, hfatt, bfatt))
|
||||
if (chiave_paf_doc(doc, hfatt, bfatt))
|
||||
{
|
||||
query << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';";
|
||||
fp_db().sq_set_exec(query);
|
||||
|
@ -174,7 +174,7 @@ void TPAR_mask::fill()
|
||||
TString rif = get_dest_sdi(rec.get_string(CFV_TIPOCF)[0], rec.get_long(CFV_CODCF), EMPTY_STRING);
|
||||
|
||||
// Se è ancora vuoto potrebbe essere estero
|
||||
if(rif.empty())
|
||||
if (rif.empty())
|
||||
{
|
||||
// Segno la riga errata
|
||||
if (first)
|
||||
@ -275,7 +275,7 @@ void TPAR_mask::connect_keys()
|
||||
{
|
||||
// Come prima cosa controllo che effettivamente la chiave di questo doc sia in giro per il mondo
|
||||
query.cut(0) << "SELECT * FROM PAF0100F WHERE P1_KEYHEADERFATT = '" << campo_hfatt << "' AND P1_KEYBODYFATT = '" << campo_bfatt << "'";
|
||||
if(fp_db().sq_set_exec(query))
|
||||
if (fp_db().sq_set_exec(query))
|
||||
{
|
||||
msg_log.cut(0) << "Il documento " << campo_bfatt << " è già presente nel DB, verrà saltato";
|
||||
legno.log(9000, msg_log);
|
||||
@ -315,7 +315,7 @@ void TPAR_mask::connect_keys()
|
||||
}
|
||||
}
|
||||
|
||||
if(!found)
|
||||
if (!found)
|
||||
{
|
||||
msg_log.cut(0) << "Il documento " << campo_bfatt << " non è presente nel DB PAF, verrà saltato";
|
||||
legno.log(9000, msg_log);
|
||||
@ -347,7 +347,7 @@ void TPAR_mask::connect_keys()
|
||||
"UPDATE PAF3200F SET PU_KEYHEADERFATT = '" << campo_hfatt << "', PU_KEYBODYFATT = '" << campo_bfatt << "' WHERE PU_KEYPRGINVIO = '" << db_prginv << "' AND PU_KEYHEADERFATT = '" << db_hfatt << "' AND PU_KEYBODYFATT = '" << db_bfatt << "'\n" <<
|
||||
"UPDATE PAFW300F SET PW_KEYHEADERFATT = '" << campo_hfatt << "', PW_KEYBODYFATT = '" << campo_bfatt << "' WHERE PW_KEYPRGINVIO = '" << db_prginv << "' AND PW_KEYHEADERFATT = '" << db_hfatt << "' AND PW_KEYBODYFATT = '" << db_bfatt << "'\n";
|
||||
|
||||
if(fp_db().sq_set_exec(query))
|
||||
if (fp_db().sq_set_exec(query))
|
||||
{
|
||||
msg_log.cut(0) << "Il documento " << campo_bfatt << " e' stato aggiornato correttamente\nChiave precedente: " << db_bfatt << " chiave nuova: " << campo_bfatt;
|
||||
legno.log(0, msg_log);
|
||||
@ -489,7 +489,7 @@ bool TPAR_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
if((e == fe_modify || e >= se_enter) && jolly == 0)
|
||||
if ((e == fe_modify || e >= se_enter) && jolly == 0)
|
||||
{
|
||||
if (o.dlg() >= START_MASK && o.dlg() <= END_MASK)
|
||||
{
|
||||
@ -511,7 +511,7 @@ void TPAR_mask::next_page(int p)
|
||||
_filter_changed = false;
|
||||
}
|
||||
}
|
||||
if(ok)
|
||||
if (ok)
|
||||
TAutomask::next_page(p);
|
||||
}
|
||||
|
||||
@ -625,7 +625,7 @@ void TPAR_mask::set_err_paf()
|
||||
"UPDATE PAF3200F SET PU_GESTIONE = 'E', PU_KEYPRGINVIO = 'DELETED' WHERE PU_KEYHEADERFATT = '" << hfatt << "' AND PU_KEYBODYFATT = '" << bfatt << "';\n" <<
|
||||
// PAFW3 non ha il flag di gestione
|
||||
"UPDATE PAFW300F SET PW_KEYPRGINVIO = 'DELETED' WHERE PW_KEYHEADERFATT = '" << hfatt << "' AND PW_KEYBODYFATT = '" << bfatt << "';\n";
|
||||
if(!fp_db().sq_set_exec(query))
|
||||
if (!fp_db().sq_set_exec(query))
|
||||
{
|
||||
TString err = "Impossibile salvare la regolarizzazione "; err << nreg << "\nVerrà saltata.";
|
||||
error_box(err);
|
||||
|
@ -58,7 +58,7 @@ DATE F_DATAEND
|
||||
BEGIN
|
||||
PROMPT 50 1 "Data finale "
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "La data finale non può essere minore della data iniziale"
|
||||
WARNING "La data finale non pu essere minore della data iniziale"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
|
@ -14,14 +14,14 @@
|
||||
#include <map>
|
||||
|
||||
#define SQL_FLD "sql/"
|
||||
#define MANCATA_SEND "S" // Se la mail di mancata consegna è già stata inviata P1_ERRINT è segnato con "S"
|
||||
#define MANCATA_SEND "S" // Se la mail di mancata consegna gi stata inviata P1_ERRINT segnato con "S"
|
||||
|
||||
// Typedef per aiutare a capire cosa sono le chiavi
|
||||
typedef TString MCodice_riga;
|
||||
typedef TString MTipo_documento;
|
||||
class TDoc_fp;
|
||||
|
||||
enum { no_pdf = -1, pdf_ok = 0, no_alleg = -2};
|
||||
enum { no_pdf = -1, pdf_ok = 0, no_alleg = -2 };
|
||||
|
||||
bool set_connection(SSimple_query& s);
|
||||
// Ritorna la connessione al DB paf secondo i parametri impostati nel programma di configurazione
|
||||
@ -283,7 +283,9 @@ public:
|
||||
|
||||
TFp_mail_sender() { _error = -1; }
|
||||
TFp_mail_sender(const int anno, const long ndoc, const TFixed_string& codnum, const TFixed_string& tipodoc, const long codcf, TString mail, bool accord, TString ragsoc, bool sent)
|
||||
{ set_doc(anno, ndoc, codnum, tipodoc, codcf, mail, accord, ragsoc, sent); }
|
||||
{
|
||||
set_doc(anno, ndoc, codnum, tipodoc, codcf, mail, accord, ragsoc, sent);
|
||||
}
|
||||
};
|
||||
|
||||
class TFPRiga_documento : public TRiga_documento
|
||||
@ -317,7 +319,7 @@ public:
|
||||
inline bool operator==(const TFPBuono_di_consegna& l, const TFPBuono_di_consegna& r)
|
||||
{
|
||||
TToken_string appo(l._numdoc, '/');
|
||||
if(appo.items() == 3)
|
||||
if (appo.items() == 3)
|
||||
return TString(appo.get(2)) == r._numdoc && l._datadoc == r._datadoc;
|
||||
return l._numdoc == r._numdoc && l._datadoc == r._datadoc;
|
||||
}
|
||||
@ -353,7 +355,7 @@ struct TFP_adg
|
||||
: _tipo_dato(tipo_dato),
|
||||
_riferimento_testo(riferimento_testo),
|
||||
_riferimento_numero(riferimento_numero),
|
||||
_riferimento_data(riferimento_data){}
|
||||
_riferimento_data(riferimento_data) {}
|
||||
};
|
||||
|
||||
/**<
|
||||
@ -415,14 +417,14 @@ public:
|
||||
inline TFP_custom_cache& cached_custom_fp()
|
||||
{
|
||||
static std::shared_ptr<TFP_custom_cache> carmelo;
|
||||
if(carmelo == nullptr)
|
||||
if (carmelo == nullptr)
|
||||
{
|
||||
carmelo.reset(new TFP_custom_cache);
|
||||
}
|
||||
return *carmelo;
|
||||
}
|
||||
|
||||
class TFP_expression : public TObject // ma perchè non derivano da expre documento cazzone ? se sono più espressioni prima si separa la token string
|
||||
class TFP_expression : public TObject // ma perch non derivano da expre documento cazzone ? se sono pi espressioni prima si separa la token string
|
||||
{
|
||||
enum TFP_operator { error, eq, neq, gt, ls, gteq, lseq, and, or };
|
||||
|
||||
@ -504,7 +506,7 @@ private:
|
||||
|
||||
struct
|
||||
{
|
||||
bool _is_valuta_estera{ false }; // Se il documento è in valuta estera
|
||||
bool _is_valuta_estera{ false }; // Se il documento in valuta estera
|
||||
TString4 _cod_val;
|
||||
real _cambio;
|
||||
} _doc_cambio;
|
||||
@ -523,7 +525,7 @@ private:
|
||||
protected:
|
||||
|
||||
/**< Funzioni di controllo */
|
||||
/**< Controlli di testata, non è const per il calcolo della codizione di pagamento */
|
||||
/**< Controlli di testata, non const per il calcolo della codizione di pagamento */
|
||||
bool check_initial(TDocumentoEsteso& doc);
|
||||
/**< Controllo di riga */
|
||||
bool check_row(const TRiga_documento& rdoc);
|
||||
|
@ -77,7 +77,7 @@ string getline(ifstream& f)
|
||||
bool check_tables()
|
||||
{
|
||||
/*
|
||||
* Da questo programma in poi verrà utilizzato un sistema diverso per la creazione e aggiornamento delle tabelle
|
||||
* Da questo programma in poi verr utilizzato un sistema diverso per la creazione e aggiornamento delle tabelle
|
||||
* Verranno utilizzati dei file.sql aggiornati con il numero di patch, leggermente scomodo durante la creazione ma facile per i controlli successivamente
|
||||
*/
|
||||
SLIST files = xvt_fsys_list_files(".sql", "sql/fp0/", false);
|
||||
@ -88,7 +88,7 @@ bool check_tables()
|
||||
TString version;
|
||||
if (tabmod.read() == NOERR)
|
||||
version = tabmod.get("S0");
|
||||
for(SLIST_ELT file = xvt_slist_get_first(files); file; file = xvt_slist_get_next(files, file))
|
||||
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);
|
||||
@ -96,10 +96,10 @@ bool check_tables()
|
||||
if (file_version <= version)
|
||||
continue;
|
||||
ifstream f(file->str);
|
||||
if(f.is_open())
|
||||
if (f.is_open())
|
||||
{
|
||||
string s;
|
||||
while(!f.eof())
|
||||
while (!f.eof())
|
||||
{
|
||||
static string r;
|
||||
r = getline(f);
|
||||
@ -108,11 +108,11 @@ bool check_tables()
|
||||
s += r + '\n';
|
||||
// Cerco un ;
|
||||
const int limiter = s.find(';') + 1;
|
||||
if(limiter > 0)
|
||||
if (limiter > 0)
|
||||
{
|
||||
string query = s.substr(0, limiter);
|
||||
s.erase(0, limiter);
|
||||
if(!fp_db().sq_set_exec(query, false) || !fp_db().sq_commit())
|
||||
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));
|
||||
}
|
||||
@ -130,7 +130,7 @@ bool check_tables()
|
||||
tabmod.put("COD", "SQL");
|
||||
tabmod.put("CODTAB", "VERSION");
|
||||
tabmod.put("S0", file_version);
|
||||
if(tabmod.rewrite_write() != NOERR && !yesno_box("Attenzione! Errore di aggiornamento versione di Database in Campo, continuare? %s", file_version))
|
||||
if (tabmod.rewrite_write() != NOERR && !yesno_box("Attenzione! Errore di aggiornamento versione di Database in Campo, continuare? %s", file_version))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -144,7 +144,7 @@ TString& complete_num_fp(const TCodice_numerazione& codnum, const int numdoc)
|
||||
const TString& prefisso = codnum.prefisso();
|
||||
const TString& postfisso = codnum.postfisso();
|
||||
static TString ndoc; ndoc.cut(0) << numdoc;
|
||||
if(prefisso.full() || postfisso.full())
|
||||
if (prefisso.full() || postfisso.full())
|
||||
{
|
||||
for (; ndoc.len() < len_num_doc;)
|
||||
ndoc.add_front("0");
|
||||
@ -215,7 +215,7 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString&
|
||||
const TCli_for clifo(tipocf, codcf);
|
||||
pec = clifo.get("PEC");
|
||||
|
||||
if(!cod_ind_sped.empty())
|
||||
if (!cod_ind_sped.empty())
|
||||
{
|
||||
TLocalisamfile indsp(LF_INDSP);
|
||||
indsp.put(IND_TIPOCF, tipocf);
|
||||
@ -224,7 +224,7 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString&
|
||||
indsp.read();
|
||||
coddest = indsp.get(IND_PADESTIN);
|
||||
}
|
||||
if(coddest.empty())
|
||||
if (coddest.empty())
|
||||
coddest = clifo.vendite().get("PADESTIN");
|
||||
|
||||
const TAnagrafica anag(LF_CLIFO, tipocf, codcf);
|
||||
@ -232,7 +232,7 @@ bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString&
|
||||
{
|
||||
if (pec.full() || get_esp_pri_empty())
|
||||
coddest = "0000000";
|
||||
// Controllo se è straniero
|
||||
// Controllo se straniero
|
||||
else if (anag.estero() && anag.stato_partita_IVA() != "IT")
|
||||
{
|
||||
coddest = get_esp_est() ? get_esp_est_cod() : "";
|
||||
@ -248,7 +248,7 @@ inline const TString& no_special(char a)
|
||||
{
|
||||
TString& r = get_tmp_string().cut(0);
|
||||
|
||||
if(a != '\'')
|
||||
if (a != '\'')
|
||||
{
|
||||
r << a;
|
||||
}
|
||||
@ -299,7 +299,7 @@ TString& add_filter(const TString& field, const TString& from, const TString& to
|
||||
/***************************************************************************
|
||||
* TPaf_record
|
||||
***************************************************************************/
|
||||
// Imposta il valore di un campo variant
|
||||
// Imposta il valore di un campo variant
|
||||
void TPaf_record::set(const char* fld, const TVariant& var)
|
||||
{
|
||||
CHECK(fld && *fld, "Null field name");
|
||||
@ -340,7 +340,7 @@ void TPaf_record::set(const char* fld, const char* val)
|
||||
void TPaf_record::set(const char* fld, const TString& val)
|
||||
{
|
||||
const TVariant var(val);
|
||||
if(!var.is_string() || (val.full()))
|
||||
if (!var.is_string() || (val.full()))
|
||||
set(fld, var);
|
||||
}
|
||||
|
||||
@ -403,7 +403,7 @@ const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var)
|
||||
if (apici && str[0] != '0' && real::is_natural(str))
|
||||
apici = false;
|
||||
// Parso i caratteri speciali
|
||||
for(int i = 0; i < str.len(); i++)
|
||||
for (int i = 0; i < str.len(); i++)
|
||||
{
|
||||
tmp << no_special(str[i]);
|
||||
}
|
||||
@ -694,7 +694,7 @@ TAncestor::TAncestor(const TRectype& rdoc)
|
||||
***************************************************************************/
|
||||
bool TFPBuono_di_consegna::already_exist(map<TString20, TDate>& ancestors_s) const
|
||||
{
|
||||
for(auto it = ancestors_s.begin(); it != ancestors_s.end(); ++it)
|
||||
for (auto it = ancestors_s.begin(); it != ancestors_s.end(); ++it)
|
||||
{
|
||||
TFPBuono_di_consegna b(it->first, it->second);
|
||||
if (b == *this)
|
||||
@ -751,11 +751,11 @@ bool TDoc_fp::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TS
|
||||
bool TDoc_fp::get_bank(TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const
|
||||
{
|
||||
bool found = false;
|
||||
if(doc.pagamento().tipo_rata(0) == TTipo_pag::_bonfico)
|
||||
if (doc.pagamento().tipo_rata(0) == TTipo_pag::_bonfico)
|
||||
{
|
||||
found = get_bank_presentazione(doc, iban, abi, cab, istituto);
|
||||
}
|
||||
else if(doc.pagamento().tipo_rata(0) == TTipo_pag::_ric_ban || doc.pagamento().tipo_rata(0) == TTipo_pag::_rid)
|
||||
else if (doc.pagamento().tipo_rata(0) == TTipo_pag::_ric_ban || doc.pagamento().tipo_rata(0) == TTipo_pag::_rid)
|
||||
{
|
||||
found = get_bank_appoggio(doc, iban, abi, cab, istituto);
|
||||
}
|
||||
@ -788,7 +788,7 @@ bool TDoc_fp::get_bank_presentazione(const TDocumento& doc, TString& iban, TStri
|
||||
get_bnp_iban(abi, cab, -1, iban);
|
||||
}
|
||||
}
|
||||
if(!found) // Se non trovo banca su CFBAN la cerco su CFVEN
|
||||
if (!found) // Se non trovo banca su CFBAN la cerco su CFVEN
|
||||
{
|
||||
const TRectype& cfven = doc.clifor().vendite();
|
||||
abi = cfven.get(CFV_CODABIPR);
|
||||
@ -810,7 +810,7 @@ bool TDoc_fp::get_bank_appoggio(const TDocumento& doc, TString& iban, TString& a
|
||||
bool found = abi.full() && cab.full();
|
||||
if (found)
|
||||
istituto = cache().get("%BAN", abi, "S0");
|
||||
if(iban.empty())
|
||||
if (iban.empty())
|
||||
{
|
||||
TToken_string key;
|
||||
key.add("C");
|
||||
@ -839,10 +839,10 @@ const TString& TDoc_fp::descrizione(const TRiga_documento& rdoc)
|
||||
tmp.replace('\n', ' ');
|
||||
tmp.strip_double_spaces();
|
||||
tmp.trim();
|
||||
if(tmp.len() > 900)
|
||||
if (tmp.len() > 900)
|
||||
{
|
||||
TString err;
|
||||
err << "Il documento " << rdoc.doc().anno() << " " << rdoc.doc().codice_numerazione().codice() << " " << rdoc.doc().numero() << " ha la riga numero " << rdoc.numero() << " più lunga di quanto supportato dal formato dell'agenzia delle entrate, verrà troncata a 900 caratteri";
|
||||
err << "Il documento " << rdoc.doc().anno() << " " << rdoc.doc().codice_numerazione().codice() << " " << rdoc.doc().numero() << " ha la riga numero " << rdoc.numero() << " pi lunga di quanto supportato dal formato dell'agenzia delle entrate, verr troncata a 900 caratteri";
|
||||
log(1, err);
|
||||
}
|
||||
return tmp.left(900);
|
||||
@ -894,7 +894,7 @@ int TDoc_fp::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) cons
|
||||
bool TDoc_fp::insert(TPaf_record& p)
|
||||
{
|
||||
bool ok;
|
||||
if(_cache_insert)
|
||||
if (_cache_insert)
|
||||
{
|
||||
_query.push_back(p.insert_string());
|
||||
ok = true;
|
||||
@ -966,7 +966,7 @@ bool TDoc_fp::check_initial(TDocumentoEsteso& doc)
|
||||
}
|
||||
|
||||
TPagamento& pag = doc.pagamento();
|
||||
if(pag.cond_pag_sdi().empty())
|
||||
if (pag.cond_pag_sdi().empty())
|
||||
{
|
||||
msg.cut(0) << "Non e' valorizzata la condizione di pagamento SDI (TP01, TP02, TP03) per la condizione di pagamento " << pag.code();
|
||||
log(1, msg);
|
||||
@ -978,7 +978,7 @@ bool TDoc_fp::check_initial(TDocumentoEsteso& doc)
|
||||
{
|
||||
const int rp = nr < pag.n_rate() ? nr : 0;
|
||||
static TString key_class; key_class.cut(0) << pag.tipo_rata(rp) << pag.ulc_rata(rp);
|
||||
if(cache().get("%CLR", key_class, "S12").empty())
|
||||
if (cache().get("%CLR", key_class, "S12").empty())
|
||||
{
|
||||
msg.cut(0) << "Non e' valorizzata la tipologia di pagamento SDI (MPXX) per la condizione di pagamento " << pag.code();
|
||||
log(1, msg);
|
||||
@ -991,10 +991,10 @@ bool TDoc_fp::check_row(const TRiga_documento& rdoc)
|
||||
{
|
||||
bool ok = false;
|
||||
static TString msg;
|
||||
if(rdoc.is_spese())
|
||||
if (rdoc.is_spese())
|
||||
{
|
||||
const TSpesa_prest& spesa = rdoc.spesa();
|
||||
if(spesa.is_percentuale() && spesa.perc().is_zero())
|
||||
if (spesa.is_percentuale() && spesa.perc().is_zero())
|
||||
{
|
||||
msg.cut(0) << "E' corretto che per la spesa " << spesa.codice() << " la percentuale sia zero?";
|
||||
log(1, msg);
|
||||
@ -1013,7 +1013,7 @@ bool TDoc_fp::check_riepilogo(const TDocumentoEsteso& doc, const TRiepilogo_iva&
|
||||
{
|
||||
bool ok = true;
|
||||
static TString msg;
|
||||
if(*get_esigibilita_iva(doc) == 'S' && natura(riva.cod_iva().codice()) == "N6")
|
||||
if (*get_esigibilita_iva(doc) == 'S' && natura(riva.cod_iva().codice()) == "N6")
|
||||
{
|
||||
msg.cut(0) << "Impossibile avere un documento con scissione dei pagamenti e natura iva N6, codice: " << riva.cod_iva().codice();
|
||||
log(1, msg);
|
||||
@ -1039,7 +1039,7 @@ bool TDoc_fp::initialize(TDocumentoEsteso& doc)
|
||||
return false;
|
||||
// Preparo il log
|
||||
log(-1, _bfatt);
|
||||
// Controllo se il documento è almeno in stato di stampa
|
||||
// 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");
|
||||
@ -1067,7 +1067,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) || get_check_not_block())
|
||||
if (check_initial(doc) || get_check_not_block())
|
||||
{
|
||||
return _paf_container.clean_and_erase_paf(_hfatt, _bfatt);
|
||||
}
|
||||
@ -1085,15 +1085,15 @@ const TRectype& TDoc_fp::cco(const TRectype& doc) const
|
||||
}
|
||||
|
||||
static TLocalisamfile tabmod(LF_TABMOD);
|
||||
// Controllo se non sono già sul record, così evito read inutili
|
||||
// Lo sto facendo a mano perchè usare cache() metterebbe FP nella colonna "MOD"
|
||||
// Controllo se non sono gi sul record, cos evito read inutili
|
||||
// Lo sto facendo a mano perch usare cache() metterebbe FP nella colonna "MOD"
|
||||
if (tabmod.get("MOD") != "PA" || tabmod.get("COD") != "CON" || tabmod.get("CODTAB") != conkey)
|
||||
{
|
||||
tabmod.zero();
|
||||
tabmod.put("MOD", "PA");
|
||||
tabmod.put("COD", "CON");
|
||||
tabmod.put("CODTAB", conkey);
|
||||
if(tabmod.read() != NOERR)
|
||||
if (tabmod.read() != NOERR)
|
||||
tabmod.zero();
|
||||
}
|
||||
return tabmod.curr();
|
||||
@ -1123,7 +1123,7 @@ void TDoc_fp::log(int severity, const char* msg)
|
||||
_log->log(severity, txt);
|
||||
// Scrivo anche su file
|
||||
std::filebuf fb;
|
||||
fb.open("fp_err.log", std::ios::out|std::ios::app);
|
||||
fb.open("fp_err.log", std::ios::out | std::ios::app);
|
||||
std::ostream os(&fb);
|
||||
os << txt << std::endl;
|
||||
fb.close();
|
||||
@ -1162,7 +1162,7 @@ int TDoc_fp::commit()
|
||||
{
|
||||
log(2, "Le fatture sono state esportate in stato diagnosticato");
|
||||
}
|
||||
if(r >= 0 && fp_db().sq_commit())
|
||||
if (r >= 0 && fp_db().sq_commit())
|
||||
{
|
||||
r += 2;
|
||||
}
|
||||
@ -1193,7 +1193,7 @@ const TString & TDoc_fp::natura(const char* codiva) const
|
||||
}
|
||||
const char* TDoc_fp::get_esigibilita_iva(const TDocumentoEsteso& doc)
|
||||
{
|
||||
// Esigibilità IVA: Immediata, Differita, Split payment
|
||||
// Esigibilit IVA: Immediata, Differita, Split payment
|
||||
const char* eiva = "I";
|
||||
if (doc.is_split_payment())
|
||||
eiva = "S";
|
||||
@ -1205,7 +1205,7 @@ void TDoc_fp::set_IVA(TString codiva, TPaf_record& paf) const
|
||||
{
|
||||
if (codiva.empty())
|
||||
codiva = _codivadefault;
|
||||
// É necessario il cast a real?
|
||||
// necessario il cast a real?
|
||||
paf.set("PI_ALIQUOTAIVA", static_cast<real>(cache().get("%IVA", codiva, "R0")));
|
||||
paf.set("PI_NATURA", natura(codiva));
|
||||
}
|
||||
@ -1258,16 +1258,16 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const
|
||||
}
|
||||
void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TFPRiga_documento* rdoc) const
|
||||
{
|
||||
// Setto l'unità di misura
|
||||
// Setto l'unit di misura
|
||||
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
|
||||
const real qta = rdoc->quantita();
|
||||
// Prendendo la stringa non ho problemi in scrittura della query, a volte accadono cose stupide
|
||||
TString& qta_string = rdoc->quantita_string();
|
||||
real prezzo_unit = rdoc->prezzo(_nascondi_sconti_righe_fatt, false);
|
||||
real prezzo_tot = rdoc->imponibile(false);
|
||||
if(qta < ZERO)
|
||||
if (qta < ZERO)
|
||||
{
|
||||
// Metto la qualità senza il segno
|
||||
// Metto la qualit senza il segno
|
||||
qta_string = qta_string.mid(1);
|
||||
// E i prezzi in negativo
|
||||
prezzo_unit = -abs(prezzo_unit);
|
||||
@ -1338,7 +1338,7 @@ bool TDoc_fp::add_riepilogo_iva(TPaf_record& paf2200f, const TCodiceIVA& cod_iva
|
||||
paf2200f.set("PL_IMPONIBILE", converti_prezzo(imponibile + riepilogo_agg.imponibile));
|
||||
// Imposta
|
||||
paf2200f.set("PL_IMPOSTA", converti_prezzo(imposta + riepilogo_agg.imposta));
|
||||
// Esigibilità IVA
|
||||
// Esigibilit IVA
|
||||
paf2200f.set("PL_ESIGIVA", eiva);
|
||||
if (*eiva == 'S')
|
||||
paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72");
|
||||
@ -1369,7 +1369,7 @@ bool TDoc_fp::add_cassa_previdenziale(TRiga_documento& rdoc)
|
||||
paf0800f.set("P8_IMPONCASSA", converti_prezzo(imponibile_doc));
|
||||
// Aliquota applicata alla riga spesa
|
||||
paf0800f.set("P8_ALIQIVA", rdoc.iva().percentuale());
|
||||
if(sp.sogg_a_rit())
|
||||
if (sp.sogg_a_rit())
|
||||
paf0800f.set("P8_RITENUTA", "SI");
|
||||
paf0800f.set("P8_NATURA", natura(rdoc.iva().codice()));
|
||||
// Inserisco il tutto nei dati riepilogo
|
||||
@ -1385,7 +1385,7 @@ bool TDoc_fp::export_info_articolo(TFPRiga_documento* rdoc, TPaf_record& paf1900
|
||||
const TString& codartmag = rdoc->get(RDOC_CODARTMAG);
|
||||
const TString& codart = rdoc->get(RDOC_CODART);
|
||||
long riga_art = 0;
|
||||
if(_has_cust)
|
||||
if (_has_cust)
|
||||
{
|
||||
cached_custom_fp().get_custom(rdoc->doc()).load_articolo_paf(paf1900f, *rdoc, riga_xml, *this);
|
||||
}
|
||||
@ -1399,7 +1399,7 @@ bool TDoc_fp::export_info_articolo(TFPRiga_documento* rdoc, TPaf_record& paf1900
|
||||
paf1900f.set("PY_KEYNLINEA", riga_xml);
|
||||
ok &= add_row_art(riga_art, "Codice articolo interno", codartmag, paf1900f);
|
||||
}
|
||||
// Se il codice articolo del magazzino è diverso quello è del cliente
|
||||
// Se il codice articolo del magazzino diverso quello del cliente
|
||||
if (codart.full() && codart != codartmag)
|
||||
{
|
||||
reset(paf1900f);
|
||||
@ -1580,7 +1580,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
indsp.put(IND_CODIND, doc.get(DOC_CODINDSP));
|
||||
indsp.read();
|
||||
rifamm = indsp.get(IND_PARIFAMM);
|
||||
if(rifamm.blank())
|
||||
if (rifamm.blank())
|
||||
rifamm = doc.clifor().vendite().get(CFV_PARIFAMM);
|
||||
}
|
||||
paf0200f.set("P2_RIFAMMINISTR", rifamm);
|
||||
@ -1624,7 +1624,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
fisc = cliente.codice_fiscale();
|
||||
if (!stato.full())
|
||||
stato = "IT";
|
||||
if(tab_codiso.get_bool("B0") || stato == "IT") // Cliente EU
|
||||
if (tab_codiso.get_bool("B0") || stato == "IT") // Cliente EU
|
||||
{
|
||||
if (piva.full())
|
||||
{
|
||||
@ -1642,7 +1642,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf0400f.set("P4_FISCIVAPAESE", stato);
|
||||
paf0400f.set("P4_FISCIVACOD", piva);
|
||||
}
|
||||
if(fisc.full())
|
||||
if (fisc.full())
|
||||
paf0400f.set("P4_CODFISC", fisc);
|
||||
}
|
||||
else // Cliente EXTRA-EU sempre nel campo della partita iva sui paf
|
||||
@ -1679,7 +1679,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza());
|
||||
}
|
||||
// Titolo onorifico!
|
||||
if(_rec_clifo.vendite().get(CFV_TITOLO).full())
|
||||
if (_rec_clifo.vendite().get(CFV_TITOLO).full())
|
||||
{
|
||||
paf0400f.set("P4_ANATITOLO", cache().get("TIT", _rec_clifo.vendite().get(CFV_TITOLO), "S0"));
|
||||
}
|
||||
@ -1705,17 +1705,17 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
// <DatiCassaPrevidenziale>
|
||||
// Non la mettiamo!
|
||||
// </DatiCassaPrevidenziale>
|
||||
// Non inserisco più adesso il paf0700f ma lo faccio alla fine (per inserire le ritenute)
|
||||
// Non inserisco pi adesso il paf0700f ma lo faccio alla fine (per inserire le ritenute)
|
||||
/*
|
||||
* Lo sconto in testata è stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe
|
||||
* Lo sconto in testata stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe
|
||||
*/
|
||||
// <DatiGenerali>
|
||||
TPaf_record& paf2700f = _paf_container.get_paf("PAF2700F");
|
||||
// Disabilitata la scrittura del totale del documento, questo causa problemi se è presente uno sconto in testata e l'addebito del bollo.
|
||||
// Campo calcola prima il totale, poi lo sconta e ci applica il bollo mentre lo SDI sconta a bollo già applicato.
|
||||
// Disabilitata la scrittura del totale del documento, questo causa problemi se presente uno sconto in testata e l'addebito del bollo.
|
||||
// Campo calcola prima il totale, poi lo sconta e ci applica il bollo mentre lo SDI sconta a bollo gi applicato.
|
||||
paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc());
|
||||
const TRectype& cont_conv_off = cco(doc);
|
||||
if(_has_cust)
|
||||
if (_has_cust)
|
||||
{
|
||||
TPaf_record& paf3400f = _paf_container.get_paf("PAF3400F");
|
||||
reset(paf3400f);
|
||||
@ -1739,7 +1739,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf2700f.set("PQ_GESTIONE", "D");
|
||||
ok &= insert(paf2700f);
|
||||
// <DatiOrdineAcquisto>
|
||||
if((doc.is_nota_credito() || get_send_all_rifs()) && 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);
|
||||
@ -1757,8 +1757,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
|
||||
// Codice commessa, spostato nel campo S5 di TABCOM
|
||||
TString80 com = cco(doc).get("S5");
|
||||
// Se è una commessa della sanità bisogna aggiungere un cancelletto davanti e dietro
|
||||
if(cco(doc).get_bool("B0"))
|
||||
// Se una commessa della sanit bisogna aggiungere un cancelletto davanti e dietro
|
||||
if (cco(doc).get_bool("B0"))
|
||||
{
|
||||
com.add_front_and_back("#");
|
||||
}
|
||||
@ -1919,7 +1919,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
ok &= export_info_articolo(rdoc, paf1900f, paf2100f, riga, r);
|
||||
}
|
||||
// </CodiceArticolo>
|
||||
if(rdoc->is_descrizione())
|
||||
if (rdoc->is_descrizione())
|
||||
{
|
||||
paf1800f.set("PI_QUANTITA", UNO);
|
||||
paf1800f.set("PI_PREZZOUNIT", ZERO);
|
||||
@ -1931,11 +1931,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
if (rdoc->get(RDOC_QTA).is_zero())
|
||||
{
|
||||
TString msg;
|
||||
msg.format("La riga merce %d ha quantità nulla", riga);
|
||||
msg.format("La riga merce %d ha quantit nulla", riga);
|
||||
log(1, msg);
|
||||
}
|
||||
set_qta_prezzo(paf1800f, rdoc);
|
||||
if(rdoc->iva().codice().empty())
|
||||
if (rdoc->iva().codice().empty())
|
||||
{
|
||||
set_IVA(_codivadefault, paf1800f);
|
||||
}
|
||||
@ -1948,7 +1948,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata
|
||||
* Ogni riga si pu rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata
|
||||
*/
|
||||
if (!riftesta)
|
||||
{
|
||||
@ -2012,7 +2012,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
if (qta.is_zero())
|
||||
{
|
||||
TString msg;
|
||||
msg.format("La riga spese a quantità %d ha quantità nulla (campo %s)", riga, static_cast<const char*>(rdoc->field_qta()));
|
||||
msg.format("La riga spese a quantit %d ha quantit nulla (campo %s)", riga, static_cast<const char*>(rdoc->field_qta()));
|
||||
log(1, msg);
|
||||
qta = UNO;
|
||||
}
|
||||
@ -2036,7 +2036,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(qta_inverse ? -abs(prz) : abs(prz)));
|
||||
paf1800f.set("PI_PRZTOTALE", converti_prezzo(imp));
|
||||
set_IVA(*rdoc, paf1800f);
|
||||
// Controllo se è una ritenuta fiscale
|
||||
// Controllo se una ritenuta fiscale
|
||||
if (sp.tipo_ritenuta() == 'F')
|
||||
{
|
||||
paf1800f.set("PI_RITENUTA", "SI");
|
||||
@ -2056,7 +2056,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
else if (rdoc->is_sconto() || rdoc->is_sconto_perc())
|
||||
{
|
||||
TString msg;
|
||||
msg << "Il documento " << doc.codice_numerazione().codice() << " " << doc.tipo().codice() << " " << doc.numero() << " presenta una o più righe di tipo sconto o sconto percentuale.\n" \
|
||||
msg << "Il documento " << doc.codice_numerazione().codice() << " " << doc.tipo().codice() << " " << doc.numero() << " presenta una o pi righe di tipo sconto o sconto percentuale.\n" \
|
||||
"Esportazione impossibile";
|
||||
log(2, msg);
|
||||
return false;
|
||||
@ -2066,7 +2066,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
if (rdoc->get(RDOC_QTA).is_zero())
|
||||
{
|
||||
TString msg;
|
||||
msg.format("La riga omaggi %d ha quantità nulla", riga);
|
||||
msg.format("La riga omaggi %d ha quantit nulla", riga);
|
||||
log(1, msg);
|
||||
}
|
||||
paf1800f.set("PI_TIPOCESSPREST", "AB");
|
||||
@ -2086,7 +2086,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->prezzo(false, false) * rdoc->get_real(RDOC_QTA)));
|
||||
TRiepilogo_agg& riepilogo_agg = _riepilogo_agg[rdoc->iva().codice()];
|
||||
riepilogo_agg.imponibile += rdoc->imponibile_omaggio(2);
|
||||
// Non metto l'imposta, è già presente nei totali
|
||||
// Non metto l'imposta, gi presente nei totali
|
||||
//riepilogo_agg.imposta += rdoc->iva_omaggio(8, 2);
|
||||
}
|
||||
else
|
||||
@ -2139,7 +2139,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
// </ScontoMaggiorazione>
|
||||
if (!skip_riga)
|
||||
{
|
||||
if(_has_cust)
|
||||
if (_has_cust)
|
||||
{
|
||||
cached_custom_fp().get_custom(doc).load_adg_paf(paf2100f, *rdoc, *this, riga);
|
||||
}
|
||||
@ -2183,7 +2183,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
if (doc.is_fattura() && !doc.is_nota_credito())
|
||||
{
|
||||
doc.set_riga_esenzione();
|
||||
if(doc.ha_riga_esenzione())
|
||||
if (doc.ha_riga_esenzione())
|
||||
{
|
||||
const TRiga_documento& riga_es = doc.get_riga_esenzione();
|
||||
reset(paf1800f);
|
||||
@ -2227,7 +2227,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
// Se il bollo va fatto pagare bisogna aggiungere una riga!
|
||||
const real importo_bolli = doc.get_real(DOC_BOLLI);
|
||||
if(doc.get_bool(DOC_ADDBOLLI) && importo_bolli > ZERO)
|
||||
if (doc.get_bool(DOC_ADDBOLLI) && importo_bolli > ZERO)
|
||||
{
|
||||
reset(paf1800f);
|
||||
paf1800f.set("PI_NUMEROLINEA", riga);
|
||||
@ -2244,7 +2244,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
|
||||
// OMAGGI????
|
||||
// Aggiungo le spese incasso
|
||||
if(doc.get_real("SPESINC") > ZERO)
|
||||
if (doc.get_real("SPESINC") > ZERO)
|
||||
{
|
||||
reset(paf1800f);
|
||||
paf1800f.set("PI_NUMEROLINEA", riga);
|
||||
@ -2262,7 +2262,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
|
||||
// Conai assolto
|
||||
if(doc.clifor().vendite().get_bool("CONAIASS"))
|
||||
if (doc.clifor().vendite().get_bool("CONAIASS"))
|
||||
{
|
||||
reset(paf1800f);
|
||||
paf1800f.set("PI_NUMEROLINEA", riga);
|
||||
@ -2277,8 +2277,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
riga++;
|
||||
}
|
||||
// Riga sconto di testata
|
||||
// Se è presente uno sconto in testata devo sottrarlo come riga sconto o lo SDI urla
|
||||
if(doc.get(DOC_SCONTOPERC).full() && doc.get(DOC_SCONTOPERC) != "0")
|
||||
// Se presente uno sconto in testata devo sottrarlo come riga sconto o lo SDI urla
|
||||
if (doc.get(DOC_SCONTOPERC).full() && doc.get(DOC_SCONTOPERC) != "0")
|
||||
{
|
||||
TAssoc_array& tiva = doc.tabella_iva(false);
|
||||
FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm)
|
||||
@ -2290,7 +2290,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf3000f.set("PT_RIFNUMLINEA", riga);
|
||||
paf1800f.set("PI_TIPOCESSPREST", "AB");
|
||||
TString msg = "Riga sconto merci in testata ";
|
||||
if(riva.cod_iva().percentuale() > ZERO)
|
||||
if (riva.cod_iva().percentuale() > ZERO)
|
||||
msg << riva.cod_iva().percentuale() << "%";
|
||||
else
|
||||
msg << riva.cod_iva().codice();
|
||||
@ -2304,7 +2304,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
}
|
||||
const TString& nota_piede_fatt = _riga_npf.get_nota_piede(doc.tipo().codice());
|
||||
if(nota_piede_fatt.full())
|
||||
if (nota_piede_fatt.full())
|
||||
{
|
||||
reset(paf1800f);
|
||||
paf1800f.set("PI_NUMEROLINEA", riga);
|
||||
@ -2320,7 +2320,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
|
||||
// Se dopo tutto ha ancora delle righe di altri dati gestionali che vanno messi a parte
|
||||
if(_has_cust && cached_custom_fp().get_custom(doc).has_adg_split())
|
||||
if (_has_cust && cached_custom_fp().get_custom(doc).has_adg_split())
|
||||
{
|
||||
reset(paf1800f);
|
||||
paf1800f.set("PI_NUMEROLINEA", riga);
|
||||
@ -2336,7 +2336,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
_idx_adg_doc_row = 1L;
|
||||
ok &= cached_custom_fp().get_custom(doc).load_adg_paf(paf2100f, doc[1], *this, riga, true);
|
||||
|
||||
if(_idx_adg_doc_row > 1L)
|
||||
if (_idx_adg_doc_row > 1L)
|
||||
ok &= insert(paf1800f) && insert(paf3000f);
|
||||
|
||||
riga++;
|
||||
@ -2344,7 +2344,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
|
||||
// </DatiBeniServizi>
|
||||
// <DatiDDT>
|
||||
// Metto qua i dati DDT per capire se la fattura è accompagnatoria o deriva da bolla
|
||||
// Metto qua i dati DDT per capire se la fattura accompagnatoria o deriva da bolla
|
||||
TPaf_record& paf1700f = _paf_container.get_paf("PAF1700F");
|
||||
if (doc.get("CODVETT1").full() && !_has_bolla)
|
||||
{
|
||||
@ -2355,7 +2355,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
if (piva.empty() && codfisc.empty())
|
||||
{
|
||||
TString msg = "Il vettore ";
|
||||
msg << vet.get("S0").mid(0, 50) << " non ha nè codice fiscale nè partita IVA, la fattura " << doc.anno() << " " << doc.codice_numerazione().codice() << " " << doc.numero() << " non può essere trasmessa";
|
||||
msg << vet.get("S0").mid(0, 50) << " non ha n codice fiscale n partita IVA, la fattura " << doc.anno() << " " << doc.codice_numerazione().codice() << " " << doc.numero() << " non pu essere trasmessa";
|
||||
log(3, msg);
|
||||
}
|
||||
if (piva.full())
|
||||
@ -2382,16 +2382,16 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
const char* eiva = get_esigibilita_iva(doc);
|
||||
long num_riep = 0;
|
||||
TAssoc_array& tiva = doc.tabella_iva(false);
|
||||
for(TObject* itm = tiva.first_item(); itm != nullptr; itm = tiva.succ_item())
|
||||
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) && !get_check_not_block())
|
||||
return false;
|
||||
add_riepilogo_iva(paf2200f, riva.cod_iva(), eiva, riva.imponibile(), riva.imposta());
|
||||
}
|
||||
if(!_riepilogo_agg.empty())
|
||||
if (!_riepilogo_agg.empty())
|
||||
{
|
||||
for(auto i = _riepilogo_agg.begin(); i != _riepilogo_agg.end(); ++i)
|
||||
for (auto i = _riepilogo_agg.begin(); i != _riepilogo_agg.end(); ++i)
|
||||
{
|
||||
const TCodiceIVA cod_iva(i->first);
|
||||
add_riepilogo_iva(paf2200f, cod_iva, eiva);
|
||||
@ -2405,7 +2405,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
doc.scadenze_recalc(); // Ricalcola array delle rate
|
||||
TString_array& scad = doc.scadenze();
|
||||
const char* rateazione = pag.cond_pag_sdi(); // A rate (TP01) o una soluzione(TP02)?
|
||||
paf2400f.set("PN_RIGA", ZERO); // Al momento non gestiamo più tipologie di pagamento per documento
|
||||
paf2400f.set("PN_RIGA", ZERO); // Al momento non gestiamo pi tipologie di pagamento per documento
|
||||
paf2400f.set("PN_CONDPAGAMENTO", rateazione);
|
||||
paf2400f.set("PN_GESTIONE", "D");
|
||||
ok &= insert(paf2400f);
|
||||
@ -2429,7 +2429,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento"));
|
||||
if ((tipo_pag == 8 || tipo_pag == 9) && iban.blank()) // R.I.D. o Bonifico
|
||||
{
|
||||
log(1, TR("Non è presente il codice IBAN per il pagamento"));
|
||||
log(1, TR("Non presente il codice IBAN per il pagamento"));
|
||||
}
|
||||
for (int nr = 0; nr < scad.items(); nr++)
|
||||
{
|
||||
@ -2455,11 +2455,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
{
|
||||
if (!dongle().active(RSAUT))
|
||||
{
|
||||
log(1, "Impossibile generare la fattura, il modulo RS non è abilitato!");
|
||||
log(1, "Impossibile generare la fattura, il modulo RS non abilitato!");
|
||||
}
|
||||
else if (!doc.tipo().main_print_profile(rep, 2))
|
||||
{
|
||||
log(1, "Impossibile generare la fattura, non è disponibile un profilo di stampa per questo tipo documento!");
|
||||
log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2480,7 +2480,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
{
|
||||
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?"))
|
||||
if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -2494,7 +2494,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
{
|
||||
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?";
|
||||
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;
|
||||
@ -2581,7 +2581,7 @@ bool TDoc_fp::doc_to_paf()
|
||||
|
||||
TRectype& TDoc_fp::key_to_doc(const TDoc_key& key)
|
||||
{
|
||||
if(_doc_rec != nullptr)
|
||||
if (_doc_rec != nullptr)
|
||||
delete _doc_rec;
|
||||
_doc_rec = new TRectype(LF_DOC);
|
||||
_doc_rec->put(DOC_PROVV, key.provv());
|
||||
|
@ -1,4 +1,4 @@
|
||||
#ifndef __ISAM_H
|
||||
+#ifndef __ISAM_H
|
||||
#define __ISAM_H
|
||||
|
||||
#ifndef __CURRENCY_H
|
||||
|
@ -165,6 +165,7 @@ protected:
|
||||
public:
|
||||
bool valid_cursor() const { return _cursor != NULL; }
|
||||
virtual TCursor* cursor() const;
|
||||
void set_filterfunction(FILTERFUNCTION ff, bool update = false) { cursor()->set_filterfunction(ff, update); }
|
||||
virtual void freeze(bool on = true) { return cursor()->freeze(on); }
|
||||
virtual void unfreeze() { return cursor()->freeze(false); }
|
||||
virtual bool frozen() const { return cursor()->frozen(); }
|
||||
|
@ -2920,6 +2920,55 @@ void TReport::mask2report(const TMask & m)
|
||||
}
|
||||
}
|
||||
|
||||
void TReport::reset_export_sections()
|
||||
{
|
||||
FOR_EACH_ASSOC_OBJECT(_sections, os, sec_key, sec_item)
|
||||
{
|
||||
TReport_section * sect = (TReport_section *)sec_item;
|
||||
const bool section_shown = _default_shown_sections.is_key(sec_key);
|
||||
|
||||
sect->show(section_shown);
|
||||
}
|
||||
}
|
||||
|
||||
void TReport::set_export_sections(export_type type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case _export_printer :
|
||||
break;
|
||||
case _export_visualize :
|
||||
break;
|
||||
case _export_excel :
|
||||
{
|
||||
FOR_EACH_ASSOC_OBJECT(_sections, os, sec_key, sec_item)
|
||||
{
|
||||
const TString4 sec_id(sec_key);
|
||||
TReport_section * sect = (TReport_section *)sec_item;
|
||||
|
||||
sect->show(sect->shown() && (sec_id == "H0" || sec_id.starts_with("B")));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _export_dbase:
|
||||
{
|
||||
FOR_EACH_ASSOC_OBJECT(_sections, os, sec_key, sec_item)
|
||||
{
|
||||
const TString4 sec_id(sec_key);
|
||||
TReport_section * sect = (TReport_section *)sec_item;
|
||||
|
||||
sect->show(sect->shown() && sec_id.starts_with("B"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case _export_pdf :
|
||||
break;
|
||||
case _export_text :
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
KEY TReport::run_form(TMask& m)
|
||||
{
|
||||
report2mask(m);
|
||||
|
@ -370,7 +370,6 @@ protected:
|
||||
virtual int compare(const TSortable& s) const;
|
||||
void copy(const TReport_field& rf);
|
||||
TFieldtypes var_type() const;
|
||||
const TString& formatted_text() const;
|
||||
void get_currency(TCurrency& cur) const;
|
||||
TReport_array_item* get_array_item() const;
|
||||
|
||||
@ -381,6 +380,9 @@ public:
|
||||
TReport_section& section() const { return *_section; }
|
||||
void set_section(TReport_section* sec) { _section = sec; }
|
||||
|
||||
const TString& formatted_text() const;
|
||||
|
||||
|
||||
bool has_font() const { return _font != NULL; }
|
||||
const TReport_font& font() const;
|
||||
const TReport_font& print_font() const;
|
||||
@ -535,6 +537,7 @@ public:
|
||||
|
||||
// Internal usage only
|
||||
typedef void (*FLDMSG_FUNC)(TReport_field& rf, void* jolly);
|
||||
typedef enum { _export_printer, _export_visualize, _export_excel, _export_pdf, _export_text, _export_dbase } export_type;
|
||||
|
||||
class TReport : public TAlex_virtual_machine
|
||||
{
|
||||
@ -556,6 +559,7 @@ class TReport : public TAlex_virtual_machine
|
||||
TString_array _allegati;
|
||||
TReport_field* _curr_field;
|
||||
bool _page_split, _page_merge;
|
||||
TAssoc_array _default_shown_sections;
|
||||
|
||||
protected:
|
||||
virtual const char* class_name() const { return "Report"; }
|
||||
@ -590,6 +594,9 @@ public:
|
||||
bool kill_section(char type, int level);
|
||||
int find_max_level(char type) const;
|
||||
|
||||
virtual void reset_export_sections();
|
||||
virtual void set_export_sections(export_type type);
|
||||
|
||||
virtual bool on_link(const TReport_link& link);
|
||||
virtual bool use_mask() { return true;}
|
||||
|
||||
|
@ -1647,6 +1647,9 @@ HIDDEN bool ask_export_filename(TFilename& fname)
|
||||
bool TBook::export_text(TFilename& fname, bool signature, int size, bool goto_url, bool ask_filename)
|
||||
{
|
||||
TString ext = fname.ext(); ext.lower();
|
||||
|
||||
if (ext.blank())
|
||||
fname.ext("txt");
|
||||
if (ext == "pdf")
|
||||
return export_pdf(fname, signature, goto_url, ask_filename);
|
||||
if (ext.starts_with("xls") || ext.starts_with("htm"))
|
||||
@ -1843,10 +1846,101 @@ static void reformat_excel(TString& str)
|
||||
}
|
||||
}
|
||||
|
||||
bool TBook::export_dbase(TFilename& fname, bool signature, TTrec * desc, bool goto_url, bool ask_filename)
|
||||
{
|
||||
TFilename temp;
|
||||
TToken_string line(8192, '\t');
|
||||
TString ext = fname.ext(); ext.lower();
|
||||
|
||||
if (ext.blank())
|
||||
fname.ext("dbf");
|
||||
if (desc == nullptr)
|
||||
{
|
||||
ifstream ifstream(temp);
|
||||
int nfields = 0;
|
||||
|
||||
while (!ifstream.eof())
|
||||
{
|
||||
ifstream.getline(line.get_buffer(), line.size());
|
||||
if (nfields < line.items())
|
||||
nfields = line.items();
|
||||
}
|
||||
desc = new TTrec;
|
||||
for (int i = 0; i < nfields; i++)
|
||||
desc->update_fielddef(i, TToken_string(format("FLD%03d|1|80|0", i)));
|
||||
desc->update_keydef(0, TToken_string("FLD001|"));
|
||||
}
|
||||
|
||||
if (fname.exist())
|
||||
{
|
||||
TFilename f(fname);
|
||||
|
||||
f.ext("*");
|
||||
remove_files(f, false);
|
||||
}
|
||||
TExternisamfile dbf(fname, *desc);
|
||||
|
||||
temp.temp("exp", "xls");
|
||||
export_excel(temp, signature);
|
||||
|
||||
ifstream ifstream(temp);
|
||||
|
||||
while (!ifstream.eof())
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
ifstream.getline(line.get_buffer(), line.size());
|
||||
if (line.full())
|
||||
{
|
||||
dbf.zero();
|
||||
FOR_EACH_STR_TOKEN(line, val)
|
||||
if (*desc->rec().Fd[i].Name != '\0')
|
||||
switch (desc->rec().Fd[i].TypeF)
|
||||
{
|
||||
case _alfafld:
|
||||
case _charfld:
|
||||
case _boolfld:
|
||||
case _memofld:
|
||||
dbf.put(desc->rec().Fd[i++].Name, val);
|
||||
break;
|
||||
case _intfld :
|
||||
case _longfld :
|
||||
case _realfld :
|
||||
case _wordfld :
|
||||
case _intzerofld :
|
||||
case _longzerofld :
|
||||
dbf.put(desc->rec().Fd[i++].Name, real::ita2eng(val));
|
||||
break;
|
||||
case _datefld :
|
||||
dbf.put(desc->rec().Fd[i++].Name, TDate(atoi(val.left(2)), atoi(val.mid(3,2)), 2000 + atoi(val.right(2))));
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
dbf.write();
|
||||
}
|
||||
}
|
||||
remove(temp);
|
||||
safe_delete(desc);
|
||||
if (signature && main_app().has_module(FDAUT))
|
||||
{
|
||||
char outfile[_MAX_PATH] = "";
|
||||
if (xvt_sign_file(fname, outfile))
|
||||
fname = outfile;
|
||||
}
|
||||
|
||||
if (goto_url)
|
||||
xvt_sys_goto_url(fname, "open");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TBook::export_excel(TFilename& fname, bool signature, bool goto_url, bool ask_filename)
|
||||
{
|
||||
TTabulator tab;
|
||||
TString ext = fname.ext(); ext.lower();
|
||||
|
||||
if (ext.blank())
|
||||
fname.ext("xls");
|
||||
if (ask_filename && !ask_export_filename(fname))
|
||||
return false;
|
||||
|
||||
@ -2286,6 +2380,10 @@ bool TBook::print(size_t pagefrom, size_t pageto, word copies)
|
||||
|
||||
bool TBook::export_pdf(TFilename& filename, bool signature, bool goto_url, bool ask_filename)
|
||||
{
|
||||
TString ext = filename.ext(); ext.lower();
|
||||
|
||||
if (ext.blank())
|
||||
filename.ext("pdf");
|
||||
bool ok = (pages() > 0) && main_app().has_module(RSAUT); // Controllo paranoico dei permessi
|
||||
if (ok)
|
||||
{
|
||||
@ -2359,6 +2457,11 @@ bool TBook::esporta()
|
||||
if (ok)
|
||||
xvt_sys_goto_url(fname, "open");
|
||||
break;
|
||||
case K_DBF:
|
||||
ok = export_dbase(fname, signature);
|
||||
if (ok)
|
||||
xvt_sys_goto_url(fname, "open");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -2891,7 +2994,7 @@ void TReport_book::add_doc(const TString& name)
|
||||
|
||||
TReport* rep = _report; // Salvo variabile globale
|
||||
|
||||
add(*eminem, true);
|
||||
add(*eminem, _export_printer, true);
|
||||
_report = rep; // Ripristino variabile globale
|
||||
}
|
||||
delete eminem;
|
||||
@ -2900,11 +3003,12 @@ void TReport_book::add_doc(const TString& name)
|
||||
TBook::add_doc(name);
|
||||
}
|
||||
|
||||
bool TReport_book::add(TReport& rep, bool progind)
|
||||
bool TReport_book::add(TReport& rep, export_type type, bool progind)
|
||||
{
|
||||
if (!init(rep))
|
||||
return false;
|
||||
|
||||
_report->set_export_sections(type);
|
||||
if (!_report->execute_prescript())
|
||||
return false;
|
||||
|
||||
|
@ -97,6 +97,8 @@ public:
|
||||
virtual bool archive(const char* repname, bool signature);
|
||||
virtual bool preview();
|
||||
|
||||
// esporta il book in un file dbf il tracciato record passato viene disallocato
|
||||
virtual bool export_dbase(TFilename& fname, bool signature, TTrec * desc = nullptr, bool goto_url = false, bool ask_filename = false);
|
||||
virtual bool export_excel(TFilename& fname, bool signature, bool goto_url = false, bool ask_filename = false);
|
||||
virtual bool export_pdf(TFilename& fname, bool signature, bool goto_url = false, bool ask_filename = false);
|
||||
virtual bool export_text(TFilename& fname, bool signature, int size, bool goto_url = false, bool ask_filename = false);
|
||||
@ -134,7 +136,7 @@ protected:
|
||||
void print_subsections(int father);
|
||||
|
||||
public:
|
||||
bool add(TReport& report, bool progind = true);
|
||||
bool add(TReport& report, export_type type = _export_printer, bool progind = true);
|
||||
|
||||
virtual int lpi() const;
|
||||
virtual int cpi() const;
|
||||
|
@ -134,7 +134,7 @@ bool check_record(TISAM_recordset* rec, const bool mod_esterometro,
|
||||
rdoc.put(DOC_NDOC, rec->get("23.DNDOC").as_string());
|
||||
|
||||
// Se riesco a generare la chiave, trovo il record e non ha il flag di gestione in errore o un errore esterno, so che è stato inviato
|
||||
const bool is_sent = rdoc.read(doc) == NOERR && chiave_paf(rdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != "E" && paf0100f.sq_get("P1_ERREST") != "*";
|
||||
const bool is_sent = rdoc.read(doc) == NOERR && chiave_paf_doc(rdoc, hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != "E" && paf0100f.sq_get("P1_ERREST") != "*";
|
||||
|
||||
// Se voglio solo quelli inviati e non è stato inviato o
|
||||
// voglio solo quelli non inviati ed è stato inviato, RUSPA!
|
||||
|
Loading…
x
Reference in New Issue
Block a user