Patch level : 12.0 no-patch
Files correlati : f90.exe f90200a.msk Commento : - F9 ARCHIVIAZIONE SOSTITUTIVA: - Aggiunta classe per gestione categorie documentali - Corretto salvataggio tabella cat. doc. - Inizio aggiunte tipologie per categorie diverse da quelle non elettroniche
This commit is contained in:
parent
64919101a4
commit
e3fe3e0718
@ -1199,7 +1199,7 @@ bool TF9_app::segna_estratti(const bool escluso, const int numreg)
|
|||||||
|
|
||||||
vector<movimento_t> escl;
|
vector<movimento_t> escl;
|
||||||
if (escluso)
|
if (escluso)
|
||||||
escl.insert(escl.begin(), movimento_t{ false, numreg });
|
escl.insert(escl.begin(), movimento_t{ false, numreg }); // todo: datareg?
|
||||||
vector<movimento_t>& movs_v = escluso ? escl : _movs;
|
vector<movimento_t>& movs_v = escluso ? escl : _movs;
|
||||||
|
|
||||||
TLocalisamfile mov(LF_MOV);
|
TLocalisamfile mov(LF_MOV);
|
||||||
@ -1217,7 +1217,7 @@ bool TF9_app::segna_estratti(const bool escluso, const int numreg)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TF9_app::segna_in_errore() const
|
void TF9_app::segna_in_errore()
|
||||||
{
|
{
|
||||||
TString query;
|
TString query;
|
||||||
query << "UPDATE " F9_DRD "\n"
|
query << "UPDATE " F9_DRD "\n"
|
||||||
|
@ -112,7 +112,7 @@ public:
|
|||||||
void add_sqlerror_msg_log(const char* query);
|
void add_sqlerror_msg_log(const char* query);
|
||||||
|
|
||||||
bool segna_estratti(bool escluso = false, int numreg = 0); /**< Segna su mov che il movimento e' stato estratto */
|
bool segna_estratti(bool escluso = false, int numreg = 0); /**< Segna su mov che il movimento e' stato estratto */
|
||||||
void segna_in_errore() const;
|
static void segna_in_errore();
|
||||||
|
|
||||||
static bool is_autofattura(const TLocalisamfile& mov);
|
static bool is_autofattura(const TLocalisamfile& mov);
|
||||||
|
|
||||||
|
@ -95,9 +95,9 @@
|
|||||||
#define DRT_CODSOC "F9TCSOC" // A(10) [K] - COD.SOCIETŔ
|
#define DRT_CODSOC "F9TCSOC" // A(10) [K] - COD.SOCIETŔ
|
||||||
#define DRT_CATDOC "F9TCADO" // A(10) [K] - Categoria documento
|
#define DRT_CATDOC "F9TCADO" // A(10) [K] - Categoria documento
|
||||||
#define DRT_DESCR "F9TDDES" // A(30) - Descrizione documento
|
#define DRT_DESCR "F9TDDES" // A(30) - Descrizione documento
|
||||||
#define DRT_CLASSO "F9TCLDC" // A(10) - classe documentale sostitutiva
|
#define DRT_CLASSO "F9TCLDC" // A(10) - { FTA | FTV } - classe documentale sostitutiva
|
||||||
#define DRT_CAUSSO "F9TCSOS" // A(6) - causale per sostitutiva(TD01…)
|
#define DRT_CAUSSO "F9TCSOS" // A(6) - causale per sostitutiva(TD01…)
|
||||||
#define DRT_CAUSCON "F9TCCAU" // A(6) - causale contabile
|
#define DRT_CAUSCON "F9TCCAU" // A(6) - causale contabile
|
||||||
#define DRT_TIPOCAU "F9TTCAU" // A(6) - tipo causale contabile
|
#define DRT_TIPOCAU "F9TTCAU" // A(6) - tipo causale contabile
|
||||||
#define DRT_TIMOMOV "F9TTMOV" // A(6) - tipo movimento contabile
|
#define DRT_TIPOMOV "F9TTMOV" // A(6) - tipo movimento contabile
|
||||||
#define DRT_OPCEE "F9TFCEE" // A(6) - operatore CEE
|
#define DRT_OPCEE "F9TFCEE" // A(6) - operatore CEE
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#include "f901tab.h"
|
#include "f901tab.h"
|
||||||
#include "f90100.h"
|
#include "f90100.h"
|
||||||
|
|
||||||
|
TString escape(const char* str);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
// TF9_categorie_doc_msk
|
// TF9_categorie_doc_msk
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
@ -128,7 +130,7 @@ void TF9_categorie_doc_msk::salva_tabella() const
|
|||||||
TSheet_field& sf = sfield(S_CLASSDOC);
|
TSheet_field& sf = sfield(S_CLASSDOC);
|
||||||
FOR_EACH_SHEET_ROW(sf, nr, row)
|
FOR_EACH_SHEET_ROW(sf, nr, row)
|
||||||
{
|
{
|
||||||
if(!((TString*)row)->empty())
|
if(row->get(1) && TString(row->get(1)).full())
|
||||||
ini_set_string(CONFIG_DITTA, "F9", "CATDOC", *row, idx++);
|
ini_set_string(CONFIG_DITTA, "F9", "CATDOC", *row, idx++);
|
||||||
}
|
}
|
||||||
ini_set_string(CONFIG_DITTA, "F9", "CATDOC", "STOP", idx); // Riga terminatrice
|
ini_set_string(CONFIG_DITTA, "F9", "CATDOC", "STOP", idx); // Riga terminatrice
|
||||||
@ -180,17 +182,17 @@ void TF9_categorie_doc::main_loop()
|
|||||||
DRT_CAUSSO ", "
|
DRT_CAUSSO ", "
|
||||||
DRT_CAUSCON ", "
|
DRT_CAUSCON ", "
|
||||||
DRT_TIPOCAU ", "
|
DRT_TIPOCAU ", "
|
||||||
DRT_TIMOMOV ", "
|
DRT_TIPOMOV ", "
|
||||||
DRT_OPCEE ")\nVALUES('" <<
|
DRT_OPCEE ")\nVALUES('" <<
|
||||||
ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9) << "', '" <<
|
ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9) << "', '" <<
|
||||||
row->get(1) << "', '" <<
|
row->get(1) << "', '" << // Catdoc
|
||||||
row->get(2) << "', '" <<
|
escape(row->get(2)) << "', '" << // Descr
|
||||||
row->get(3) << "', '" <<
|
row->get(3) << "', '" << // Classe doc sost.
|
||||||
row->get(4) << "', '" <<
|
row->get(4) << "', '" << // Causale sost.
|
||||||
row->get(5) << "', '" <<
|
escape(row->get(5)) << "', '" << // Causale cont
|
||||||
row->get(6) << "', '" <<
|
escape(row->get(6)) << "', '" << // Tipo caus. cont
|
||||||
row->get(7) << "', '" <<
|
escape(row->get(7)) << "', '" << // Tipo mov.
|
||||||
row->get(8) << "');\n";
|
row->get(8) << "');\n"; // "Operat. CEE"
|
||||||
ok &= fp_db().sq_set_exec(query, false) && fp_db().sq_commit();
|
ok &= fp_db().sq_set_exec(query, false) && fp_db().sq_commit();
|
||||||
if (!ok)
|
if (!ok)
|
||||||
break;
|
break;
|
||||||
@ -208,6 +210,14 @@ void TF9_categorie_doc::main_loop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TString escape(const char* str)
|
||||||
|
{
|
||||||
|
TString string; string << str;
|
||||||
|
for (int pos = string.find('\''); pos != -1; pos = string.find('\'', pos + 2))
|
||||||
|
string.insert("'", pos);
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
int f90200(const int argc, char* argv[])
|
int f90200(const int argc, char* argv[])
|
||||||
{
|
{
|
||||||
TF9_categorie_doc app;
|
TF9_categorie_doc app;
|
||||||
|
@ -56,14 +56,14 @@ SPREADSHEET S_CLASSDOC -1 -1
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 0 "Classi Documentali"
|
PROMPT 0 0 "Classi Documentali"
|
||||||
ITEM " "
|
ITEM " "
|
||||||
ITEM "Categoria\nDocumento (Codice)@18"
|
ITEM "Categoria\nDocumento (Codice)@15"
|
||||||
ITEM "Descrizione\nDocumento"
|
ITEM "Descrizione\nDocumento@26"
|
||||||
ITEM "Classe Documentale\nSostitutiva@18"
|
ITEM "Classe Documentale\nSostitutiva@18"
|
||||||
ITEM "Causale per\nSostitutiva (TD01...)@12"
|
ITEM "Causale per\nSostitutiva (TD01...)@12"
|
||||||
ITEM "Causale\nContabile"
|
ITEM "Causale\nContabile@8"
|
||||||
ITEM "Tipo Causale\nContabile"
|
ITEM "Tipo Causale\nContabile@8"
|
||||||
ITEM "Tipo Movimento\nContabile"
|
ITEM "Tipo Movimento\nContabile@10"
|
||||||
ITEM "Operatore CEE"
|
ITEM "Classificazione\nCategoria@14"
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
@ -124,9 +124,12 @@ BEGIN
|
|||||||
PROMPT 0 0 "Tipo Movimento Contabile"
|
PROMPT 0 0 "Tipo Movimento Contabile"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_OPERCEE 6
|
LIST F_OPERCEE 2 14
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 0 "Operatore CEE"
|
PROMPT 0 0 "Operatore CEE"
|
||||||
|
ITEM "|"
|
||||||
|
ITEM "BD|Bolla Doganale"
|
||||||
|
ITEM "RC|Reverse Charge"
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
@ -577,6 +577,82 @@ TF9_dberr::TF9_dberr()
|
|||||||
_fout->open("f9_dberr.txt");
|
_fout->open("f9_dberr.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TCategorie_doc
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
vector<TCategorie_doc::classe_doc>::iterator TCategorie_doc::find(const TString& class_sost, const TString& caus_sost,
|
||||||
|
const TString& op_cee)
|
||||||
|
{
|
||||||
|
vector<classe_doc>::iterator a = _rows.end();
|
||||||
|
for(auto it = _rows.begin(); it != _rows.end(); ++it)
|
||||||
|
{
|
||||||
|
classe_doc& cd = *it;
|
||||||
|
if(cd.class_sost == class_sost && cd.caus_sost == caus_sost && cd.opcee == op_cee)
|
||||||
|
{
|
||||||
|
a = it;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCategorie_doc::load_all()
|
||||||
|
{
|
||||||
|
int idx = 0;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
const TString& appo = ini_get_string(CONFIG_DITTA, "F9", "CATDOC", "", idx++);
|
||||||
|
if (appo == "STOP" || appo.empty()) /* STOP: Riga terminatrice */
|
||||||
|
break;
|
||||||
|
TToken_string row(appo);
|
||||||
|
classe_doc cd = { row.get(1), row.get(), row.get(), row.get(), row.get(), row.get(), row.get(), row.get() };
|
||||||
|
_rows.emplace_back(cd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TCategorie_doc::classe_doc* TCategorie_doc::causcont2cat(const char* caus)
|
||||||
|
{
|
||||||
|
const TCausale c(caus);
|
||||||
|
const TString& tipodoc = c.tipo_doc();
|
||||||
|
const tipo_movimento tipomov = c.tipomov();
|
||||||
|
const int reg_speciva = c.regime_speciale();
|
||||||
|
const bool op_intra = c.intra();
|
||||||
|
TString class_sost, caus_sost, op_cee;
|
||||||
|
if(tipodoc == "FA")
|
||||||
|
{
|
||||||
|
class_sost = "FTA";
|
||||||
|
}
|
||||||
|
else if(tipodoc == "FV")
|
||||||
|
{
|
||||||
|
class_sost = "FTV";
|
||||||
|
}
|
||||||
|
else if(tipodoc == "BD")
|
||||||
|
{
|
||||||
|
class_sost = "FTA";
|
||||||
|
op_cee = "BD";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tipomov == tm_fattura)
|
||||||
|
{
|
||||||
|
caus_sost = "TD01";
|
||||||
|
}
|
||||||
|
else if(tipomov == tm_nota_credito)
|
||||||
|
{
|
||||||
|
caus_sost = "TD04";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const vector<classe_doc>::iterator it = find(class_sost, caus_sost, op_cee);
|
||||||
|
classe_doc* cd = nullptr;
|
||||||
|
if (it != _rows.end())
|
||||||
|
cd = &*it; // todo: Test it!
|
||||||
|
return cd;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef __F901001H__
|
#ifndef __F901001_H__
|
||||||
#define __F901001H__
|
#define __F901001_H__
|
||||||
|
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
#include "date.h"
|
#include "date.h"
|
||||||
@ -199,4 +199,44 @@ public:
|
|||||||
TF9_dberr();
|
TF9_dberr();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // #ifndef __F901001H__
|
class TCategorie_doc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct classe_doc
|
||||||
|
{
|
||||||
|
TString catdoc;
|
||||||
|
TString descr;
|
||||||
|
TString class_sost;
|
||||||
|
TString caus_sost;
|
||||||
|
TString causcont;
|
||||||
|
TString tipocaus;
|
||||||
|
TString tipomov;
|
||||||
|
TString opcee;
|
||||||
|
};
|
||||||
|
private:
|
||||||
|
vector<classe_doc> _rows;
|
||||||
|
|
||||||
|
vector<classe_doc>::iterator find(const TString& class_sost, const TString& caus_sost, const TString& op_cee);
|
||||||
|
void load_all();
|
||||||
|
public:
|
||||||
|
classe_doc* causcont2cat(const char* caus);
|
||||||
|
void reload()
|
||||||
|
{
|
||||||
|
_rows.clear();
|
||||||
|
load_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
TCategorie_doc() { load_all(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
inline TCategorie_doc& categorie_doc()
|
||||||
|
{
|
||||||
|
static unique_ptr<TCategorie_doc> cd = nullptr;
|
||||||
|
if(cd == nullptr)
|
||||||
|
cd = make_unique<TCategorie_doc>();
|
||||||
|
else
|
||||||
|
cd->reload();
|
||||||
|
return *cd;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // #ifndef __F901001_H__
|
||||||
|
Loading…
x
Reference in New Issue
Block a user