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;
 | 
			
		||||
  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;
 | 
			
		||||
 | 
			
		||||
  TLocalisamfile mov(LF_MOV);
 | 
			
		||||
@ -1217,7 +1217,7 @@ bool TF9_app::segna_estratti(const bool escluso, const int numreg)
 | 
			
		||||
  return ok;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TF9_app::segna_in_errore() const
 | 
			
		||||
void TF9_app::segna_in_errore()
 | 
			
		||||
{
 | 
			
		||||
  TString query;
 | 
			
		||||
  query << "UPDATE " F9_DRD "\n"
 | 
			
		||||
 | 
			
		||||
@ -112,7 +112,7 @@ public:
 | 
			
		||||
  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 */
 | 
			
		||||
  void  segna_in_errore() const;
 | 
			
		||||
  static void  segna_in_errore();
 | 
			
		||||
 | 
			
		||||
  static bool is_autofattura(const TLocalisamfile& mov);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -95,9 +95,9 @@
 | 
			
		||||
#define DRT_CODSOC  "F9TCSOC" // A(10)  [K] - COD.SOCIETŔ
 | 
			
		||||
#define DRT_CATDOC  "F9TCADO" // A(10)  [K] - Categoria 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_CAUSCON "F9TCCAU" // A(6)       - 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 
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,8 @@
 | 
			
		||||
#include "f901tab.h"
 | 
			
		||||
#include "f90100.h"
 | 
			
		||||
 | 
			
		||||
TString escape(const char* str);
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////////////////////////
 | 
			
		||||
// TF9_categorie_doc_msk
 | 
			
		||||
///////////////////////////////////////////////////////////////
 | 
			
		||||
@ -128,7 +130,7 @@ void TF9_categorie_doc_msk::salva_tabella() const
 | 
			
		||||
  TSheet_field& sf = sfield(S_CLASSDOC);
 | 
			
		||||
  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", "STOP", idx);  // Riga terminatrice
 | 
			
		||||
@ -180,17 +182,17 @@ void TF9_categorie_doc::main_loop()
 | 
			
		||||
          DRT_CAUSSO  ", "
 | 
			
		||||
          DRT_CAUSCON ", "
 | 
			
		||||
          DRT_TIPOCAU ", "
 | 
			
		||||
          DRT_TIMOMOV ", "
 | 
			
		||||
          DRT_TIPOMOV ", "
 | 
			
		||||
          DRT_OPCEE   ")\nVALUES('" <<
 | 
			
		||||
          ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9) << "', '" <<
 | 
			
		||||
          row->get(1) << "', '" <<
 | 
			
		||||
          row->get(2)  << "', '" <<
 | 
			
		||||
          row->get(3)  << "', '" <<
 | 
			
		||||
          row->get(4)  << "', '" <<
 | 
			
		||||
          row->get(5)  << "', '" <<
 | 
			
		||||
          row->get(6)  << "', '" <<
 | 
			
		||||
          row->get(7)  << "', '" <<
 | 
			
		||||
          row->get(8)  << "');\n";
 | 
			
		||||
          row->get(1)         << "', '" <<  // Catdoc
 | 
			
		||||
          escape(row->get(2)) << "', '" <<  // Descr
 | 
			
		||||
          row->get(3)         << "', '" <<  // Classe doc sost.
 | 
			
		||||
          row->get(4)         << "', '" <<  // Causale sost.
 | 
			
		||||
          escape(row->get(5)) << "', '" <<  // Causale cont
 | 
			
		||||
          escape(row->get(6)) << "', '" <<  // Tipo caus. cont
 | 
			
		||||
          escape(row->get(7)) << "', '" <<  // Tipo mov.
 | 
			
		||||
          row->get(8)         << "');\n";   // "Operat. CEE"
 | 
			
		||||
          ok &= fp_db().sq_set_exec(query, false) && fp_db().sq_commit();
 | 
			
		||||
        if (!ok)
 | 
			
		||||
          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[])
 | 
			
		||||
{
 | 
			
		||||
  TF9_categorie_doc app;
 | 
			
		||||
 | 
			
		||||
@ -56,14 +56,14 @@ SPREADSHEET S_CLASSDOC -1 -1
 | 
			
		||||
BEGIN
 | 
			
		||||
	PROMPT 0 0 "Classi Documentali"
 | 
			
		||||
	ITEM " "
 | 
			
		||||
  ITEM "Categoria\nDocumento (Codice)@18"
 | 
			
		||||
  ITEM "Descrizione\nDocumento"
 | 
			
		||||
  ITEM "Categoria\nDocumento (Codice)@15"
 | 
			
		||||
  ITEM "Descrizione\nDocumento@26"
 | 
			
		||||
  ITEM "Classe Documentale\nSostitutiva@18"
 | 
			
		||||
  ITEM "Causale per\nSostitutiva (TD01...)@12"
 | 
			
		||||
  ITEM "Causale\nContabile"
 | 
			
		||||
  ITEM "Tipo Causale\nContabile"
 | 
			
		||||
  ITEM "Tipo Movimento\nContabile"
 | 
			
		||||
  ITEM "Operatore CEE"
 | 
			
		||||
  ITEM "Causale\nContabile@8"
 | 
			
		||||
  ITEM "Tipo Causale\nContabile@8"
 | 
			
		||||
  ITEM "Tipo Movimento\nContabile@10"
 | 
			
		||||
  ITEM "Classificazione\nCategoria@14"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
ENDPAGE
 | 
			
		||||
@ -124,9 +124,12 @@ BEGIN
 | 
			
		||||
  PROMPT 0 0 "Tipo Movimento Contabile"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
STRING F_OPERCEE 6
 | 
			
		||||
LIST F_OPERCEE 2 14
 | 
			
		||||
BEGIN
 | 
			
		||||
  PROMPT 0 0 "Operatore CEE"
 | 
			
		||||
  ITEM "|"
 | 
			
		||||
  ITEM "BD|Bolla Doganale"
 | 
			
		||||
  ITEM "RC|Reverse Charge"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
ENDPAGE
 | 
			
		||||
 | 
			
		||||
@ -577,6 +577,82 @@ TF9_dberr::TF9_dberr()
 | 
			
		||||
  _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__
 | 
			
		||||
#define __F901001H__
 | 
			
		||||
#ifndef __F901001_H__
 | 
			
		||||
#define __F901001_H__
 | 
			
		||||
 | 
			
		||||
#include "strings.h"
 | 
			
		||||
#include "date.h"
 | 
			
		||||
@ -199,4 +199,44 @@ public:
 | 
			
		||||
  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