Patch level : 12.0 no-patch
Files correlati : fp Commento : - Rifatta interfaccia filtri - Aggiunte nuove funzioni per il filtraggio - Modificato warning in caricamento - Sistemati bug dove non caricava la query - Aggiunto salvataggio/caricamento campi - Aggiunta funzione get_coddest(...) - Sistemato log - Sistemata scrittura descrizione, adesso viene messa direttamente nel paf3000f - Aggiornamento sql per campi data
This commit is contained in:
parent
37301cc4c5
commit
7f3054a080
@ -109,7 +109,7 @@ bool TParametri_mask::on_key(KEY key)
|
||||
m.field(101).check_type(CHECK_REQUIRED);
|
||||
while(m.run() == K_ENTER)
|
||||
{
|
||||
if (m.get(101) == "sirioFATT99") // Hardcode password are the best!
|
||||
if (m.get(101) == "sirioFATT99") // Hardcoded password are the best!
|
||||
{
|
||||
for (int i = F_SETPATCH; i <= F_REBORNDB; i++)
|
||||
enable(i);
|
||||
|
@ -17,7 +17,7 @@ ENDPAGE
|
||||
|
||||
PAGE "Configurazione FP" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 8
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
BEGIN
|
||||
PROMPT 1 1 "@BDatabase"
|
||||
END
|
||||
@ -79,13 +79,13 @@ BEGIN
|
||||
MODULE RS
|
||||
END
|
||||
|
||||
STRING F_FLDDEST 300 50
|
||||
STRING F_FLDDEST 250 50
|
||||
BEGIN
|
||||
PROMPT 2 13 "Destinazione Server "
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
STRING F_FLDUSRDEST 300 50
|
||||
STRING F_FLDUSRDEST 250 50
|
||||
BEGIN
|
||||
PROMPT 2 14 "Destinazione User "
|
||||
DSELECT
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
#include "fp0.h"
|
||||
#include "fp0300a.h"
|
||||
#include <memory>
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -30,19 +31,25 @@ protected:
|
||||
void set_filter_changed();
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
void next_page(int p);
|
||||
bool checkNotEmpty();
|
||||
|
||||
bool check_not_empty();
|
||||
bool check_full_fields() const;
|
||||
bool check_tipo_doc(const TTipo_documento& td);
|
||||
void fill();
|
||||
void init();
|
||||
bool is_fattura(const TRectype& doc) const;
|
||||
|
||||
void load_all_fields();
|
||||
|
||||
bool _filter_changed;
|
||||
unique_ptr<TToken_string> _tipi_doc_scelti;
|
||||
|
||||
public:
|
||||
TPA_mask() : TAutomask("fp0300a"), _filter_changed(true)
|
||||
{
|
||||
disable(DLG_OK);
|
||||
load_all_fields();
|
||||
}
|
||||
void save_all_fields() const;
|
||||
};
|
||||
|
||||
bool TPA_mask::is_fattura(const TRectype& doc) const
|
||||
@ -55,6 +62,40 @@ bool TPA_mask::is_fattura(const TRectype& doc) const
|
||||
return cn.tipo() == 2 && !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa da P.A.
|
||||
}
|
||||
|
||||
void TPA_mask::save_all_fields() const
|
||||
{
|
||||
ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI));
|
||||
ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND));
|
||||
ini_set_string(CONFIG_DITTA, "fp", "codnum", get(F_CODNUM));
|
||||
|
||||
TToken_string tipidocs = get_tmp_string();
|
||||
FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
|
||||
{
|
||||
tipidocs.add(r->get(0));
|
||||
}
|
||||
ini_set_string(CONFIG_DITTA, "fp", "tipodocs", tipidocs);
|
||||
}
|
||||
|
||||
void TPA_mask::load_all_fields()
|
||||
{
|
||||
set(F_DATAINI, ini_get_string(CONFIG_DITTA, "fp", "dataini"));
|
||||
set(F_DATAEND, ini_get_string(CONFIG_DITTA, "fp", "dataend"));
|
||||
set(F_CODNUM, ini_get_string(CONFIG_DITTA, "fp", "codnum"));
|
||||
TToken_string tipidocs(ini_get_string(CONFIG_DITTA, "fp", "tipodocs"));
|
||||
|
||||
auto& sheet = sfield(F_DOCUMENTI_TIPO);
|
||||
sheet.hide();
|
||||
FOR_EACH_STR_TOKEN(tipidocs, tok)
|
||||
{
|
||||
|
||||
TToken_string& row = sheet.row(-1);
|
||||
row.add(tok);
|
||||
row.add(TTipo_documento(tok).tipo_doc_sdi());
|
||||
}
|
||||
sheet.force_update();
|
||||
sheet.show();
|
||||
}
|
||||
|
||||
TString& add_filter(const TString& field, const TString& from, const TString& to)
|
||||
{
|
||||
TString& query = get_tmp_string();
|
||||
@ -78,7 +119,10 @@ TString& add_filter(const TString& field, const TString& from, const TString& to
|
||||
|
||||
void TPA_mask::fill()
|
||||
{
|
||||
|
||||
save_all_fields();
|
||||
// Pulisco i tipi documento
|
||||
_tipi_doc_scelti.reset();
|
||||
|
||||
TSheet_field& docs = sfield(F_DOCS);
|
||||
TString_array& sht = docs.rows_array();
|
||||
docs.hide();
|
||||
@ -87,7 +131,7 @@ void TPA_mask::fill()
|
||||
|
||||
const TDate dal = get(F_DATAINI);
|
||||
TString filter_selected = get(F_FATTSEL);
|
||||
enable(DLG_OK, filter_selected != "N");
|
||||
enable(DLG_OK, filter_selected != "X");
|
||||
|
||||
// Record di controllo per eventuali elaborazioni precedenti
|
||||
TString hfatt(LEN_HFATT), bfatt(LEN_BFATT);
|
||||
@ -95,27 +139,26 @@ void TPA_mask::fill()
|
||||
|
||||
TString query;
|
||||
|
||||
query << "USE 33 " <<
|
||||
"SELECT (BETWEEN(33.DATADOC,#DADATADOC,#ADATADOC))&&(33.TIPOCF=='C')";
|
||||
query << "USE 33 KEY 3" <<
|
||||
"\nSELECT (33.TIPOCF=='C')&&" <<
|
||||
"(33.CODNUM==#CODNUM)";
|
||||
|
||||
query << add_filter("33.TIPODOC", get(F_DATIPODOC), get(F_ATIPODOC));
|
||||
|
||||
query << "\nJOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC";
|
||||
query << "\nJOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" <<
|
||||
"JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC\n" <<
|
||||
"FROM DATADOC=#DADATADOC\n" <<
|
||||
"TO DATADOC=#ADATADOC";
|
||||
|
||||
TISAM_recordset rec(query);
|
||||
if (get(F_DATIPODOC).full())
|
||||
rec.set_var("#DATIPODOC", get(F_DATIPODOC));
|
||||
if (get(F_ATIPODOC).full())
|
||||
rec.set_var("#ATIPODOC", get(F_ATIPODOC));
|
||||
|
||||
|
||||
rec.set_var("#CODNUM", get(F_CODNUM));
|
||||
rec.set_var("#DADATADOC", get_date(F_DATAINI));
|
||||
rec.set_var("#ADATADOC", get_date(F_DATAEND));
|
||||
|
||||
TProgress_monitor pi(rec.items(), NULL);
|
||||
TProgress_monitor pi(rec.items(), nullptr);
|
||||
|
||||
bool first, show, ask = !((show = (first = true)));
|
||||
int fat_no_cod = 0;
|
||||
|
||||
// Disabilito la colonna del codice ufficio
|
||||
docs.enable_column(docs.cid2index(S_UFFICIO), false);
|
||||
@ -128,13 +171,13 @@ void TPA_mask::fill()
|
||||
const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
|
||||
|
||||
// Controllo che il tipo documento sia OK
|
||||
if (td.tipo_doc_sdi().empty() || td.reg_fisc().empty())
|
||||
if(!check_tipo_doc(td))
|
||||
continue;
|
||||
|
||||
bool sent = false;
|
||||
if (chiave_paf(doc, hfatt, bfatt))
|
||||
{
|
||||
if (paf0100f.search(NULL, hfatt, bfatt))
|
||||
if (paf0100f.search(nullptr, hfatt, bfatt))
|
||||
{
|
||||
if (paf0100f.sq_get("P1_GESTIONE") != filter_selected)
|
||||
continue;
|
||||
@ -169,29 +212,13 @@ void TPA_mask::fill()
|
||||
// Segno la riga errata
|
||||
if (first)
|
||||
{
|
||||
// Abilito la colonna del codice ufficio per segnalare l'errore
|
||||
docs.enable_column(docs.cid2index(S_UFFICIO));
|
||||
first = false;
|
||||
// Abilito la colonna del codice ufficio per segnalare l'errore
|
||||
docs.enable_column(docs.cid2index(S_UFFICIO));
|
||||
}
|
||||
docs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), docs.cid2index(S_UFFICIO));
|
||||
|
||||
if (show)
|
||||
{
|
||||
TString msg; msg << "Trovata fattura " << rec.get(DOC_CODNUM).as_string() << "/" << rec.get(DOC_TIPODOC).as_string() << "/" << rec.get(DOC_NDOC).as_int() << " senza nessun codice destinatario/pec, Continuare?";
|
||||
const bool force_stop = !yesno_box(msg);
|
||||
if (!first && !ask && !force_stop)
|
||||
{
|
||||
show = yesno_box("Continuare a mostrare questo messaggio?");
|
||||
ask = true;
|
||||
}
|
||||
if (force_stop)
|
||||
{
|
||||
row.cut(0);
|
||||
docs.force_update();
|
||||
docs.show();
|
||||
return;
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
fat_no_cod++;
|
||||
}
|
||||
}
|
||||
if(rif.full())
|
||||
@ -220,6 +247,9 @@ void TPA_mask::fill()
|
||||
|
||||
docs.force_update();
|
||||
docs.show();
|
||||
|
||||
if (fat_no_cod > 0)
|
||||
warning_box("Sono state trovate una o più fatture senza codice destinatario nè pec");
|
||||
}
|
||||
|
||||
void TPA_mask::set_filter_changed()
|
||||
@ -283,7 +313,7 @@ bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
if (e == fe_modify && jolly == 0)
|
||||
if((e == fe_modify || e >= se_enter) && jolly == 0)
|
||||
{
|
||||
if (o.dlg() >= START_MASK && o.dlg() <= END_MASK)
|
||||
{
|
||||
@ -295,20 +325,22 @@ bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
|
||||
void TPA_mask::next_page(int p)
|
||||
{
|
||||
TAutomask::next_page(p);
|
||||
if (_filter_changed)
|
||||
bool ok = true;
|
||||
if (_filter_changed && p != 1000)
|
||||
{
|
||||
TSheet_field& sf = sfield(F_DOCS);
|
||||
if (curr_win() == sf.parent())
|
||||
if ((ok = _filter_changed = check_full_fields()))
|
||||
{
|
||||
TSheet_field& sf = sfield(F_DOCS);
|
||||
fill();
|
||||
sf.force_update();
|
||||
_filter_changed = false;
|
||||
}
|
||||
}
|
||||
if(ok)
|
||||
TAutomask::next_page(p);
|
||||
}
|
||||
|
||||
bool TPA_mask::checkNotEmpty()
|
||||
bool TPA_mask::check_not_empty()
|
||||
{
|
||||
TSheet_field& sheet = sfield(F_DOCS);
|
||||
TString msg;
|
||||
@ -325,6 +357,33 @@ bool TPA_mask::checkNotEmpty()
|
||||
return sheet.full();
|
||||
}
|
||||
|
||||
bool TPA_mask::check_full_fields() const
|
||||
{
|
||||
// Controllo ogni campo che sia valorizzato
|
||||
FOR_EACH_MASK_FIELD(*this, i, f)
|
||||
{
|
||||
if (!f->on_key(K_ENTER))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TPA_mask::check_tipo_doc(const TTipo_documento& td)
|
||||
{
|
||||
// Mi precarico la tabella dei documenti scelti
|
||||
|
||||
if(_tipi_doc_scelti == nullptr)
|
||||
{
|
||||
_tipi_doc_scelti.reset(new TToken_string());
|
||||
FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
|
||||
{
|
||||
_tipi_doc_scelti->add(r->get(0));
|
||||
}
|
||||
}
|
||||
// Controllo innanzitutto che sia tra quelli scelti
|
||||
return _tipi_doc_scelti->find(td.codice()) >= 0 && td.tipo_doc_sdi().full() && td.reg_fisc().full();
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TDoc2Paf
|
||||
@ -373,6 +432,7 @@ void TDoc2Paf::main_loop()
|
||||
{
|
||||
if (elab.commit() > 0)
|
||||
{
|
||||
mask.save_all_fields();
|
||||
message_box(FR("Sono stati elaborati %d documenti"), ndocs);
|
||||
}
|
||||
else
|
||||
|
@ -1,12 +1,15 @@
|
||||
#define START_MASK 301
|
||||
#define F_DATAINI 301
|
||||
#define F_DATAEND 302
|
||||
#define F_FATTSEL 303
|
||||
#define F_DACODNUM 304
|
||||
#define F_DATIPODOC 305
|
||||
#define F_ACODNUM 306
|
||||
#define F_ATIPODOC 307
|
||||
#define END_MASK 399
|
||||
#define F_DATAINI 401
|
||||
#define F_DATAEND 402
|
||||
#define F_FATTSEL 403
|
||||
#define F_CODNUM 404
|
||||
#define END_MASK 499
|
||||
|
||||
|
||||
#define F_DOCUMENTI_TIPO 301
|
||||
|
||||
#define S_TIPODOCSEL 101
|
||||
#define S_TIPODOCSDI 102
|
||||
|
||||
#define F_DOCS 201
|
||||
|
||||
|
@ -5,103 +5,50 @@ TOOLBAR "topbar" 0 0 0 2
|
||||
#include <allbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Fatture Pubblica Amministrazione" 0 2 0 0
|
||||
PAGE "Fatturazione Elettronica" 0 2 0 0
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 1 0 "Data iniziale"
|
||||
PROMPT 1 1 "Data iniziale"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE F_DATAEND
|
||||
BEGIN
|
||||
PROMPT 30 0 "Data finale"
|
||||
PROMPT 40 1 "Data finale "
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "La data finale non può essere minore della data iniziale"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
RADIOBUTTON F_FATTSEL 100
|
||||
RADIOBUTTON F_FATTSEL 3 35
|
||||
BEGIN
|
||||
PROMPT 1 1 "Fatture da visualizzare"
|
||||
PROMPT 1 2 "Fatture da visualizzare"
|
||||
ITEM "|Da inviare"
|
||||
ITEM "D|Diagnosticate"
|
||||
ITEM "P|Pronte"
|
||||
ITEM "X|XML Generato"
|
||||
ITEM "E|In errore"
|
||||
ITEM "N|Accettate"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
STRING F_DACODNUM 4
|
||||
STRING F_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 1 4 "Da Numerazione"
|
||||
FIELD CODNUM
|
||||
PROMPT 40 2 "Numerazione "
|
||||
HELP "Codice numerazione"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_DACODNUM
|
||||
INPUT CODTAB F_CODNUM
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_DACODNUM CODTAB
|
||||
CHECKTYPE FORCED
|
||||
OUTPUT F_CODNUM CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
FLAG "UPA"
|
||||
WARNING "Numerazione assente"
|
||||
KEY 1 2
|
||||
END
|
||||
|
||||
STRING F_DATIPODOC 4
|
||||
SPREADSHEET F_DOCUMENTI_TIPO 25 5
|
||||
BEGIN
|
||||
PROMPT 30 4 "Da tipo doc "
|
||||
FIELD TIPODOC
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
SELECT S3[37,40]!=""
|
||||
INPUT CODTAB F_DATIPODOC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Tipo SDI@10" S12
|
||||
OUTPUT F_DATIPODOC CODTAB
|
||||
CHECKTYPE FORCED
|
||||
FLAG "UP"
|
||||
END
|
||||
|
||||
STRING F_ACODNUM 4
|
||||
BEGIN
|
||||
PROMPT 1 5 "A Numerazione "
|
||||
FIELD CODNUM
|
||||
HELP "Codice numerazione"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_ACODNUM
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_ACODNUM CODTAB
|
||||
CHECKTYPE FORCED
|
||||
FLAG "UPA"
|
||||
WARNING "Numerazione assente"
|
||||
KEY 1 2
|
||||
END
|
||||
|
||||
STRING F_ATIPODOC 4
|
||||
BEGIN
|
||||
PROMPT 30 5 "A tipo doc "
|
||||
FIELD TIPODOC
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
SELECT S3[37,40]!=""
|
||||
INPUT CODTAB F_ATIPODOC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Tipo SDI@10" S12
|
||||
OUTPUT F_ATIPODOC CODTAB
|
||||
CHECKTYPE FORCED
|
||||
FLAG "UP"
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 256
|
||||
BEGIN
|
||||
PROMPT 1 -1 "Profilo "
|
||||
PSELECT
|
||||
FLAGS "H"
|
||||
PROMPT 40 3 ""
|
||||
ITEM "Tipo Doc"
|
||||
ITEM "Tipo SDI"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
@ -129,9 +76,55 @@ BEGIN
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga tipo doc" -1 -1 25 3
|
||||
|
||||
STRING S_TIPODOCSEL 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Tipo doc "
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
SELECT S3[37,40]!=""
|
||||
INPUT CODTAB S_TIPODOCSEL
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Tipo SDI@10" S12
|
||||
OUTPUT S_TIPODOCSEL CODTAB
|
||||
OUTPUT S_TIPODOCSDI S12
|
||||
CHECKTYPE FORCED
|
||||
FLAG "UPA"
|
||||
END
|
||||
|
||||
STRING S_TIPODOCSDI 4
|
||||
BEGIN
|
||||
PROMPT 1 2 "Tipo Doc SDI"
|
||||
FLAG "D"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "Tipo Documento" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
|
||||
PAGE "Documento" -1 -1 78 9
|
||||
|
||||
BOOLEAN S_SELECTED
|
||||
@ -245,7 +238,5 @@ BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
ENDMASK
|
@ -86,7 +86,7 @@ bool check_tables()
|
||||
if (r[0] == '-' && r[1] == '-')
|
||||
continue;
|
||||
s += r;
|
||||
// Cerco un ;
|
||||
// Cerco un ;
|
||||
const int limiter = s.find(';') + 1;
|
||||
if(limiter > 0)
|
||||
{
|
||||
@ -150,6 +150,31 @@ bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt)
|
||||
return hfatt.full();
|
||||
}
|
||||
|
||||
bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec)
|
||||
{
|
||||
TCli_for clifo(tipocf, codcf);
|
||||
coddest = clifo.vendite().get("PADESTIN");
|
||||
pec = clifo.get("PEC");
|
||||
bool enapec = false;
|
||||
if (coddest.empty())
|
||||
{
|
||||
// Controllo se ha la pec
|
||||
if (pec.full())
|
||||
{
|
||||
coddest = "0000000";
|
||||
enapec = true;
|
||||
}
|
||||
// Controllo se è straniero
|
||||
else if (TAnagrafica(LF_CLIFO, tipocf, codcf).estero())
|
||||
{
|
||||
coddest = "XXXXXXX";
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
* TPaf_record
|
||||
***************************************************************************/
|
||||
@ -291,7 +316,7 @@ TString& TPaf_record::remove_string()
|
||||
query << fld << '=' << var2str(fld, var);
|
||||
}
|
||||
}
|
||||
CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table);
|
||||
CHECKS(nkf >= 2, "Can't remove partial key on table ", static_cast<const char*>(_table));
|
||||
query << ';';
|
||||
return query;
|
||||
}
|
||||
@ -619,29 +644,32 @@ const TRectype& TDoc_fp::cco(const TRectype& doc) const
|
||||
{
|
||||
char tcon = doc.get_char(DOC_MODPAG);
|
||||
if (tcon < 'C') tcon = 'C';
|
||||
conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), (const char*)con);
|
||||
conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), static_cast<const char*>(con));
|
||||
}
|
||||
return cache().get("&CON", conkey);
|
||||
}
|
||||
|
||||
void TDoc_fp::log(int severity, const char* msg)
|
||||
{
|
||||
if (severity < 0)
|
||||
if (_log == nullptr)
|
||||
{
|
||||
_log = new TLog_report;
|
||||
}
|
||||
if (severity < 0)
|
||||
{
|
||||
_logpaf = msg;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_logpaf.full())
|
||||
{
|
||||
_logpaf = msg;
|
||||
}
|
||||
else if (_log == NULL)
|
||||
{
|
||||
_log = new TLog_report;
|
||||
if (_logpaf.full())
|
||||
{
|
||||
TString txt;
|
||||
txt << _logpaf << ": " << msg;
|
||||
_log->log(severity, txt);
|
||||
}
|
||||
else
|
||||
_log->log(severity, msg);
|
||||
TString txt;
|
||||
txt << _logpaf << ": " << msg;
|
||||
_log->log(severity, txt);
|
||||
}
|
||||
else
|
||||
_log->log(severity, msg);
|
||||
}
|
||||
}
|
||||
|
||||
bool TDoc_fp::show_log()
|
||||
@ -730,7 +758,6 @@ bool TDoc_fp::add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf)
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
{
|
||||
TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato
|
||||
@ -740,23 +767,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
|
||||
TString8 coddest = doc.clifor().vendite().get("PADESTIN");
|
||||
TString pec = doc.clifor().get("PEC");
|
||||
bool enapec = false;
|
||||
if (coddest.empty())
|
||||
{
|
||||
// Controllo se ha la pec
|
||||
if (pec.full())
|
||||
{
|
||||
coddest = "0000000";
|
||||
enapec = true;
|
||||
}
|
||||
// Controllo se è straniero
|
||||
else if (clifo.estero())
|
||||
{
|
||||
coddest = "XXXXXXX";
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!get_coddest(doc.clifor().tipo(), doc.clifor().codice(), coddest, pec))
|
||||
return false;
|
||||
|
||||
const bool enapec = coddest == "0000000" && pec.full();
|
||||
|
||||
const bool privato = coddest.len() != 6;
|
||||
bool ok = true;
|
||||
@ -1115,7 +1130,13 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
paf1800f.set("PI_KEYHEADERFATT", hfatt);
|
||||
paf1800f.set("PI_KEYBODYFATT", bfatt);
|
||||
paf1800f.set("PI_NUMEROLINEA", ++riga);
|
||||
paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc));
|
||||
|
||||
TPaf_record paf3000f("PAF3000F");
|
||||
paf3000f.set("PT_KEYHEADERFATT", hfatt);
|
||||
paf3000f.set("PT_KEYBODYFATT", bfatt);
|
||||
paf3000f.set("PT_RIFNUMLINEA", riga);
|
||||
paf3000f.set("PT_COMMENTO", descrizione(*rdoc));
|
||||
|
||||
// paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
|
||||
|
||||
// <CodiceArticolo>
|
||||
@ -1142,7 +1163,6 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
// </CodiceArticolo>
|
||||
|
||||
|
||||
set_IVA(codivadefault, paf1800f);
|
||||
|
||||
if (rdoc->is_merce())
|
||||
@ -1185,7 +1205,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
const real perc = str;
|
||||
if (!perc.is_zero())
|
||||
{
|
||||
paf2000f.set("PJ_KEYNLINEA", (long)r);
|
||||
paf2000f.set("PJ_KEYNLINEA", static_cast<long>(r));
|
||||
paf2000f.set("PJ_KEYNLINAR", ++nlin_sconto);
|
||||
if (perc > ZERO)
|
||||
{
|
||||
@ -1261,7 +1281,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, (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;
|
||||
}
|
||||
@ -1304,7 +1324,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
|
||||
paf1800f.set("PI_GESTIONE", "D");
|
||||
ok &= insert(paf1800f);
|
||||
ok &= insert(paf1800f) && insert(paf3000f);
|
||||
}
|
||||
// </DatiBeniServizi>
|
||||
|
||||
|
@ -19,7 +19,7 @@ bool check_tables();
|
||||
// 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);
|
||||
|
||||
bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec);
|
||||
|
||||
// Contenitore di campi di un record di database MSSQLServer
|
||||
class TPaf_record : public TObject
|
||||
@ -109,7 +109,8 @@ static bool get_bnp_iban(const TString& abi, const TString&
|
||||
static void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf);
|
||||
bool add_row_art(const TString codice_tipo, const TString& codice_valore, TPaf_record& paf);
|
||||
bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
|
||||
|
||||
void set_descrizione(const TRiga_documento* doc);
|
||||
|
||||
public:
|
||||
bool doc_to_paf(TDocumentoEsteso& doc);
|
||||
bool doc_to_paf(const TRectype& rec);
|
||||
|
86
src/fp/sql/fp0104.sql
Normal file
86
src/fp/sql/fp0104.sql
Normal file
@ -0,0 +1,86 @@
|
||||
-- Aggiornamento campi date Campo, sta roba va fatta perchè abbiamo già dei clienti in produzione!
|
||||
|
||||
-- FPERR00K
|
||||
ALTER TABLE FPERR00K DROP CONSTRAINT FPERR00Q;
|
||||
ALTER TABLE FPERR00K ALTER COLUMN PXUHRI DATETIME;
|
||||
ALTER TABLE FPERR00K ADD CONSTRAINT FPERR00K_TLLNNAPRV1 DEFAULT '19700101 00:00:00' FOR PXUHRI;
|
||||
UPDATE FPERR00K SET PXUHRI = '19700101 00:00:00' WHERE PXUHRI IS NULL;
|
||||
ALTER TABLE FPERR00K ALTER COLUMN PXUHRI DATETIME NOT NULL;
|
||||
ALTER TABLE FPERR00K ADD CONSTRAINT FPERR00Q PRIMARY KEY(PXPRGI, PXHFAT, PXBFAT, PXUHRI, PXNFIL, PXNLIN, PXNERR);
|
||||
|
||||
-- FPPRO00F
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAPROT DATETIME;
|
||||
ALTER TABLE FPPRO00F ADD CONSTRAINT FPPRO00F_TLLNNAPRV1 DEFAULT '19700101 00:00:00' FOR PZ_DATAPROT;
|
||||
UPDATE FPPRO00F SET PZ_DATAPROT = '19700101 00:00:00' WHERE PZ_DATAPROT IS NULL;
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAPROT DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAACCET DATETIME;
|
||||
ALTER TABLE FPPRO00F ADD CONSTRAINT FPPRO00F_TLLNNAPRV2 DEFAULT '19700101 00:00:00' FOR PZ_DATAACCET;
|
||||
UPDATE FPPRO00F SET PZ_DATAACCET = '19700101 00:00:00' WHERE PZ_DATAACCET IS NULL;
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAACCET DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATACONT DATETIME;
|
||||
ALTER TABLE FPPRO00F ADD CONSTRAINT FPPRO00F_TLLNNAPRV3 DEFAULT '19700101 00:00:00' FOR PZ_DATACONT;
|
||||
UPDATE FPPRO00F SET PZ_DATACONT = '19700101 00:00:00' WHERE PZ_DATACONT IS NULL;
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATACONT DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAARCH DATETIME;
|
||||
ALTER TABLE FPPRO00F ADD CONSTRAINT FPPRO00F_TLLNNAPRV4 DEFAULT '19700101 00:00:00' FOR PZ_DATAARCH;
|
||||
UPDATE FPPRO00F SET PZ_DATAARCH = '19700101 00:00:00' WHERE PZ_DATAARCH IS NULL;
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAARCH DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAORARIC DATETIME;
|
||||
ALTER TABLE FPPRO00F ADD CONSTRAINT FPPRO00F_TLLNNAPRV5 DEFAULT '19700101 00:00:00' FOR PZ_DATAORARIC;
|
||||
UPDATE FPPRO00F SET PZ_DATAORARIC = '19700101 00:00:00' WHERE PZ_DATAORARIC IS NULL;
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATAORARIC DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATASTATO DATETIME;
|
||||
ALTER TABLE FPPRO00F ADD CONSTRAINT FPPRO00F_TLLNNAPRV6 DEFAULT '19700101 00:00:00' FOR PZ_DATASTATO;
|
||||
UPDATE FPPRO00F SET PZ_DATASTATO = '19700101 00:00:00' WHERE PZ_DATASTATO IS NULL;
|
||||
ALTER TABLE FPPRO00F ALTER COLUMN PZ_DATASTATO DATETIME NOT NULL;
|
||||
|
||||
-- PAA0100F
|
||||
ALTER TABLE PAA0100F DROP CONSTRAINT PAA0100Q;
|
||||
DROP INDEX PAA0101I ON PAA0100F;
|
||||
ALTER TABLE PAA0100F ALTER COLUMN P1_DATAORARIC DATETIME;
|
||||
ALTER TABLE PAA0100F ADD CONSTRAINT PAA0100F_TLLNNAPRV1 DEFAULT '19700101 00:00:00' FOR P1_DATAORARIC;
|
||||
UPDATE PAA0100F SET P1_DATAORARIC = '19700101 00:00:00' WHERE P1_DATAORARIC IS NULL;
|
||||
ALTER TABLE PAA0100F ALTER COLUMN P1_DATAORARIC DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE PAA0100F ALTER COLUMN P1_DATASTATO DATETIME;
|
||||
ALTER TABLE PAA0100F ADD CONSTRAINT PAA0100F_TLLNNAPRV2 DEFAULT '19700101 00:00:00' FOR P1_DATASTATO;
|
||||
UPDATE PAA0100F SET P1_DATASTATO = '19700101 00:00:00' WHERE P1_DATASTATO IS NULL;
|
||||
ALTER TABLE PAA0100F ALTER COLUMN P1_DATASTATO DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE PAA0100F ADD CONSTRAINT PAA0100Q PRIMARY KEY(P1_KEYPRGINVIO, P1_KEYHEADERFATT, P1_KEYBODYFATT, P1_DATAORARIC);
|
||||
CREATE INDEX PAA0101I ON PAA0100F (P1_KEYPRGINVIO ASC, P1_KEYHEADERFATT ASC, P1_KEYBODYFATT ASC, P1_DATAORARIC ASC);
|
||||
|
||||
-- PAA2800F
|
||||
ALTER TABLE PAA2800F ALTER COLUMN PR_DATAORARIT DATETIME;
|
||||
ALTER TABLE PAA2800F ADD CONSTRAINT PAA2800F_TLLNNAPRV1 DEFAULT '19700101 00:00:00' FOR PR_DATAORARIT;
|
||||
UPDATE PAA2800F SET PR_DATAORARIT = '19700101 00:00:00' WHERE PR_DATAORARIT IS NULL;
|
||||
ALTER TABLE PAA2800F ALTER COLUMN PR_DATAORARIT DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE PAA2800F ALTER COLUMN PR_DATAORACON DATETIME;
|
||||
ALTER TABLE PAA2800F ADD CONSTRAINT PAA2800F_TLLNNAPRV2 DEFAULT '19700101 00:00:00' FOR PR_DATAORACON;
|
||||
UPDATE PAA2800F SET PR_DATAORACON = '19700101 00:00:00' WHERE PR_DATAORACON IS NULL;
|
||||
ALTER TABLE PAA2800F ALTER COLUMN PR_DATAORACON DATETIME NOT NULL;
|
||||
|
||||
-- PAF2800F
|
||||
ALTER TABLE PAF2800F ALTER COLUMN PR_DATAORARIT DATETIME;
|
||||
ALTER TABLE PAF2800F ADD CONSTRAINT PAF2800F_TLLNNAPRV1 DEFAULT '19700101 00:00:00' FOR PR_DATAORARIT;
|
||||
UPDATE PAF2800F SET PR_DATAORARIT = '19700101 00:00:00' WHERE PR_DATAORARIT IS NULL;
|
||||
ALTER TABLE PAF2800F ALTER COLUMN PR_DATAORARIT DATETIME NOT NULL;
|
||||
|
||||
ALTER TABLE PAF2800F ALTER COLUMN PR_DATAORACON DATETIME;
|
||||
ALTER TABLE PAF2800F ADD CONSTRAINT PAF2800F_TLLNNAPRV2 DEFAULT '19700101 00:00:00' FOR PR_DATAORACON;
|
||||
UPDATE PAF2800F SET PR_DATAORACON = '19700101 00:00:00' WHERE PR_DATAORACON IS NULL;
|
||||
ALTER TABLE PAF2800F ALTER COLUMN PR_DATAORACON DATETIME NOT NULL;
|
||||
|
||||
-- PAFW300F
|
||||
ALTER TABLE PAFW300F ALTER COLUMN PW_UPAG DATETIME;
|
||||
ALTER TABLE PAFW300F ADD CONSTRAINT PAFW300F_TLLNNAPRV1 DEFAULT '19700101 00:00:00' FOR PW_UPAG;
|
||||
UPDATE PAFW300F SET PW_UPAG = '19700101 00:00:00' WHERE PW_UPAG IS NULL;
|
||||
ALTER TABLE PAFW300F ALTER COLUMN PW_UPAG DATETIME NOT NULL;
|
||||
|
||||
-- TLLNNAPRV -> Tolla non approva
|
Loading…
x
Reference in New Issue
Block a user