From d9bb4912508de27ac9f8f5de64d09b34b17789d2 Mon Sep 17 00:00:00 2001
From: guy <guy@c028cbd2-c16b-5b4b-a496-9718f37d4682>
Date: Thu, 26 Jun 2014 13:28:39 +0000
Subject: [PATCH] git-svn-id: svn://10.65.10.50/branches/R_10_00@22972
 c028cbd2-c16b-5b4b-a496-9718f37d4682

---
 pa/pa0100.cpp | 62 ++++++++++++++++++++++++++++-----------------------
 pa/pamenu.men |  7 ++++++
 2 files changed, 41 insertions(+), 28 deletions(-)
 create mode 100644 pa/pamenu.men

diff --git a/pa/pa0100.cpp b/pa/pa0100.cpp
index fdaeb7d29..bd7c53cc0 100644
--- a/pa/pa0100.cpp
+++ b/pa/pa0100.cpp
@@ -8,6 +8,8 @@
 #include "pa0.h"
 
 #include "../fe/felib.h"
+
+#include <clifo.h>
 #include <nditte.h>
 
 /////////////////////////////////////////////////////////////////////////////////////
@@ -241,14 +243,14 @@ TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',')
 
 class TDoc2Paf : public TSkeleton_application
 {
-  TAnagrafica _cessionario;
+  TAnagrafica _ditta;
 
 private:
   int parse_line(const TString& line, TString& var, TString& val) const;
   void create_table(TScanner& paf, const TString& table);
 
 protected:
-  const TString& cessionario();
+  const TString& cessionario(const TDocumento& doc);
   const TString& fattura(const TDocumento& doc);
   
   void elabora(TDocumentoEsteso& doc);
@@ -262,12 +264,9 @@ public:
   virtual void main_loop();
 };
 
-const TString& TDoc2Paf::cessionario()
+const TString& TDoc2Paf::cessionario(const TDocumento& doc)
 {
-  if (!_cessionario.ok())
-    _cessionario.init(LF_NDITTE, prefix().get_codditta());
-  const TString& piva = _cessionario.partita_IVA();
-  return piva.full() ? piva : _cessionario.codice_fiscale();
+  return doc.clifor().get(CLI_DESTIN);
 }
 
 const TString& TDoc2Paf::fattura(const TDocumento& doc)
@@ -284,14 +283,17 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc)
   TString8 prginv; prginv.format("%05d", ini_get_int("./paf.ini", "Main", "PRGINV") + 1);
   ini_set_string("./paf.ini", "Main", "PRGINV", prginv);
 
+  const TString8  hfatt = cessionario(doc);
+  const TString80 bfatt = fattura(doc);
+
   // <DatiTrassmissione>
   TPaf_record paf0100f("PAF0100F");
-  paf0100f.set("P1KHFATT", cessionario());
-  paf0100f.set("P1KBFATT", fattura(doc));
+  paf0100f.set("P1KHFATT", hfatt);
+  paf0100f.set("P1KBFATT", bfatt);
   paf0100f.remove();
 
   paf0100f.set("P1PAESE",  "IT");
-  paf0100f.set("P1CODICE", _cessionario.partita_IVA());
+  paf0100f.set("P1CODICE", _ditta.partita_IVA());
   paf0100f.set("P1PRGINV", prginv);
   paf0100f.set("P1FTRASM", "SDI10");
 
@@ -303,33 +305,33 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc)
   
   // <CedentePrestatore>
   TPaf_record paf0200f("PAF0200F");
-  paf0200f.set("P2KHFATT", paf0100f.get("P1KHFATT"));
-  paf0200f.set("P2KBFATT", paf0100f.get("P1KBFATT"));
+  paf0200f.set("P2KHFATT", hfatt);
+  paf0200f.set("P2KBFATT", bfatt);
   paf0200f.remove();
   paf0200f.set("P2PAESE",  paf0100f.get("P1PAESE"));
-  paf0200f.set("P2CODICE", _cessionario.partita_IVA());
-  paf0200f.set("P2FISCA",  _cessionario.codice_fiscale());
-  if (_cessionario.fisica())
+  paf0200f.set("P2CODICE", _ditta.partita_IVA());
+  paf0200f.set("P2FISCA",  _ditta.codice_fiscale());
+  if (_ditta.fisica())
   {
-    paf0200f.set("P2NOME", _cessionario.nome());
-    paf0200f.set("P2COGN",  _cessionario.cognome());
+    paf0200f.set("P2NOME", _ditta.nome());
+    paf0200f.set("P2COGN", _ditta.cognome());
   }
   else
   {
-    paf0200f.set("P2DENOM", _cessionario.ragione_sociale());
+    paf0200f.set("P2DENOM", _ditta.ragione_sociale());
   }
   paf0200f.set("P2RFISC", "RF01");
   
   // DatiSede
-  paf0200f.set("P2SINDI", _cessionario.indirizzo_residenza());
-  paf0200f.set("P2SCOMU", _cessionario.comune_residenza());
-  paf0200f.set("P2SPROV", _cessionario.provincia_residenza());
+  paf0200f.set("P2SINDI", _ditta.indirizzo_residenza());
+  paf0200f.set("P2SCOMU", _ditta.comune_residenza());
+  paf0200f.set("P2SPROV", _ditta.provincia_residenza());
   paf0200f.set("P2SNAZI", paf0100f.get("P1PAESE"));
   
   // DatiStabile
-  paf0200f.set("P2OINDI", _cessionario.indirizzo_residenza());
-  paf0200f.set("P2OCOMU", _cessionario.comune_residenza());
-  paf0200f.set("P2OPROV", _cessionario.provincia_residenza());
+  paf0200f.set("P2OINDI", _ditta.indirizzo_residenza());
+  paf0200f.set("P2OCOMU", _ditta.comune_residenza());
+  paf0200f.set("P2OPROV", _ditta.provincia_residenza());
   paf0200f.set("P2ONAZI", paf0100f.get("P1PAESE"));
 
   paf0200f.insert();
@@ -345,7 +347,7 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc)
   paf0400f.set("P4PAESE",  paf0100f.get("P1PAESE"));
   paf0400f.set("P4CODICE", cliente.partita_IVA());
   paf0400f.set("P4FISCA",  cliente.codice_fiscale());
-  if (_cessionario.fisica())
+  if (cliente.fisica())
   {
     paf0400f.set("P4NOME", cliente.nome());
     paf0400f.set("P4COGN", cliente.cognome());
@@ -489,9 +491,9 @@ void TDoc2Paf::main_loop()
   {
     const char* title = TR("Fatture Pubblica Amministrazione");
     TArray_sheet sht(-1, 3, 78, -3, 
-                     title, HR("@1|Anno|Cod.|Numero|Cliente|Ragione Sociale@50"));
+                     title, HR("@1|Anno|Cod.|Numero|Destinatario|Cliente|Ragione Sociale@50"));
 
-    TISAM_recordset clifo_pa("USE 20 SELECT ALLEG=7\nTO TIPOCF=C");
+    TISAM_recordset clifo_pa("USE 20 SELECT PADESTIN!=''\nTO TIPOCF=C");
     const TRecnotype n = clifo_pa.items();
     if (n > 0)
     {
@@ -512,6 +514,7 @@ void TDoc2Paf::main_loop()
           row->add(doc_pa.get(DOC_ANNO).as_int(), 1);
           row->add(doc_pa.get(DOC_CODNUM).as_string());
           row->add(doc_pa.get(DOC_NDOC).as_int());
+          row->add(clifo_pa.get(CLI_PADESTIN).as_string());
           const long codcf = doc_pa.get(DOC_CODCF).as_int();
           row->add(codcf);
           TString8 key; key.format("C|%ld", codcf);
@@ -632,7 +635,8 @@ void TDoc2Paf::create_table(TScanner& paf, const TString& table)
 bool TDoc2Paf::create()
 {
   TFilename n = prefix().get_studio();  // base direcotry
-  n.add("sql"); n.add("paf.db");
+  n.add("sql"); make_dir(n);
+  n.add("paf.db");
   _db = xvt_sql_open(n, user(), "", n.path());
   if (_db == NULL)
     return false;
@@ -654,6 +658,8 @@ bool TDoc2Paf::create()
   else
     return cantread_box(n);
 
+  _ditta.init(LF_NDITTE, prefix().get_codditta());
+
   return TSkeleton_application::create();
 }
 
diff --git a/pa/pamenu.men b/pa/pamenu.men
new file mode 100644
index 000000000..6fdf3c10e
--- /dev/null
+++ b/pa/pamenu.men
@@ -0,0 +1,7 @@
+[PAMENU_001]
+Caption = "Fattura P.A."
+Picture = <ve01>
+Module  = pa
+Flags   = "F"
+Item_01 = "Fatture P.A.", "pa0 -0", "F"
+Item_02 = "Firma Digitale", fd0 -0, "F"