Patch level : nopatch

Files correlati     :
Commento        :

Sviluppo  TD16-17-18.... modulo FP

Interno :
Controllare campo 2.1.1.3 P7_DATA sembra la data registrazione dagli appunti
Controllare se  provvisorio può essre anche blank saberre più comodo
Controllare 2.1.6
Riverificare l'invio fatture fatture
This commit is contained in:
Alessandro Bonazzi 2021-12-08 21:11:20 +01:00
parent 9aa07231c3
commit c7d5a79111
3 changed files with 132 additions and 32 deletions

View File

@ -126,12 +126,14 @@ void TPAR_mask::fill()
TPaf_record paf0100f("PAF0100F");
TSheet_field& regs = sfield(F_REGS);
TString query;
const bool provvisorio = get_bool(F_PROVVISORIO);
enable(DLG_OK, filter_selected.empty() || filter_selected == "E");
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());
regs.enable_column(S_ONLYGEN, !provvisorio); // che regola si usa ??
/*
VECCHIA QUERY
@ -177,7 +179,7 @@ void TPAR_mask::fill()
if (chiave_paf_mov(mov, tipodocsdi, hfatt, bfatt))
{
if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != " " && paf0100f.sq_get("P1_ERRINT") != "*")
if (paf0100f.search(nullptr, hfatt, bfatt) && paf0100f.sq_get("P1_GESTIONE") != "" && paf0100f.sq_get("P1_ERRINT") != "*")
{
if (paf0100f.sq_get("P1_GESTIONE") != filter_selected)
continue;
@ -197,7 +199,7 @@ void TPAR_mask::fill()
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);
TString rif = get_dest_sdi(rec.get_string(MOV_TIPO)[0], rec.get_long(MOV_CODCF), EMPTY_STRING);
// Se è ancora vuoto potrebbe essere estero
if (rif.empty())
@ -229,7 +231,8 @@ void TPAR_mask::fill()
}
regs.set_row_cell(S_SPLITPAY, split, r);
regs.set_row_cell(S_ATTACH, false, r); // verificare
regs.set_row_cell(S_ONLYGEN, get_bool(F_PROVVISORIO), r); // verificare
if (provvisorio)
regs.set_row_cell(S_ONLYGEN, false, r);
}
regs.force_update();
@ -358,6 +361,7 @@ void TPAR_mask::connect_keys()
"UPDATE PAF1000F SET P0_KEYHEADERFATT = '" << campo_hfatt << "', P0_KEYBODYFATT = '" << campo_bfatt << "' WHERE P0_KEYPRGINVIO = '" << db_prginv << "' AND P0_KEYHEADERFATT = '" << db_hfatt << "' AND P0_KEYBODYFATT = '" << db_bfatt << "'\n" <<
"UPDATE PAF1100F SET PA_KEYHEADERFATT = '" << campo_hfatt << "', PA_KEYBODYFATT = '" << campo_bfatt << "' WHERE PA_KEYPRGINVIO = '" << db_prginv << "' AND PA_KEYHEADERFATT = '" << db_hfatt << "' AND PA_KEYBODYFATT = '" << db_bfatt << "'\n" <<
"UPDATE PAF1200F SET PB_KEYHEADERFATT = '" << campo_hfatt << "', PB_KEYBODYFATT = '" << campo_bfatt << "' WHERE PB_KEYPRGINVIO = '" << db_prginv << "' AND PB_KEYHEADERFATT = '" << db_hfatt << "' AND PB_KEYBODYFATT = '" << db_bfatt << "'\n" <<
"UPDATE PAF1400F SET PB_KEYHEADERFATT = '" << campo_hfatt << "', PB_KEYBODYFATT = '" << campo_bfatt << "' WHERE PB_KEYPRGINVIO = '" << db_prginv << "' AND PB_KEYHEADERFATT = '" << db_hfatt << "' AND PB_KEYBODYFATT = '" << db_bfatt << "'\n" <<
"UPDATE PAF1600F SET PF_KEYHEADERFATT = '" << campo_hfatt << "', PF_KEYBODYFATT = '" << campo_bfatt << "' WHERE PF_KEYPRGINVIO = '" << db_prginv << "' AND PF_KEYHEADERFATT = '" << db_hfatt << "' AND PF_KEYBODYFATT = '" << db_bfatt << "'\n" <<
"UPDATE PAF1700F SET PG_KEYHEADERFATT = '" << campo_hfatt << "', PG_KEYBODYFATT = '" << campo_bfatt << "' WHERE PG_KEYPRGINVIO = '" << db_prginv << "' AND PG_KEYHEADERFATT = '" << db_hfatt << "' AND PG_KEYBODYFATT = '" << db_bfatt << "'\n" <<
"UPDATE PAF1800F SET PI_KEYHEADERFATT = '" << campo_hfatt << "', PI_KEYBODYFATT = '" << campo_bfatt << "' WHERE PI_KEYPRGINVIO = '" << db_prginv << "' AND PI_KEYHEADERFATT = '" << db_hfatt << "' AND PI_KEYBODYFATT = '" << db_bfatt << "'\n" <<
@ -398,7 +402,7 @@ void TPAR_mask::export_paf()
int ndocs = 0;
TSheet_field& sht = sfield(F_REGS);
const TString &tipo_doc_sdi = get(F_TIPO_SDI);
TReg_fp elab(tipo_doc_sdi);
TReg_fp elab(tipo_doc_sdi, get_bool(F_PROVVISORIO));
//elab.set_cache_insert(true);
if (!sht.empty())
@ -619,6 +623,7 @@ void TPAR_mask::set_err_paf()
"UPDATE PAF1000F SET P0_GESTIONE = 'E', P0_KEYPRGINVIO = 'DELETED' WHERE P0_KEYHEADERFATT = '" << hfatt << "' AND P0_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF1100F SET PA_GESTIONE = 'E', PA_KEYPRGINVIO = 'DELETED' WHERE PA_KEYHEADERFATT = '" << hfatt << "' AND PA_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF1200F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF1400F SET PB_GESTIONE = 'E', PB_KEYPRGINVIO = 'DELETED' WHERE PB_KEYHEADERFATT = '" << hfatt << "' AND PB_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF1600F SET PF_GESTIONE = 'E', PF_KEYPRGINVIO = 'DELETED' WHERE PF_KEYHEADERFATT = '" << hfatt << "' AND PF_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF1700F SET PG_GESTIONE = 'E', PG_KEYPRGINVIO = 'DELETED' WHERE PG_KEYHEADERFATT = '" << hfatt << "' AND PG_KEYBODYFATT = '" << bfatt << "';\n" <<
"UPDATE PAF1800F SET PI_GESTIONE = 'E', PI_KEYPRGINVIO = 'DELETED' WHERE PI_KEYHEADERFATT = '" << hfatt << "' AND PI_KEYBODYFATT = '" << bfatt << "';\n" <<

View File

@ -83,6 +83,9 @@ public:
TString& insert_string();
TString& update_string();
TString& filter_string();
bool update();
bool insert();
TString& remove_string(bool id_riga = false);
bool remove();
@ -643,6 +646,7 @@ private:
TFP_nota_piede_f _riga_npf;
bool _has_cust;
TString _tipo_doc_sdi;
bool _provvisorio;
bool insert(TPaf_record& p);
bool remove(TPaf_record& p);
@ -679,6 +683,7 @@ protected:
void set_qta_prezzo(TPaf_record& paf1800f, const TMovimento_contabile& mov, int n_row) const;
void add_ritenuta(const TMovimento_contabile & mov, int n_row, TPaf_record& paf0700f) const;
bool add_riepilogo_iva(const TMovimento_contabile mov, int n_riga);
const char * stato_paf() const { return _provvisorio ? " " : "D"; }
const TFirm& TReg_fp::get_firm(){return prefix().firm();}
@ -696,7 +701,7 @@ public:
void set_cache_insert(const bool v) { _cache_insert = v; }
TReg_fp(const char* tipo_doc_sdi );
TReg_fp(const char* tipo_doc_sdi, bool provvisorio);
~TReg_fp();
};
#endif // __FPLIB_H

View File

@ -469,27 +469,30 @@ bool TPaf_record::remove()
bool TPaf_record::search()
{
CHECKS(_fields.items() > 0, "Can't search with empty key on table ", static_cast<const char*>(_table));
TString256 query;
query << "SELECT TOP 1 * FROM " << _table << " WHERE ";
bool first = true;
query << "SELECT TOP 1 * FROM " << _table << " WHERE " << filter_string() << " ORDER BY ";
first = true;
FOR_EACH_TOKEN(_key, fld)
{
const TVariant& var = get(fld);
if (!var.is_null())
query << fld << '=' << var2str(fld, var) << " AND ";
{
if (!first)
query << ", ";
first = false;
query << fld;
}
}
query.rtrim(5);
query << " ORDER BY ";
FOR_EACH_TOKEN(_key, fld)
{
const TVariant& var = get(fld);
if (!var.is_null())
query << fld << ", ";
}
query.rtrim(2) << " DESC;";
query << ";";
// return xvt_sql_execute(_db, query, paf_search_record, this) == 1;
// TODO: Valutare
return fp_db().sq_set_exec(query);
}
// Carica un record in base ad un massimo di 3 campi chiave
bool TPaf_record::search(const char* k1, const char* k2, const char* k3)
{
@ -500,31 +503,93 @@ bool TPaf_record::search(const char* k1, const char* k2, const char* k3)
set(_key.get(2), k3);
return search();
}
TString & TPaf_record::insert_string()
{
CHECKS(_fields.items() >= _key.items(), "Can't insert empty record on table ", _table);
static TString query, values;
query.cut(0); values.cut(0);
TString & query = get_tmp_string();
TString & values = get_tmp_string();
bool first = true;
query << "INSERT INTO " << _table << "\n(";
FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm)
{
const TVariant& var = get(fld);
if (!var.is_null())
{
query << fld << ',';
values << var2str(fld, var) << ',';
if (!first)
{
query << ", ";
values << ", ";
}
first = false;
query << fld;
values << var2str(fld, var);
}
}
query.rtrim(1);
values.rtrim(1);
query << ")\nVALUES (" << values << ");";
return query;
}
TString & TPaf_record::update_string()
{
CHECKS(_fields.items() >= _key.items(), "Can't insert empty record on table ", _table);
TString & query = get_tmp_string();
bool first = true;
query << "UPDATE " << _table << "\nSET ";
FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm)
{
const TVariant& var = get(fld);
if (!first)
query << ", ";
first = false;
query << fld << " = " << var2str(fld, var);
}
query << "\nWHERE " << filter_string();
return query;
}
TString & TPaf_record::filter_string()
{
CHECKS(_fields.items() > 0, "Can't search with empty key on table ", static_cast<const char*>(_table));
TString & filter = get_tmp_string();
bool first = true;
FOR_EACH_TOKEN(_key, fld)
{
const TVariant& var = get(fld);
if (!var.is_null())
{
if (!first)
filter << " AND ";
first = false;
filter << fld << '=' << var2str(fld, var);
}
}
return filter;
}
// Aggiunge un record al db
bool TPaf_record::insert()
{
return fp_db().sq_set_exec(insert_string(), false);
if (search())
return update();
else
return fp_db().sq_set_exec(insert_string(), false);
}
// Aggiunge un record al db
bool TPaf_record::update()
{
return fp_db().sq_set_exec(update_string(), false);
}
// Crea un record della tabella data ed imposta i nomi dei campi chiave
TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',')
{
@ -2207,7 +2272,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf2100f.set("PK_TIPODATO", "INTENTO");
paf2100f.set("PK_RIFDATO", dichiar);
paf2100f.set("PK_RIFDATA", dataprot);
ok &= paf2100f.insert();
ok &= insert(paf2100f);
}
riga++;
}
@ -2917,7 +2982,7 @@ bool TReg_fp::add_riepilogo_iva(const TMovimento_contabile mov, int n_riga)
paf2200f.set("PL_ESIGIVA", ""); // TODO va compilato ???
paf2200f.set("PL_RIFNORMATIVO", cod_iva.descrizione());
paf2200f.set("PL_GESTIONE", "D");
paf2200f.set("PL_GESTIONE", stato_paf());
// Inserisco
return insert(paf2200f);
@ -2937,7 +3002,7 @@ bool TReg_fp::export_paf0100f()
tel << get_firm().get(NDT_PTEL) << get_firm().get(NDT_TEL);
paf0100f.set("P1_TELEFONO", tel);
paf0100f.set("P1_MAIL", get_firm().get(NDT_MAIL));
paf0100f.set("P1_GESTIONE", "D");
paf0100f.set("P1_GESTIONE", stato_paf());
paf0100f.set("P1_ERRINT", "");
// </DatiTrassmissione>
return insert(paf0100f);
@ -2994,7 +3059,7 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov)
paf0200f.set("P2_SEDENRCIVICO", fornitore.civico_residenza().left(8)); //
paf0200f.set("P2_SEDECOMUNE", fornitore.comune_residenza()); //
paf0200f.set("P2_SEDENAZ", fornitore.stato_residenza_ISO()); //
paf0200f.set("P2_GESTIONE", "D");
paf0200f.set("P2_GESTIONE", stato_paf());
// I clienti esteri possono avere CAP alfanumerici, li tolgo
if (fornitore.stato_residenza_ISO() != "IT")
@ -3077,13 +3142,13 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov)
if (titolo.full())
paf0400f.set("P4_ANATITOLO", cache().get("TIT", titolo, "S0"));
paf0400f.set("P4_GESTIONE", "D");
paf0400f.set("P4_GESTIONE", stato_paf());
ok &= insert(paf0400f);
// </CessionarioCommittente>
TPaf_record& paf0700f = _paf_container.get_paf("PAF0700F");
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_DATA", mov.get_date(MOV_DATAREG)); // sembra sempre la data di registrazione visto che è na data di ricezione
TString numdoc = mov.get(MOV_NUMDOCEXT);
if (numdoc.blank())
@ -3095,15 +3160,40 @@ bool TReg_fp::reg_to_paf(const TMovimento_contabile& mov)
}
paf0700f.set("P7_NUMERO", numdoc);
paf0700f.set("P7_GESTIONE", "D");
paf0700f.set("P7_GESTIONE", stato_paf());
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.
paf2700f.set("PQ_IMPTOTDOC", mov.get(MOV_TOTDOC));
paf2700f.set("PQ_GESTIONE", "D");
paf2700f.set("PQ_GESTIONE", stato_paf());
ok &= insert(paf2700f);
// </DatiOrdineAcquisto>
// paf1400 Dati fatture collegate
TPaf_record& paf1400f = _paf_container.get_paf("PAF1400F");
reset(paf1400f);
TString idsdi = mov.get(MOV_IDDOCSDI);
TDate datasdi = mov.get_date(MOV_DATADOCSDI);
if (idsdi.blank())
{
const long nregcoll = mov.get_long(MOV_MOVCOLL);
if (nregcoll > 0L)
{
const TRectype & movcoll = cache().get(LF_MOV, nregcoll);
idsdi = movcoll.get(MOV_IDDOCSDI);
datasdi = movcoll.get_date(MOV_DATADOCSDI);
}
}
paf1400f.set("PD_IDDOC", idsdi);
paf1400f.set("PD_DATADOC", datasdi);
ok &= insert(paf1400f);
// </DatiGenerali>
// Azzera DDT
TPaf_record& paf1600f = _paf_container.get_paf("PAF1600F");
@ -3170,7 +3260,7 @@ bool TReg_fp::reg_to_paf(long n_mov)
//NON LE CAPISCO
TReg_fp::TReg_fp(const char* tipo_doc_sdi) : _cache_insert(false) , _tipo_doc_sdi(tipo_doc_sdi)
TReg_fp::TReg_fp(const char* tipo_doc_sdi, bool provvisorio) : _cache_insert(false) , _tipo_doc_sdi(tipo_doc_sdi), _provvisorio(provvisorio)
{
_ditta.init(LF_NDITTE, prefix().get_codditta());
_cofi = get_cofi_tras();