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:
parent
9aa07231c3
commit
c7d5a79111
@ -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" <<
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user