Patch level : 12.0 1056
Files correlati : pa0.exe pa0100a.msk paf.ini Aggiornata natura a 4 caratteri Aggiornati indirizzi e riferimento SDI con indirizzo di spedizione Interno Non sono in grado di fare prove complete bisogna controllare se l'aggiornamento dei tracciati paf riesce a modificare un database esistente. Da controllare una vendita un acquistoe un acquisto reverse charge.
This commit is contained in:
parent
47dea9f314
commit
ae11f745be
@ -10,7 +10,7 @@
|
||||
#include <agasys.h>
|
||||
|
||||
#include "../ve/velib05.h"
|
||||
#include "../cg/cglib03.h"
|
||||
#include "../cg/cglib.h"
|
||||
|
||||
#include "pa0.h"
|
||||
#include "pa0100a.h"
|
||||
@ -36,9 +36,10 @@ static XVT_SQLDB _db = NULL; // PAF sqlite db
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio
|
||||
static bool chiave_paf(const TDocumento& doc, TString& cess, TString& numdoc)
|
||||
static bool chiave_paf(TDocumentoEsteso & doc, TString& cess, TString& numdoc)
|
||||
{
|
||||
cess = doc.clifor().vendite().get(CFV_PADESTIN);
|
||||
cess = doc.get_dest_sdi();
|
||||
|
||||
CHECK(cess.full(), "Destinatario fattura P.A. non valido");
|
||||
|
||||
const TCodice_numerazione& codnum = doc.codice_numerazione();
|
||||
@ -65,39 +66,6 @@ static bool chiave_paf(const TRectype& doc, TString& cess, TString& numdoc)
|
||||
return cess.full();
|
||||
}
|
||||
|
||||
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
|
||||
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str)
|
||||
{
|
||||
SLIST_ELT e = NULL;
|
||||
for (e = xvt_slist_get_first(list); e; e = xvt_slist_get_next(list, e))
|
||||
{
|
||||
const char* val = xvt_slist_get(list, e, NULL);
|
||||
if (xvt_str_compare_ignoring_case(str, val) == 0)
|
||||
break;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h)
|
||||
bool xvt_fsys_fupdate(const char* src, const char* dst)
|
||||
{
|
||||
bool ok = false;
|
||||
if (xvt_fsys_file_exists(src))
|
||||
{
|
||||
const long tsrc = xvt_fsys_file_attr(src, XVT_FILE_ATTR_MTIME);
|
||||
if (tsrc > 0)
|
||||
{
|
||||
long tdst = 0;
|
||||
if (xvt_fsys_file_exists(dst))
|
||||
tdst = xvt_fsys_file_attr(dst, XVT_FILE_ATTR_MTIME);
|
||||
if (tsrc > tdst)
|
||||
ok = xvt_fsys_fcopy(src, dst) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// TJava_profile
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -550,7 +518,8 @@ void TPA_mask::fill()
|
||||
<< "\nTO TIPOCF=C CODCF=#CLIENTE PROVV=D";
|
||||
TISAM_recordset doc_pa(query);
|
||||
doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF));
|
||||
const TRectype& doc = doc_pa.cursor()->curr();
|
||||
TDocumentoEsteso doc(doc_pa.cursor()->curr());
|
||||
|
||||
for (bool okd = doc_pa.move_first(); okd; okd = doc_pa.move_next())
|
||||
{
|
||||
const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
|
||||
@ -575,8 +544,8 @@ void TPA_mask::fill()
|
||||
row->add(doc_pa.get(DOC_DATADOC).as_date());
|
||||
row->add(clifo_pa.get(CFV_CODCF).as_int());
|
||||
row->add(clifo_pa.get("20." CLI_RAGSOC).as_string());
|
||||
row->add(clifo_pa.get(CFV_PADESTIN).as_string());
|
||||
row->add(clifo_pa.get(CFV_PARIFAMM).as_string());
|
||||
row->add(doc.get_dest_sdi());
|
||||
row->add(doc.get_rif_sdi());
|
||||
row->add(clifo_pa.get("20." CLI_COFI).as_string());
|
||||
|
||||
bool split = clifo_pa.get("20." CLI_SPLITPAY).as_bool();
|
||||
@ -688,8 +657,8 @@ protected:
|
||||
const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta
|
||||
|
||||
void log(int severity, const char* msg);
|
||||
bool show_log();
|
||||
const char * natura(const TString& codiva) const;
|
||||
bool show_log_pa();
|
||||
// const char * natura(const TString& codiva) const;
|
||||
void set_IVA(const TString& codiva, TPaf_record& paf) const;
|
||||
void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const;
|
||||
|
||||
@ -889,7 +858,7 @@ void TDoc2Paf::log(int severity, const char* msg)
|
||||
}
|
||||
}
|
||||
|
||||
bool TDoc2Paf::show_log()
|
||||
bool TDoc2Paf::show_log_pa()
|
||||
{
|
||||
bool ok = true;
|
||||
if (_log)
|
||||
@ -902,48 +871,90 @@ bool TDoc2Paf::show_log()
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
/* non serve piu?
|
||||
const char * TDoc2Paf::natura(const TString& codiva) const
|
||||
{
|
||||
const TRectype& ai = cache().get("%IVA", codiva);
|
||||
TString & natura = get_tmp_string(4);
|
||||
TCodiceIVA ai(codiva);
|
||||
// const TRectype& ai = cache().get("%IVA", codiva);
|
||||
TString & natura = get_tmp_string(16);
|
||||
|
||||
natura = ai.get("S12");
|
||||
natura = ai.natura();
|
||||
if(natura.blank())
|
||||
{
|
||||
const int tipo_iva11 = ai.get_int("S2");
|
||||
const bool revcharge = tipo_iva11 >= 31 && tipo_iva11 <= 38;
|
||||
const TString& tipo = ai.get("S1");
|
||||
const int tipo_vendite = ai.get_int("S7");
|
||||
const TString& tipo = ai.tipo();
|
||||
const int tipo_vendite = ai.allegato('C');
|
||||
|
||||
// N1 escluse ex art 15
|
||||
if (tipo_vendite == 5)
|
||||
natura = "N5"; // regime del margine
|
||||
else
|
||||
if (revcharge)
|
||||
natura = "N6"; // Inversione contabile (REVERSE CHARGE)
|
||||
if (revcharge) // Inversione contabile (REVERSE CHARGE) ****
|
||||
{
|
||||
switch (tipo_iva11)
|
||||
{
|
||||
case 31:
|
||||
natura = "N6.1";
|
||||
break;
|
||||
case 32:
|
||||
natura = "N6.2";
|
||||
break;
|
||||
case 33:
|
||||
natura = "N6.3";
|
||||
break;
|
||||
case 34:
|
||||
natura = "N6.4";
|
||||
break;
|
||||
case 35:
|
||||
natura = "N6.5";
|
||||
break;
|
||||
case 36:
|
||||
natura = "N6.6";
|
||||
break;
|
||||
case 37:
|
||||
natura = "N6.7";
|
||||
break;
|
||||
case 38:
|
||||
natura = "N6.8";
|
||||
break;
|
||||
default:
|
||||
natura = "N6.9";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (tipo == "NS")
|
||||
natura = "N2"; // Non soggetto
|
||||
natura = "N2"; // Non soggetto *****
|
||||
// ITEM "N2.1|N2.1 Non soggette ad IVA ai sensi degli artt. da 7 a 7-septies del DPR 633/72"
|
||||
// ITEM "N2.2|N2.2 Non soggette - altri casi"
|
||||
else
|
||||
if (tipo == "NI")
|
||||
natura = "N3"; // Non imponibile
|
||||
natura = "N3"; // Non imponibile *****
|
||||
// ITEM "N3.1|N3.1 Non impon. - esportazioni"
|
||||
// ITEM "N3.2|N3.2 Non impon. - cessioni intracomunitarie"
|
||||
// ITEM "N3.3|N3.3 Non impon. - cessioni verso San Marino"
|
||||
// ITEM "N3.4|N3.4 Non impon. - operazioni assimilate alle cessioni all'esportazione"
|
||||
// ITEM "N3.5|N3.5 Non impon. - a seguito di dichiarazioni d'intento"
|
||||
// ITEM "N3.6|N3.6 Non impon. - altre operazioni che non concorrono alla formazioni del plafond"
|
||||
else
|
||||
if (tipo == "ES")
|
||||
natura = "N4"; // Esente
|
||||
}
|
||||
return natura;
|
||||
}
|
||||
*/
|
||||
|
||||
void TDoc2Paf::set_IVA(const TString& codiva, TPaf_record& paf) const
|
||||
{
|
||||
const TRectype& ai = cache().get("%IVA", codiva);
|
||||
const real aliquota = ai.get("R0");
|
||||
const TCodiceIVA & ai = cached_codIVA(codiva);
|
||||
const real aliquota = ai.percentuale();
|
||||
|
||||
paf.set("PI_ALIQUOTAIVA", aliquota);
|
||||
if (codiva.full())
|
||||
{
|
||||
if (aliquota.is_zero())
|
||||
paf.set("PI_NATURA", natura(codiva));
|
||||
paf.set("PI_NATURA", ai.natura());
|
||||
else
|
||||
paf.set("PI_NATURA", "");
|
||||
}
|
||||
@ -952,16 +963,8 @@ void TDoc2Paf::set_IVA(const TString& codiva, TPaf_record& paf) const
|
||||
void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const
|
||||
{
|
||||
const TString8 codiva(rdoc.get(RDOC_CODIVA));
|
||||
const TRectype& ai = cache().get("%IVA", codiva);
|
||||
const real aliquota = ai.get("R0");
|
||||
paf.set("PI_ALIQUOTAIVA", aliquota);
|
||||
if (codiva.full())
|
||||
{
|
||||
if (aliquota.is_zero())
|
||||
paf.set("PI_NATURA", natura(codiva));
|
||||
else
|
||||
paf.set("PI_NATURA", "");
|
||||
}
|
||||
|
||||
set_IVA(codiva, paf);
|
||||
}
|
||||
|
||||
|
||||
@ -1039,7 +1042,7 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
|
||||
TString rifamm = cco(doc).get("S4");
|
||||
if (rifamm.blank())
|
||||
rifamm = doc.clifor().vendite().get(CFV_PARIFAMM);
|
||||
rifamm = doc.get_rif_sdi();
|
||||
paf0200f.set("P2_RIFAMMINISTR", rifamm);
|
||||
|
||||
TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA");
|
||||
@ -1456,7 +1459,9 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
paf2200f.set("PL_KEYNPROGR", ++num_riep);
|
||||
paf2200f.set("PL_ALIQUOTAIVA", aliquota);
|
||||
if (aliquota.is_zero())
|
||||
paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice()));
|
||||
paf2200f.set("PL_NATURA", cached_codIVA(riva.cod_iva().codice()).natura());
|
||||
else
|
||||
paf2200f.set("PL_NATURA", "");
|
||||
|
||||
paf2200f.set("PL_IMPONIBILE", riva.imponibile());
|
||||
paf2200f.set("PL_IMPOSTA", riva.imposta());
|
||||
@ -1693,7 +1698,7 @@ void TDoc2Paf::main_loop()
|
||||
}
|
||||
if (ndocs > 0)
|
||||
{
|
||||
if (show_log())
|
||||
if (show_log_pa())
|
||||
genera_xml();
|
||||
return;
|
||||
}
|
||||
@ -1726,7 +1731,7 @@ void TDoc2Paf::main_loop()
|
||||
message_box(FR("Sono stati elaborati %d documenti"), ndocs);
|
||||
}
|
||||
|
||||
if (ndocs > 0 && show_log())
|
||||
if (ndocs > 0 && show_log_pa())
|
||||
genera_xml();
|
||||
}
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING S_UFFICIO 6
|
||||
STRING S_UFFICIO 7
|
||||
BEGIN
|
||||
PROMPT 1 4 ""
|
||||
FLAGS "D"
|
||||
|
@ -161,7 +161,7 @@ P8_IMCONTRCASSA = NUMERIC(15, 2)
|
||||
P8_IMPONCASSA = NUMERIC(15, 2)
|
||||
P8_ALIQIVA = NUMERIC(6, 2)
|
||||
P8_RITENUTA = CHAR(2)
|
||||
P8_NATURA = CHAR(2)
|
||||
P8_NATURA = CHAR(4)
|
||||
P8_RIFAMMINIS = CHAR(20)
|
||||
|
||||
P8_GESTIONE = CHAR(1)
|
||||
@ -313,7 +313,7 @@ PI_PREZZOUNIT = NUMERIC
|
||||
PI_PRZTOTALE = NUMERIC
|
||||
PI_ALIQUOTAIVA = NUMERIC
|
||||
PI_RITENUTA = CHAR(2)
|
||||
PI_NATURA = CHAR(2)
|
||||
PI_NATURA = CHAR(4)
|
||||
PI_RIFAMMINISTR = CHAR(20)
|
||||
|
||||
PI_GESTIONE = CHAR(1)
|
||||
@ -367,7 +367,7 @@ PL_KEYBODYFATT = CHAR(20)
|
||||
PL_KEYNPROGR = INTEGER
|
||||
|
||||
PL_ALIQUOTAIVA = NUMERIC(6,2)
|
||||
PL_NATURA = CHAR(2)
|
||||
PL_NATURA = CHAR(4)
|
||||
PL_SPESEACCESS = NUMERIC(15,2)
|
||||
PL_ARROTONDAM = NUMERIC(15,2)
|
||||
PL_IMPONIBILE = NUMERIC(15,2)
|
||||
|
Loading…
x
Reference in New Issue
Block a user