Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : Corretta gestione clinti corrispondenti a persone fisiche git-svn-id: svn://10.65.10.50/branches/R_10_00@22489 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
af6ee45ab8
commit
ce559da866
@ -6,8 +6,9 @@ int main(int argc, char** argv)
|
|||||||
const int n = argc > 1 ? argv[1][1]-'0' : 0;
|
const int n = argc > 1 ? argv[1][1]-'0' : 0;
|
||||||
switch (n)
|
switch (n)
|
||||||
{
|
{
|
||||||
case 1: fe0200(argc, argv); break;
|
case 1: fe0200(argc, argv); break; // Immissione / Generazione Spesometro
|
||||||
default: fe0100(argc, argv); break;
|
case 2: fe0300(argc, argv); break; // Somma file Spesometro (Dorotee)
|
||||||
|
default: fe0100(argc, argv); break; // Gestione tabelle (contratti)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
1
fe/fe0.h
1
fe/fe0.h
@ -1,2 +1,3 @@
|
|||||||
int fe0100(int argc, char* argv[]);
|
int fe0100(int argc, char* argv[]);
|
||||||
int fe0200(int argc, char* argv[]);
|
int fe0200(int argc, char* argv[]);
|
||||||
|
int fe0300(int argc, char* argv[]);
|
926
fe/fe0100.cpp
926
fe/fe0100.cpp
@ -5,25 +5,20 @@
|
|||||||
#include <modaut.h>
|
#include <modaut.h>
|
||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
#include <recarray.h>
|
#include <recarray.h>
|
||||||
#include <textset.h>
|
|
||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <reputils.h>
|
#include <reputils.h>
|
||||||
#include <validate.h>
|
|
||||||
|
|
||||||
#include <alleg.h>
|
#include <alleg.h>
|
||||||
#include <anafis.h>
|
|
||||||
#include <anagr.h>
|
|
||||||
#include <attiv.h>
|
#include <attiv.h>
|
||||||
#include <clifo.h>
|
#include <clifo.h>
|
||||||
#include <comuni.h>
|
|
||||||
#include <mov.h>
|
#include <mov.h>
|
||||||
#include <nditte.h>
|
|
||||||
#include <occas.h>
|
#include <occas.h>
|
||||||
#include <partite.h>
|
#include <partite.h>
|
||||||
#include <pconti.h>
|
#include <pconti.h>
|
||||||
#include <rmoviva.h>
|
#include <rmoviva.h>
|
||||||
|
|
||||||
#include "fe0100a.h"
|
#include "fe0100a.h"
|
||||||
|
#include "felib.h"
|
||||||
#include "../cg/cglib01.h"
|
#include "../cg/cglib01.h"
|
||||||
|
|
||||||
const char* const INVALID_NUMDOC = "???????";
|
const char* const INVALID_NUMDOC = "???????";
|
||||||
@ -34,28 +29,6 @@ const long MANUAL_ROW = 900000L;
|
|||||||
// Utility
|
// Utility
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static const TString& comune_di(const TString& codcom)
|
|
||||||
{
|
|
||||||
if (codcom.blank() || codcom.len() != 4)
|
|
||||||
return EMPTY_STRING;
|
|
||||||
|
|
||||||
TString8 key; key << " |" << codcom;
|
|
||||||
TString& den = get_tmp_string();
|
|
||||||
den = cache().get(LF_COMUNI, key, COM_DENCOM);
|
|
||||||
den.cut(40);
|
|
||||||
den.upper();
|
|
||||||
|
|
||||||
return den;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const TString& provincia_di(const TString& codcom)
|
|
||||||
{
|
|
||||||
if (codcom.blank() || codcom.len() != 4)
|
|
||||||
return EMPTY_STRING;
|
|
||||||
TString8 key; key << '|' << codcom;
|
|
||||||
return cache().get(LF_COMUNI, key, COM_PROVCOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
static real importo_limite(int anno)
|
static real importo_limite(int anno)
|
||||||
{ return anno > 2010 ? 3000: 25000; }
|
{ return anno > 2010 ? 3000: 25000; }
|
||||||
|
|
||||||
@ -281,571 +254,6 @@ bool TContratto::init(const TRectype& rec)
|
|||||||
return ok();
|
return ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TAnagrafica
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TAnagrafica : public TObject
|
|
||||||
{
|
|
||||||
char _tipo; // F o G
|
|
||||||
TString16 _cofi, _paiv;
|
|
||||||
TString80 _ragsoc;
|
|
||||||
TString4 _com_nasc, _com_res;
|
|
||||||
TString80 _loc_res, _ind_res;
|
|
||||||
TDate _data_nasc;
|
|
||||||
int _allegato, _stato_estero;
|
|
||||||
|
|
||||||
TAnagrafica& operator =(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
|
|
||||||
TAnagrafica(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
|
|
||||||
protected:
|
|
||||||
void build_ind_res(const TRectype& rec, const char* ind, const char* civ);
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual bool ok() const { return _tipo=='F' || _tipo == 'G'; }
|
|
||||||
bool fisica() const { return _tipo == 'F'; }
|
|
||||||
bool giuridica() const { return _tipo == 'G'; }
|
|
||||||
|
|
||||||
const TString& codice_fiscale() const { return _cofi; }
|
|
||||||
const TString& partita_IVA() const { return _paiv; }
|
|
||||||
|
|
||||||
const TString& ragione_sociale() const { return _ragsoc; }
|
|
||||||
const TString& cognome() const { return _ragsoc.left(24); }
|
|
||||||
const TString& nome() const { CHECK(fisica(), "Non chiedere nome giuridico!"); return _ragsoc.mid(30,20); }
|
|
||||||
char sesso() const { CHECK(fisica(), "Solo sesso fisico!"); return (_cofi[9] >= '4') ? 'F' : 'M'; }
|
|
||||||
const TDate& data_nascita() const { return _data_nasc; }
|
|
||||||
int stato_estero() const { return _stato_estero; }
|
|
||||||
int inserimento_in_allegato() const { return _allegato; }
|
|
||||||
|
|
||||||
const TString& comune_nascita() const { return comune_di(_com_nasc); }
|
|
||||||
const TString& provincia_nascita() const { return provincia_di(_com_nasc); }
|
|
||||||
const TString& comune_residenza() const { return comune_di(_com_res); }
|
|
||||||
const TString& provincia_residenza() const { return provincia_di(_com_res); }
|
|
||||||
const TString& localita_residenza() const { return _loc_res; }
|
|
||||||
const TString& indirizzo_residenza() const { return _ind_res; }
|
|
||||||
|
|
||||||
bool init(const TRectype& rec);
|
|
||||||
bool init(int num, const TString& codice) { return init(cache().get(num, codice)); }
|
|
||||||
bool init(int num, long codice) { return init(cache().get(num, codice)); }
|
|
||||||
bool init(int num, char tipo, long codice);
|
|
||||||
bool init(char tipo, long codice, const TString& ocfpi);
|
|
||||||
|
|
||||||
TAnagrafica() : _tipo('\0') {}
|
|
||||||
TAnagrafica(int lognum, const TString& codice) { init(lognum, codice); }
|
|
||||||
TAnagrafica(int lognum, long codice) { init(lognum, codice); }
|
|
||||||
TAnagrafica(int lognum, char tipo, long codice) { init(lognum, tipo, codice); }
|
|
||||||
TAnagrafica(char tipo, long codice, const TString& ocfpi) { init(tipo, codice, ocfpi); }
|
|
||||||
TAnagrafica(const TRectype& rec) { init(rec); }
|
|
||||||
};
|
|
||||||
|
|
||||||
void TAnagrafica::build_ind_res(const TRectype& rec, const char* ind, const char* civ)
|
|
||||||
{
|
|
||||||
TString80 indirizzo = rec.get(ind);
|
|
||||||
if (indirizzo.full())
|
|
||||||
{
|
|
||||||
const TString& numero = rec.get(civ);
|
|
||||||
if (numero.full())
|
|
||||||
indirizzo << ", " << numero;
|
|
||||||
indirizzo.strip_double_spaces();
|
|
||||||
TParagraph_string s(indirizzo, 40);
|
|
||||||
_ind_res = s.get(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAnagrafica::init(const TRectype& rec)
|
|
||||||
{
|
|
||||||
_tipo = '\0';
|
|
||||||
_stato_estero = 0;
|
|
||||||
_allegato = 0;
|
|
||||||
if (rec.empty())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
switch (rec.num())
|
|
||||||
{
|
|
||||||
case LF_OCCAS:
|
|
||||||
_tipo = 'F';
|
|
||||||
_cofi = rec.get(OCC_COFI);
|
|
||||||
_paiv = rec.get(OCC_PAIV);
|
|
||||||
if (_cofi.blank() || _paiv.blank())
|
|
||||||
{
|
|
||||||
const TString& codice = rec.get(OCC_CFPI);
|
|
||||||
if (_cofi.blank() && cf_check("", codice))
|
|
||||||
_cofi = codice;
|
|
||||||
if (_paiv.blank() && pi_check("", codice))
|
|
||||||
_paiv = codice;
|
|
||||||
}
|
|
||||||
_ragsoc = rec.get(OCC_RAGSOC); _ragsoc.upper();
|
|
||||||
_data_nasc = rec.get(OCC_DNASC);
|
|
||||||
_com_nasc = rec.get(OCC_COMNASC);
|
|
||||||
_com_res = rec.get(OCC_COM);
|
|
||||||
_loc_res = rec.get(OCC_LOCALITA);
|
|
||||||
build_ind_res(rec, OCC_INDIR, OCC_CIV);
|
|
||||||
_stato_estero = rec.get_int(OCC_STATO);
|
|
||||||
_allegato = _paiv.blank() ? 6 : 2;
|
|
||||||
break;
|
|
||||||
case LF_ANAG:
|
|
||||||
_tipo = rec.get_char(ANA_TIPOA);
|
|
||||||
_ragsoc = rec.get(ANA_RAGSOC); _ragsoc.upper();
|
|
||||||
_cofi = rec.get(ANA_COFI);
|
|
||||||
_paiv = rec.get(ANA_PAIV);
|
|
||||||
|
|
||||||
// Comune di residenza fiscale o domicilio
|
|
||||||
_com_res = rec.get(ANA_COMRF);
|
|
||||||
if (_com_res.empty())
|
|
||||||
_com_res = rec.get(ANA_COMRES);
|
|
||||||
build_ind_res(rec, ANA_INDRES, ANA_CIVRES);
|
|
||||||
|
|
||||||
// Dati di nascita persone fisiche
|
|
||||||
if (_tipo == 'F')
|
|
||||||
{
|
|
||||||
const TRectype& anafis = cache().get(LF_ANAGFIS, rec.get_long(ANA_CODANAGR));
|
|
||||||
_data_nasc = anafis.get(ANF_DATANASC);
|
|
||||||
_com_nasc = anafis.get(ANF_COMNASC);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_tipo = 'G';
|
|
||||||
break;
|
|
||||||
case LF_NDITTE:
|
|
||||||
{
|
|
||||||
const bool good = init(LF_ANAG, rec.get_char(NDT_TIPOA), rec.get_long(NDT_CODANAGR));
|
|
||||||
_ragsoc = rec.get(NDT_RAGSOC); _ragsoc.upper();
|
|
||||||
return good;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LF_CLIFO:
|
|
||||||
_tipo = rec.get_char(CLI_TIPOAPER);
|
|
||||||
if (_tipo == 'F')
|
|
||||||
{
|
|
||||||
init(LF_ANAG, _tipo, rec.get_long(CLI_CODANAGPER));
|
|
||||||
if (rec.get(CLI_COMNASC).not_empty())
|
|
||||||
_com_nasc = rec.get(CLI_COMNASC);
|
|
||||||
if (rec.get(CLI_DATANASC).not_empty())
|
|
||||||
_data_nasc = rec.get(CLI_DATANASC);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_tipo = 'G';
|
|
||||||
// Assegno codice fiscale e partita IVA se validi, altrimenti mantengo quelli dell'anagrafica
|
|
||||||
if (rec.get(CLI_COFI).not_empty())
|
|
||||||
_cofi = rec.get(CLI_COFI);
|
|
||||||
if (rec.get(CLI_PAIV).not_empty())
|
|
||||||
_paiv = rec.get(CLI_PAIV);
|
|
||||||
build_ind_res(rec, CLI_INDCF, CLI_CIVCF);
|
|
||||||
|
|
||||||
// Prevale sempre la ragione sociale del cliente: "Il cliente ha sempre ragione".
|
|
||||||
_ragsoc = rec.get(CLI_RAGSOC); _ragsoc.upper();
|
|
||||||
_stato_estero = rec.get_int(CLI_STATOCF);
|
|
||||||
_allegato = rec.get_int(CLI_ALLEG);
|
|
||||||
_loc_res = rec.get(CLI_LOCCF);
|
|
||||||
break;
|
|
||||||
case LF_MOV:
|
|
||||||
return init(rec.get_char(MOV_TIPO), rec.get_long(MOV_CODCF), rec.get(MOV_OCFPI));
|
|
||||||
case LF_ALLEG:
|
|
||||||
return init(rec.get_char(ALL_TIPOCF), rec.get_long(ALL_CODCF), rec.get(ALL_OCFPI));
|
|
||||||
default:
|
|
||||||
CHECKD(false, "Record non valido per TAnagrafica ", rec.num());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_tipo == 'G')
|
|
||||||
_ragsoc.strip_double_spaces();
|
|
||||||
|
|
||||||
return _tipo == 'F' || _tipo == 'G';
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAnagrafica::init(int num, char tipo, long codice)
|
|
||||||
{
|
|
||||||
TString16 key; key << tipo << '|' << codice;
|
|
||||||
return init(cache().get(num, key));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAnagrafica::init(char tipo, long codice, const TString& ocfpi)
|
|
||||||
{
|
|
||||||
bool done = false;
|
|
||||||
if (ocfpi.full())
|
|
||||||
done = init(LF_OCCAS, ocfpi);
|
|
||||||
if (!done)
|
|
||||||
done = init(LF_CLIFO, tipo, codice);
|
|
||||||
return done;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TDati_rilevanti_trc
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#define AN _alfafld
|
|
||||||
#define CF _alfafld
|
|
||||||
#define DT _datefld
|
|
||||||
#define NU _longzerofld
|
|
||||||
#define PI _alfafld
|
|
||||||
#define OBBLIG true
|
|
||||||
|
|
||||||
class TDati_rilevanti_trc : public TObject
|
|
||||||
{
|
|
||||||
int _tipo;
|
|
||||||
TAS400_recordset* _recset;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool add_field(int n, int da, int a, int len, const char* descr, TFieldtypes tipo = AN,
|
|
||||||
const char* def = NULL, bool required = false);
|
|
||||||
public:
|
|
||||||
void create_fields(int tipo, TAS400_recordset& recset);
|
|
||||||
};
|
|
||||||
|
|
||||||
bool TDati_rilevanti_trc::add_field(int n, int da, int a, int len, const char* descr, TFieldtypes tipo,
|
|
||||||
const char* def, bool required)
|
|
||||||
{
|
|
||||||
CHECKD(descr && *descr, "Campo ignoto ", n);
|
|
||||||
CHECKS(n > 0 && da > 0 && a >= da && a <= 1800 && len == (a-da+1), "Campo inconsistente ", descr);
|
|
||||||
TString8 name;
|
|
||||||
name.format("%d.%d", _tipo, n);
|
|
||||||
bool ok = _recset->create_field(name, da-1, len, tipo, required, def);
|
|
||||||
CHECKS(ok, "Can't create field ", descr);
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TDati_rilevanti_trc::create_fields(int tipo, TAS400_recordset& recset)
|
|
||||||
{
|
|
||||||
CHECKD(tipo >= 0 && tipo <= 5 || tipo == 9, "Tipo record non valido ", tipo);
|
|
||||||
_tipo = tipo;
|
|
||||||
_recset = &recset;
|
|
||||||
|
|
||||||
TString4 def; def << _tipo;
|
|
||||||
add_field(1, 1, 1, 1, "Tipo record", NU, def, OBBLIG);
|
|
||||||
|
|
||||||
if (_tipo == 0 || _tipo == 9)
|
|
||||||
{
|
|
||||||
add_field( 2, 2, 6, 5, "Codice identificativo fornitura", AN, "ART21", OBBLIG);
|
|
||||||
add_field( 3, 7, 8, 2, "Codice numerico fornitura", NU, "47", OBBLIG);
|
|
||||||
add_field( 4, 9, 9, 1, "Tipologia di invio", NU, "0", OBBLIG);
|
|
||||||
add_field( 5, 10, 26,17, "Protocollo da sostituire", AN); // ex NU
|
|
||||||
add_field( 6, 27, 32, 6, "Protocollo documento", AN); // ex NU
|
|
||||||
|
|
||||||
add_field( 7, 33, 48,16, "Codice fiscale", CF, "", OBBLIG);
|
|
||||||
add_field( 8, 49, 59,11, "Partita IVA", PI);
|
|
||||||
|
|
||||||
add_field( 9, 60,119,60, "Denominazione", AN);
|
|
||||||
add_field(10,120,159,40, "Comune domicilio fiscale", AN);
|
|
||||||
add_field(11,160,161, 2, "Provincia domicilio fiscale", AN);
|
|
||||||
|
|
||||||
add_field(12,162,185,24, "Cognome", AN);
|
|
||||||
add_field(13,186,205,20, "Nome", AN);
|
|
||||||
add_field(14,206,206, 1, "Sesso", AN);
|
|
||||||
add_field(15,207,214, 8, "Data di nascita", DT);
|
|
||||||
add_field(16,215,254,40, "Comune o stato di nascita", AN);
|
|
||||||
add_field(17,255,256, 2, "Provincia di nascita", AN);
|
|
||||||
|
|
||||||
add_field(18,257,260, 4, "Anno di riferimento", NU);
|
|
||||||
add_field(19,261,261, 1, "Comunicazione società incorp.", AN, "0", OBBLIG);
|
|
||||||
add_field(20,262,265, 4, "Progressivo invio telmatico", NU, "1");
|
|
||||||
add_field(21,266,269, 4, "Numero totale invii telematici", NU, "1");
|
|
||||||
|
|
||||||
add_field(22,270,285,16, "Codice fiscale intermediario", CF);
|
|
||||||
add_field(23,286,290, 5, "Numero iscrizione C.A.F.", AN); // Ex NU
|
|
||||||
add_field(24,291,291, 1, "Impegno alla trasmissione", AN ); // Ex NU
|
|
||||||
add_field(25,292,299, 8, "Data dell'impegno", DT);
|
|
||||||
|
|
||||||
add_field(26,300,1797,1498, "Filler", AN);
|
|
||||||
add_field(27,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
|
||||||
add_field(28,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
|
||||||
} else
|
|
||||||
if (_tipo == 1)
|
|
||||||
{
|
|
||||||
add_field(2, 2,17,16, "Codice fiscale", CF, "", OBBLIG);
|
|
||||||
add_field(3,18,25, 8, "Data dell'operazione", DT);
|
|
||||||
add_field(4,26,26, 1, "Modalità di pagamento", NU, "3", OBBLIG);
|
|
||||||
add_field(5,27,35, 9, "Importo dovuto", NU);
|
|
||||||
add_field(6,36,1797,1762, "Filler", AN);
|
|
||||||
add_field(7,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
|
||||||
add_field(8,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
|
||||||
} else
|
|
||||||
if (_tipo == 2)
|
|
||||||
{
|
|
||||||
add_field( 2, 2,12,11, "Partita IVA", PI, "", OBBLIG);
|
|
||||||
add_field( 3,13,20, 8, "Data dell'operazione", DT);
|
|
||||||
add_field( 4,21,35,15, "Numero della fattura", AN);
|
|
||||||
add_field( 5,36,36, 1, "Modalità di pagamento", NU, "1", OBBLIG);
|
|
||||||
add_field( 6,37,45, 9, "Importo dovuto", NU);
|
|
||||||
add_field( 7,46,54, 9, "Imposta", NU);
|
|
||||||
add_field( 8,55,55, 1, "Tipologia dell'operazione", NU, "1", OBBLIG);
|
|
||||||
|
|
||||||
add_field( 9,56,1797,1742, "Filler", AN);
|
|
||||||
add_field(10,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
|
||||||
add_field(11,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
|
||||||
} else
|
|
||||||
if (_tipo == 3)
|
|
||||||
{
|
|
||||||
add_field( 2, 2, 25,24, "Cognome", AN);
|
|
||||||
add_field( 3, 26, 45,20, "Nome", AN);
|
|
||||||
add_field( 4, 46, 53, 8, "Data di nascita", DT);
|
|
||||||
add_field( 5, 54, 93,40, "Comune o stato estero di nascita", AN);
|
|
||||||
add_field( 6, 94, 95, 2, "Provincia di nascita", AN);
|
|
||||||
add_field( 7, 96, 98, 3, "Stato estero del domicilio", AN);
|
|
||||||
|
|
||||||
add_field( 8, 99,158,60, "Ragione sociale", AN);
|
|
||||||
add_field( 9,159,198,40, "Città estera della sede legale", AN);
|
|
||||||
add_field(10,199,201, 3, "Stato estero della sede legale", AN);
|
|
||||||
add_field(11,202,241,40, "Indirizzo estero della sede legale", AN);
|
|
||||||
|
|
||||||
add_field(12,242,249, 8, "Data dell'operazione", DT);
|
|
||||||
add_field(13,250,264,15, "Numero della fattura", AN);
|
|
||||||
add_field(14,265,265, 1, "Modalità di pagamento", NU, "1", OBBLIG);
|
|
||||||
add_field(15,266,274, 9, "Importo dovuto", NU);
|
|
||||||
add_field(16,275,283, 9, "Imposta", NU);
|
|
||||||
add_field(17,284,284, 1, "Tipologia dell'operazione", NU, "1", OBBLIG);
|
|
||||||
|
|
||||||
add_field(18,285,1797,1513, "Filler", AN);
|
|
||||||
add_field(19,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
|
||||||
add_field(20,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
|
||||||
} else
|
|
||||||
if (_tipo == 4)
|
|
||||||
{
|
|
||||||
add_field( 2, 2,12,11, "Partita IVA", PI);
|
|
||||||
add_field( 3,13,28,16, "Codice Fiscale", CF);
|
|
||||||
add_field( 4,29,36, 8, "Data dell'operazione", DT, "", OBBLIG);
|
|
||||||
add_field( 5,37,51,15, "Numero della Nota di Variazione", AN, "", OBBLIG);
|
|
||||||
add_field( 6,52,60, 9, "Imponibile Nota di Variazione", NU);
|
|
||||||
add_field( 7,61,69, 9, "Imposta Nota di Variazione", NU);
|
|
||||||
add_field( 8,70,77, 8, "Data della Fattura da rettificare", DT, "", OBBLIG);
|
|
||||||
add_field( 9,78,92,15, "Numero della Fattura da rettificare", AN, "", OBBLIG);
|
|
||||||
add_field(10,93,93, 1, "Variazione imponib. (Debito/Credito)",AN);
|
|
||||||
add_field(11,94,94, 1, "Variazione imposta (Debito/Credito)", AN);
|
|
||||||
|
|
||||||
add_field(11,95,1797,1703, "Filler", AN);
|
|
||||||
add_field(12,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
|
||||||
add_field(13,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
|
||||||
} else
|
|
||||||
if (_tipo == 5)
|
|
||||||
{
|
|
||||||
add_field( 2, 2, 25,24, "Cognome", AN);
|
|
||||||
add_field( 3, 26, 45,20, "Nome", AN);
|
|
||||||
add_field( 4, 46, 53, 8, "Data di nascita", DT);
|
|
||||||
add_field( 5, 54, 93,40, "Comune o stato estero di nascita", AN);
|
|
||||||
add_field( 6, 94, 95, 2, "Provincia di nascita", AN);
|
|
||||||
add_field( 7, 96, 98, 3, "Stato estero del domicilio", AN);
|
|
||||||
add_field( 8, 99,158,60, "Ragione sociale", AN);
|
|
||||||
add_field( 9,159,198,40, "Città estera della sede legale", AN);
|
|
||||||
add_field(10,199,201, 3, "Stato estero della sede legale", AN);
|
|
||||||
add_field(11,202,241,40, "Indirizzo estero della sede legale", AN);
|
|
||||||
add_field(12,242,249, 8, "Data dell'operazione", DT, "", OBBLIG);
|
|
||||||
add_field(13,250,264,15, "Numero della Nota di Variazione", AN, "", OBBLIG);
|
|
||||||
add_field(14,265,273, 9, "Imponibile Nota di Variazione", NU);
|
|
||||||
add_field(15,274,282, 9, "Imposta Nota di Variazione", NU);
|
|
||||||
add_field(16,283,290, 8, "Data della Fattura da rettificare", DT, "", OBBLIG);
|
|
||||||
add_field(17,291,305,15, "Numero della Fattura da rettificare", AN, "", OBBLIG);
|
|
||||||
add_field(18,306,306, 1, "Variazione imponib. (Debito/Credito)",AN);
|
|
||||||
add_field(19,307,307, 1, "Variazione imposta (Debito/Credito)", AN);
|
|
||||||
|
|
||||||
add_field(20,308,1797,1490, "Filler", AN);
|
|
||||||
add_field(21,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
|
||||||
add_field(22,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
_recset = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TDati_rilevanti_set
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TDati_rilevanti_set : public TAS400_recordset
|
|
||||||
{
|
|
||||||
int _anno;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual bool set_field(const TAS400_column_info& fi, const TVariant& var);
|
|
||||||
virtual const TVariant& get_field(const TAS400_column_info& fi) const;
|
|
||||||
|
|
||||||
void init();
|
|
||||||
bool set_val(int n, const TVariant& v) { return TAS400_recordset::set(n-1, v); }
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool set(unsigned int n, const TVariant& v) { return set_val(n, v); }
|
|
||||||
bool set(unsigned int n, const TString& v) { return set_val(n, v); }
|
|
||||||
bool set(unsigned int n, char v) { TString4 str; str << v; return set_val(n, str); }
|
|
||||||
bool set(unsigned int n, int v) { return set_val(n, long(v)); }
|
|
||||||
bool set(unsigned int n, const real& v) { return set_val(n, v); }
|
|
||||||
bool set(unsigned int n, const TDate& v) { return set_val(n, v); }
|
|
||||||
void add_header(const TMask& msk, int num_inv = 1, int tot_inv = 1);
|
|
||||||
void add_footer();
|
|
||||||
bool split(const TFilename& name, const TRecnotype maxalleg = 15000);
|
|
||||||
int anno() const { return _anno; }
|
|
||||||
|
|
||||||
TDati_rilevanti_set(int anno);
|
|
||||||
TDati_rilevanti_set(const TFilename& file);
|
|
||||||
};
|
|
||||||
|
|
||||||
bool TDati_rilevanti_set::set_field(const TAS400_column_info& fi, const TVariant& var)
|
|
||||||
{
|
|
||||||
// Salva le date in formato GGMMAAAA invece dello standard ANSI AAAAMMGG
|
|
||||||
if (fi._type == DT && fi._width == 8)
|
|
||||||
{
|
|
||||||
const TDate d = var.as_date();
|
|
||||||
if (d.ok())
|
|
||||||
{
|
|
||||||
TFixed_string str = d.string(full, '\0', full, full, gma_date);
|
|
||||||
row().overwrite(str, fi._pos);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
row().overwrite(" ", fi._pos);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
// Salva gli importi in formato 000001234 (non possono essere negativi)
|
|
||||||
if (fi._type == NU && fi._width == 9)
|
|
||||||
{
|
|
||||||
TString16 str = var.as_string();
|
|
||||||
CHECKS(str[0] != '-', "Importo negativo non ammesso:", (const char*)str);
|
|
||||||
// Tiene la sola parte intera e riempie di zeri
|
|
||||||
const int dot = str.find('.');
|
|
||||||
if (dot >= 0) str.cut(dot);
|
|
||||||
str.right_just(fi._width, '0');
|
|
||||||
row().overwrite(str, fi._pos);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TAS400_recordset::set_field(fi, var);
|
|
||||||
}
|
|
||||||
|
|
||||||
const TVariant& TDati_rilevanti_set::get_field(const TAS400_column_info& ci) const
|
|
||||||
{
|
|
||||||
if (ci._type == DT && ci._width == 8)
|
|
||||||
{
|
|
||||||
const TRecnotype n = current_row();
|
|
||||||
if (n >= 0 && n < items())
|
|
||||||
{
|
|
||||||
const TString& str = row(n).mid(ci._pos, ci._width);
|
|
||||||
const int gg = atoi(str.left(2));
|
|
||||||
const int mm = atoi(str.mid(2,2));
|
|
||||||
const int aa = atoi(str.mid(4,4));
|
|
||||||
if (aa > 1800 && aa < 2100)
|
|
||||||
{
|
|
||||||
TVariant& var = get_tmp_var();
|
|
||||||
var.set(TDate(gg, mm, aa));
|
|
||||||
return var;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL_VARIANT;
|
|
||||||
}
|
|
||||||
return TAS400_recordset::get_field(ci);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TDati_rilevanti_set::add_header(const TMask& msk, int num_inv, int tot_inv)
|
|
||||||
{
|
|
||||||
const TAnagrafica ditta(LF_NDITTE, prefix().get_codditta());
|
|
||||||
|
|
||||||
new_rec("0");
|
|
||||||
set(7, ditta.codice_fiscale());
|
|
||||||
set(8, ditta.partita_IVA());
|
|
||||||
|
|
||||||
if (ditta.giuridica())
|
|
||||||
{
|
|
||||||
set( 9, ditta.ragione_sociale());
|
|
||||||
set(10, ditta.comune_residenza());
|
|
||||||
set(11, ditta.provincia_residenza());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
set(12, ditta.cognome());
|
|
||||||
set(13, ditta.nome());
|
|
||||||
set(14, ditta.sesso());
|
|
||||||
set(15, ditta.data_nascita());
|
|
||||||
set(16, ditta.comune_nascita());
|
|
||||||
set(17, ditta.provincia_nascita());
|
|
||||||
}
|
|
||||||
set(18, _anno);
|
|
||||||
|
|
||||||
if (tot_inv < 1) tot_inv = 1;
|
|
||||||
if (num_inv <= 0) num_inv = 1;
|
|
||||||
if (num_inv > tot_inv) num_inv = tot_inv;
|
|
||||||
set(20, num_inv);
|
|
||||||
set(21, tot_inv);
|
|
||||||
|
|
||||||
const TString& cofi = msk.get(F_INTER_COFI);
|
|
||||||
if (cofi.full())
|
|
||||||
{
|
|
||||||
set(22, cofi);
|
|
||||||
set(23, msk.get(F_INTER_CAF));
|
|
||||||
set(24, msk.get(F_INTER_COM));
|
|
||||||
set(25, msk.get(F_INTER_DATE));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
set(25, TDate()); // Svuota data impegno
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TDati_rilevanti_set::add_footer()
|
|
||||||
{
|
|
||||||
TString f = row(0);
|
|
||||||
f.overwrite("9");
|
|
||||||
new_rec(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TDati_rilevanti_set::split(const TFilename& name, const TRecnotype maxalleg)
|
|
||||||
{
|
|
||||||
const TRecnotype totrec = items();
|
|
||||||
bool done = totrec <= maxalleg;
|
|
||||||
if (!done)
|
|
||||||
{
|
|
||||||
TString msg;
|
|
||||||
msg.format(FR("Spezzatura del file %s in blocchi da %d righe"), (const char*)name, maxalleg);
|
|
||||||
TProgind pi(totrec, msg);
|
|
||||||
|
|
||||||
TDati_rilevanti_set outset(_anno);
|
|
||||||
int f = 0;
|
|
||||||
for (TRecnotype r = 0; r < totrec; r++)
|
|
||||||
{
|
|
||||||
if (!pi.setstatus(r))
|
|
||||||
break; // Procedura interrotta dall'utente
|
|
||||||
outset.new_rec(row(r));
|
|
||||||
if (outset.items() >= maxalleg || r == totrec-1)
|
|
||||||
{
|
|
||||||
// Costruisce il nome del file di invio parziale, es: Spesometro00001_2.txt
|
|
||||||
TFilename outname = name;
|
|
||||||
const TString8 saved_ext = outname.ext();
|
|
||||||
outname.ext(""); outname << '_' << (++f);
|
|
||||||
outname.ext(saved_ext);
|
|
||||||
done = outset.save_as(outname);
|
|
||||||
if (done)
|
|
||||||
outset.destroy();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cantwrite_box(outname);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (f > 1)
|
|
||||||
warning_box(FR("Sono stati generati %d file nella cartella %s"), name.path());
|
|
||||||
}
|
|
||||||
return done;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TDati_rilevanti_set::init()
|
|
||||||
{
|
|
||||||
TDati_rilevanti_trc trc;
|
|
||||||
for (int i = 0; i <= 5; i++)
|
|
||||||
trc.create_fields(i, *this);
|
|
||||||
trc.create_fields(9, *this);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TDati_rilevanti_set::TDati_rilevanti_set(const TFilename& file)
|
|
||||||
: TAS400_recordset("AS400(1800,1)"), _anno(2010)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
if (load_file(file) && move_first())
|
|
||||||
{
|
|
||||||
const int anno = get(18).as_int();
|
|
||||||
if (anno > 2010)
|
|
||||||
_anno = anno;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TDati_rilevanti_set::TDati_rilevanti_set(int anno)
|
|
||||||
: TAS400_recordset("AS400(1800,1)"), _anno(anno)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TDati_rilevanti_array
|
// TDati_rilevanti_array
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -982,336 +390,6 @@ void TDati_rilevanti_array::add(const TArray& note, bool send_all, TLog_report&
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TCofi_cache
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TCofi_cache : public TCache
|
|
||||||
{
|
|
||||||
TLocalisamfile _clifo, _occas;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual TObject* key2obj(const char* key);
|
|
||||||
|
|
||||||
public:
|
|
||||||
const TString& cofi2ragsoc(char tipocf, const TString& cofi);
|
|
||||||
const TString& paiv2ragsoc(char tipocf, const TString& paiv);
|
|
||||||
TCofi_cache() : _clifo(LF_CLIFO), _occas(LF_OCCAS) { }
|
|
||||||
};
|
|
||||||
|
|
||||||
TObject* TCofi_cache::key2obj(const char* key)
|
|
||||||
{
|
|
||||||
TToken_string chiave(key);
|
|
||||||
const int fkey = chiave.get_char(0)=='C' ? 4 : 5;
|
|
||||||
const TString4 tipocf = chiave.get();
|
|
||||||
const TString16 code= chiave.get();
|
|
||||||
|
|
||||||
_clifo.setkey(fkey);
|
|
||||||
_clifo.zero();
|
|
||||||
_clifo.put(CLI_TIPOCF, tipocf);
|
|
||||||
if (fkey == 5)
|
|
||||||
_clifo.put(CLI_PAIV, code);
|
|
||||||
else
|
|
||||||
_clifo.put(CLI_COFI, code);
|
|
||||||
|
|
||||||
int err = _clifo.read();
|
|
||||||
if (err != NOERR && fkey == 5 && pi_check("IT", code))
|
|
||||||
{
|
|
||||||
_clifo.put(CLI_TIPOCF, tipocf);
|
|
||||||
_clifo.put(CLI_STATOPAIV, "IT");
|
|
||||||
_clifo.put(CLI_PAIV, code);
|
|
||||||
err = _clifo.read();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == NOERR)
|
|
||||||
return new TString80(_clifo.get(CLI_RAGSOC));
|
|
||||||
|
|
||||||
if (fkey == 5 && !pi_check("IT", code)) // cerco partite IVA estere
|
|
||||||
{
|
|
||||||
TString query;
|
|
||||||
query << "USE CLIFO SELECT PAIV=\"" << code << '"'
|
|
||||||
<< "\nFROM TIPOCF=" << tipocf
|
|
||||||
<< "\nTO TIPOCF=" << tipocf;
|
|
||||||
TISAM_recordset clifo(query);
|
|
||||||
if (clifo.move_first())
|
|
||||||
return new TString80(clifo.get(CLI_RAGSOC).as_string());
|
|
||||||
}
|
|
||||||
|
|
||||||
_occas.put(OCC_CFPI, code);
|
|
||||||
if (_occas.read() == NOERR)
|
|
||||||
{
|
|
||||||
const TString& cfpi = _occas.get(fkey == 4 ? OCC_COFI : OCC_PAIV);
|
|
||||||
if (code == cfpi || cfpi.empty())
|
|
||||||
return new TString80(_occas.get(OCC_RAGSOC));
|
|
||||||
}
|
|
||||||
|
|
||||||
TString query;
|
|
||||||
query << "USE OCCAS SELECT ";
|
|
||||||
if (fkey == 4)
|
|
||||||
query << "COFI=\"" << code << '"';
|
|
||||||
else
|
|
||||||
query << "PAIV=\"" << code << '"';
|
|
||||||
TISAM_recordset occas(query);
|
|
||||||
if (occas.move_first())
|
|
||||||
return new TString80(occas.get(OCC_RAGSOC).as_string());
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TString& TCofi_cache::cofi2ragsoc(char tipocf, const TString& cofi)
|
|
||||||
{
|
|
||||||
TString80 key;
|
|
||||||
key.format("CF|%c|%s", tipocf, (const char*)cofi);
|
|
||||||
const TString* ragsoc = (const TString*)objptr(key);
|
|
||||||
return ragsoc != NULL ? *ragsoc : EMPTY_STRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TString& TCofi_cache::paiv2ragsoc(char tipocf, const TString& paiv)
|
|
||||||
{
|
|
||||||
TString80 key;
|
|
||||||
key.format("PI|%c|%s", tipocf, (const char*)paiv);
|
|
||||||
const TString* ragsoc = (const TString*)objptr(key);
|
|
||||||
return ragsoc != NULL ? *ragsoc : EMPTY_STRING;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TDati_rilevanti_rep
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TDati_rilevanti_rep : public TReport
|
|
||||||
{
|
|
||||||
TCofi_cache _cofi;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
const TString& cofi2ragsoc(char tipocf, const TString& cofi) const
|
|
||||||
{ return ((TDati_rilevanti_rep*)this)->_cofi.cofi2ragsoc(tipocf, cofi); }
|
|
||||||
|
|
||||||
const TString& paiv2ragsoc(char tipocf, const TString& cofi) const
|
|
||||||
{ return ((TDati_rilevanti_rep*)this)->_cofi.paiv2ragsoc(tipocf, cofi); }
|
|
||||||
|
|
||||||
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
TDati_rilevanti_rep(const TFilename& file);
|
|
||||||
};
|
|
||||||
|
|
||||||
bool TDati_rilevanti_rep::get_usr_val(const TString& name, TVariant& var) const
|
|
||||||
{
|
|
||||||
const TDati_rilevanti_set& set = *(TDati_rilevanti_set*)recordset();
|
|
||||||
const int tipo = set.rec_type()[0] - '0';
|
|
||||||
|
|
||||||
if (name == "ANNO")
|
|
||||||
{
|
|
||||||
var.set(set.anno());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "TIPO")
|
|
||||||
{
|
|
||||||
var.set(tipo);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "COFI")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 1: var = set.get("1.2"); break;
|
|
||||||
case 4: var = set.get("4.3"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "PAIV")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 2: var = set.get("2.2"); break;
|
|
||||||
case 4: var = set.get("4.2"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "RAGSOC")
|
|
||||||
{
|
|
||||||
char tipocf = 'C';
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 2: if (set.get("2.8").as_int() == 2) tipocf = 'F'; break;
|
|
||||||
default: break;
|
|
||||||
};
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 1: var = cofi2ragsoc(tipocf, set.get("1.2").as_string()); break;
|
|
||||||
case 2: var = paiv2ragsoc(tipocf, set.get("2.2").as_string()); break;
|
|
||||||
case 3:
|
|
||||||
var = set.get("3.8");
|
|
||||||
if (var.is_empty())
|
|
||||||
{
|
|
||||||
TString80 rs;
|
|
||||||
rs << set.get("3.2") << ' ' << set.get("3.3");
|
|
||||||
var = rs.trim();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
{
|
|
||||||
const TString16 paiv = set.get("4.2").as_string();
|
|
||||||
if (paiv.full())
|
|
||||||
{
|
|
||||||
var = paiv2ragsoc('C', paiv);
|
|
||||||
if (var.is_empty())
|
|
||||||
var = paiv2ragsoc('F', paiv);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const TString16 cofi = set.get("4.3").as_string();
|
|
||||||
var = cofi2ragsoc('C', cofi);
|
|
||||||
if (var.is_empty())
|
|
||||||
var = paiv2ragsoc('F', cofi);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
var = set.get("5.8");
|
|
||||||
if (var.is_empty())
|
|
||||||
{
|
|
||||||
TString80 rs;
|
|
||||||
rs << set.get("5.2") << ' ' << set.get("5.3");
|
|
||||||
var = rs.trim();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "DATAREG")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 1: var = set.get("1.3"); break;
|
|
||||||
case 2: var = set.get("2.3"); break;
|
|
||||||
case 3: var = set.get("3.12"); break;
|
|
||||||
case 4: var = set.get("4.4"); break;
|
|
||||||
case 5: var = set.get("5.12"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "NUMDOC")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 2: var = set.get("2.4"); break;
|
|
||||||
case 3: var = set.get("3.13"); break;
|
|
||||||
case 4: var = set.get("4.5"); break;
|
|
||||||
case 5: var = set.get("5.13"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "IMPORTO")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 1: var = set.get("1.5"); break;
|
|
||||||
case 2: var = set.get("2.6"); break;
|
|
||||||
case 3: var = set.get("3.15"); break;
|
|
||||||
case 4: var = set.get("4.6"); break;
|
|
||||||
case 5: var = set.get("5.14"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "IMPOSTA")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 2: var = set.get("2.7"); break;
|
|
||||||
case 3: var = set.get("3.16"); break;
|
|
||||||
case 4: var = set.get("4.7"); break;
|
|
||||||
case 5: var = set.get("5.15"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "DATARETT")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 4: var = set.get("4.8"); break;
|
|
||||||
case 5: var = set.get("5.16"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "NUMRETT")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 4: var = set.get("4.9"); break;
|
|
||||||
case 5: var = set.get("5.17"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "SIMPORTO")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 4: var = set.get("4.10"); break;
|
|
||||||
case 5: var = set.get("5.18"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "SIMPOSTA")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 4: var = set.get("4.11"); break;
|
|
||||||
case 5: var = set.get("5.19"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "MODPAG")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 1: var = set.get("1.4"); break;
|
|
||||||
case 2: var = set.get("2.5"); break;
|
|
||||||
case 3: var = set.get("3.14"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (name == "TIPOPE")
|
|
||||||
{
|
|
||||||
switch (tipo)
|
|
||||||
{
|
|
||||||
case 2: var = set.get("2.8"); break;
|
|
||||||
case 3: var = set.get("3.17"); break;
|
|
||||||
default: var.set_null(); break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return TReport::get_usr_val(name, var);
|
|
||||||
}
|
|
||||||
|
|
||||||
TDati_rilevanti_rep::TDati_rilevanti_rep(const TFilename& file)
|
|
||||||
{
|
|
||||||
load("fe0100");
|
|
||||||
|
|
||||||
TDati_rilevanti_set* set = new TDati_rilevanti_set(file);
|
|
||||||
|
|
||||||
// Elimina testata e coda
|
|
||||||
set->destroy(0);
|
|
||||||
set->destroy(set->items()-1);
|
|
||||||
|
|
||||||
set_recordset(set);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TDati_rilevanti_msk
|
// TDati_rilevanti_msk
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -2085,6 +1163,8 @@ bool TDati_rilevanti_msk::send_alleg()
|
|||||||
|
|
||||||
if (clifo != last_clifo)
|
if (clifo != last_clifo)
|
||||||
{
|
{
|
||||||
|
if (clifo == "833")
|
||||||
|
int caaozne = 1;
|
||||||
data.add(note, send_all, *_log);
|
data.add(note, send_all, *_log);
|
||||||
note.destroy();
|
note.destroy();
|
||||||
last_clifo = clifo;
|
last_clifo = clifo;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#define F_OUTFOLDER 305
|
#define F_OUTFOLDER 305
|
||||||
#define F_MAXREC 306
|
#define F_MAXREC 306
|
||||||
#define F_DEFINITIVO 307
|
#define F_DEFINITIVO 307
|
||||||
|
#define F_OUTFILE 308
|
||||||
|
|
||||||
#define F_TIPOCF 310
|
#define F_TIPOCF 310
|
||||||
#define F_CODCF 311
|
#define F_CODCF 311
|
||||||
|
60
fe/fe0300.cpp
Normal file
60
fe/fe0300.cpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <automask.h>
|
||||||
|
|
||||||
|
#include "fe0100a.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSomma_spesometro_msk
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TSomma_spesometro_msk : public TAutomask
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TSomma_spesometro_msk() : TAutomask("fe0300a") { load_profile(); }
|
||||||
|
~TSomma_spesometro_msk() { save_profile(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
bool TSomma_spesometro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
|
{
|
||||||
|
switch (o.dlg())
|
||||||
|
{
|
||||||
|
case F_OUTFOLDER:
|
||||||
|
if (e == fe_init || e == fe_modify)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSomma_spesometro_app
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TSomma_spesometro_app : public TSkeleton_application
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void main_loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TSomma_spesometro_app::main_loop()
|
||||||
|
{
|
||||||
|
TSomma_spesometro_msk msk;
|
||||||
|
msk.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// main
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int fe0300(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TSomma_spesometro_app app;
|
||||||
|
app.run(argc, argv, TR("Somma file Spesometro"));
|
||||||
|
return 0;
|
||||||
|
}
|
78
fe/fe0300a.uml
Normal file
78
fe/fe0300a.uml
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#include "fe0100a.h"
|
||||||
|
|
||||||
|
TOOLBAR "topbar" 0 0 0 2
|
||||||
|
|
||||||
|
BUTTON DLG_OK 2 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Elabora"
|
||||||
|
PICTURE TOOL_ELABORA
|
||||||
|
END
|
||||||
|
|
||||||
|
#include <helpbar.h>
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Somma file spesometro" 0 2 0 0
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 78 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "@bParametri di elaborazione "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_OUTFOLDER 255 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 2 "Cartella "
|
||||||
|
DSELECT
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "Specificare una cartella di destinazione valida"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_OUTFILE 255 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 3 "File "
|
||||||
|
FSELECT "*.txt"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "Specificare un file di destinazione valido"
|
||||||
|
END
|
||||||
|
|
||||||
|
TREELIST F_RIGHE 78 10
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 5 ""
|
||||||
|
DISPLAY "Nome@50" NAME
|
||||||
|
DISPLAY "Dimensioni" SIZE
|
||||||
|
DISPLAY "Data@10" DATE
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 78 6
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 16 "@bDati del soggetto che assume l'impegno alla presentazione telematica"
|
||||||
|
END
|
||||||
|
|
||||||
|
LIST F_INTER_COM 1 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 17 "Comunicazione predisposta da "
|
||||||
|
ITEM "|"
|
||||||
|
ITEM "1|contribuente"
|
||||||
|
ITEM "2|chi effettua l'invio"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_INTER_COFI 16
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 18 "Codice fiscale dell'intermediario "
|
||||||
|
FLAGS "U"
|
||||||
|
VALIDATE CF_FUNC 1 F_INTER_COFI
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_INTER_CAF 5
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 19 "Numero iscrizione all'albo C.A.F. "
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_INTER_DATE
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 20 "Data dell'impegno alla trasmissione "
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
844
fe/felib.cpp
Normal file
844
fe/felib.cpp
Normal file
@ -0,0 +1,844 @@
|
|||||||
|
#include <diction.h>
|
||||||
|
#include <lffiles.h>
|
||||||
|
#include <progind.h>
|
||||||
|
#include <recarray.h>
|
||||||
|
#include <validate.h>
|
||||||
|
|
||||||
|
#include "fe0100a.h"
|
||||||
|
#include "felib.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <alleg.h>
|
||||||
|
#include <anafis.h>
|
||||||
|
#include <anagr.h>
|
||||||
|
#include <clifo.h>
|
||||||
|
#include <comuni.h>
|
||||||
|
#include <mov.h>
|
||||||
|
#include <nditte.h>
|
||||||
|
#include <occas.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TAnagrafica
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static const TString& comune_di(const TString& codcom)
|
||||||
|
{
|
||||||
|
if (codcom.blank() || codcom.len() != 4)
|
||||||
|
return EMPTY_STRING;
|
||||||
|
|
||||||
|
TString8 key; key << " |" << codcom;
|
||||||
|
TString& den = get_tmp_string();
|
||||||
|
den = cache().get(LF_COMUNI, key, COM_DENCOM);
|
||||||
|
den.cut(40);
|
||||||
|
den.upper();
|
||||||
|
|
||||||
|
return den;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const TString& provincia_di(const TString& codcom)
|
||||||
|
{
|
||||||
|
if (codcom.blank() || codcom.len() != 4)
|
||||||
|
return EMPTY_STRING;
|
||||||
|
TString8 key; key << '|' << codcom;
|
||||||
|
return cache().get(LF_COMUNI, key, COM_PROVCOM);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TAnagrafica::comune_nascita() const
|
||||||
|
{ return comune_di(_com_nasc); }
|
||||||
|
|
||||||
|
const TString& TAnagrafica::provincia_nascita() const
|
||||||
|
{ return provincia_di(_com_nasc); }
|
||||||
|
|
||||||
|
const TString& TAnagrafica::comune_residenza() const
|
||||||
|
{ return comune_di(_com_res); }
|
||||||
|
|
||||||
|
const TString& TAnagrafica::provincia_residenza() const
|
||||||
|
{ return provincia_di(_com_res); }
|
||||||
|
|
||||||
|
void TAnagrafica::build_ind_res(const TRectype& rec, const char* ind, const char* civ)
|
||||||
|
{
|
||||||
|
TString80 indirizzo = rec.get(ind);
|
||||||
|
if (indirizzo.full())
|
||||||
|
{
|
||||||
|
const TString& numero = rec.get(civ);
|
||||||
|
if (numero.full())
|
||||||
|
indirizzo << ", " << numero;
|
||||||
|
indirizzo.strip_double_spaces();
|
||||||
|
TParagraph_string s(indirizzo, 40);
|
||||||
|
_ind_res = s.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TAnagrafica::init(const TRectype& rec)
|
||||||
|
{
|
||||||
|
_tipo = '\0';
|
||||||
|
_stato_estero = 0;
|
||||||
|
_allegato = 0;
|
||||||
|
if (rec.empty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
switch (rec.num())
|
||||||
|
{
|
||||||
|
case LF_OCCAS:
|
||||||
|
_tipo = 'F';
|
||||||
|
_cofi = rec.get(OCC_COFI);
|
||||||
|
_paiv = rec.get(OCC_PAIV);
|
||||||
|
if (_cofi.blank() || _paiv.blank())
|
||||||
|
{
|
||||||
|
const TString& codice = rec.get(OCC_CFPI);
|
||||||
|
if (_cofi.blank() && cf_check("", codice))
|
||||||
|
_cofi = codice;
|
||||||
|
if (_paiv.blank() && pi_check("", codice))
|
||||||
|
_paiv = codice;
|
||||||
|
}
|
||||||
|
_ragsoc = rec.get(OCC_RAGSOC); _ragsoc.upper();
|
||||||
|
_data_nasc = rec.get(OCC_DNASC);
|
||||||
|
_com_nasc = rec.get(OCC_COMNASC);
|
||||||
|
_com_res = rec.get(OCC_COM);
|
||||||
|
_loc_res = rec.get(OCC_LOCALITA);
|
||||||
|
build_ind_res(rec, OCC_INDIR, OCC_CIV);
|
||||||
|
_stato_estero = rec.get_int(OCC_STATO);
|
||||||
|
_allegato = _paiv.blank() ? 6 : 2;
|
||||||
|
break;
|
||||||
|
case LF_ANAG:
|
||||||
|
_tipo = rec.get_char(ANA_TIPOA);
|
||||||
|
_ragsoc = rec.get(ANA_RAGSOC); _ragsoc.upper();
|
||||||
|
_cofi = rec.get(ANA_COFI);
|
||||||
|
_paiv = rec.get(ANA_PAIV);
|
||||||
|
|
||||||
|
// Comune di residenza fiscale o domicilio
|
||||||
|
_com_res = rec.get(ANA_COMRF);
|
||||||
|
if (_com_res.empty())
|
||||||
|
_com_res = rec.get(ANA_COMRES);
|
||||||
|
build_ind_res(rec, ANA_INDRES, ANA_CIVRES);
|
||||||
|
|
||||||
|
// Dati di nascita persone fisiche
|
||||||
|
if (_tipo == 'F')
|
||||||
|
{
|
||||||
|
const TRectype& anafis = cache().get(LF_ANAGFIS, rec.get_long(ANA_CODANAGR));
|
||||||
|
_data_nasc = anafis.get(ANF_DATANASC);
|
||||||
|
_com_nasc = anafis.get(ANF_COMNASC);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_tipo = 'G';
|
||||||
|
break;
|
||||||
|
case LF_NDITTE:
|
||||||
|
{
|
||||||
|
const bool good = init(LF_ANAG, rec.get_char(NDT_TIPOA), rec.get_long(NDT_CODANAGR));
|
||||||
|
_ragsoc = rec.get(NDT_RAGSOC); _ragsoc.upper();
|
||||||
|
return good;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LF_CLIFO:
|
||||||
|
_tipo = rec.get_char(CLI_TIPOAPER);
|
||||||
|
if (_tipo == 'F')
|
||||||
|
{
|
||||||
|
const long cod = rec.get_long(CLI_CODANAGPER);
|
||||||
|
if (cod > 0 && init(LF_ANAG, _tipo, cod))
|
||||||
|
{
|
||||||
|
if (rec.get(CLI_COMNASC).not_empty())
|
||||||
|
_com_nasc = rec.get(CLI_COMNASC);
|
||||||
|
if (rec.get(CLI_DATANASC).not_empty())
|
||||||
|
_data_nasc = rec.get(CLI_DATANASC);
|
||||||
|
}
|
||||||
|
_tipo = 'F'; // init could reset _tipo
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_tipo = 'G';
|
||||||
|
// Assegno codice fiscale e partita IVA se validi, altrimenti mantengo quelli dell'anagrafica
|
||||||
|
if (rec.get(CLI_COFI).not_empty())
|
||||||
|
_cofi = rec.get(CLI_COFI);
|
||||||
|
if (rec.get(CLI_PAIV).not_empty())
|
||||||
|
_paiv = rec.get(CLI_PAIV);
|
||||||
|
build_ind_res(rec, CLI_INDCF, CLI_CIVCF);
|
||||||
|
|
||||||
|
// Prevale sempre la ragione sociale del cliente: "Il cliente ha sempre ragione".
|
||||||
|
_ragsoc = rec.get(CLI_RAGSOC); _ragsoc.upper();
|
||||||
|
_stato_estero = rec.get_int(CLI_STATOCF);
|
||||||
|
_allegato = rec.get_int(CLI_ALLEG);
|
||||||
|
_loc_res = rec.get(CLI_LOCCF);
|
||||||
|
break;
|
||||||
|
case LF_MOV:
|
||||||
|
return init(rec.get_char(MOV_TIPO), rec.get_long(MOV_CODCF), rec.get(MOV_OCFPI));
|
||||||
|
case LF_ALLEG:
|
||||||
|
return init(rec.get_char(ALL_TIPOCF), rec.get_long(ALL_CODCF), rec.get(ALL_OCFPI));
|
||||||
|
default:
|
||||||
|
CHECKD(false, "Record non valido per TAnagrafica ", rec.num());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_tipo == 'G')
|
||||||
|
_ragsoc.strip_double_spaces();
|
||||||
|
|
||||||
|
return _tipo == 'F' || _tipo == 'G';
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TAnagrafica::init(int num, char tipo, long codice)
|
||||||
|
{
|
||||||
|
TString16 key; key << tipo << '|' << codice;
|
||||||
|
return init(cache().get(num, key));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TAnagrafica::init(char tipo, long codice, const TString& ocfpi)
|
||||||
|
{
|
||||||
|
bool done = false;
|
||||||
|
if (ocfpi.full())
|
||||||
|
done = init(LF_OCCAS, ocfpi);
|
||||||
|
if (!done)
|
||||||
|
done = init(LF_CLIFO, tipo, codice);
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TDati_rilevanti_trc
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define AN _alfafld
|
||||||
|
#define CF _alfafld
|
||||||
|
#define DT _datefld
|
||||||
|
#define NU _longzerofld
|
||||||
|
#define PI _alfafld
|
||||||
|
#define OBBLIG true
|
||||||
|
|
||||||
|
class TDati_rilevanti_trc : public TObject
|
||||||
|
{
|
||||||
|
int _tipo;
|
||||||
|
TAS400_recordset* _recset;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool add_field(int n, int da, int a, int len, const char* descr, TFieldtypes tipo = AN,
|
||||||
|
const char* def = NULL, bool required = false);
|
||||||
|
public:
|
||||||
|
void create_fields(int tipo, TAS400_recordset& recset);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool TDati_rilevanti_trc::add_field(int n, int da, int a, int len, const char* descr, TFieldtypes tipo,
|
||||||
|
const char* def, bool required)
|
||||||
|
{
|
||||||
|
CHECKD(descr && *descr, "Campo ignoto ", n);
|
||||||
|
CHECKS(n > 0 && da > 0 && a >= da && a <= 1800 && len == (a-da+1), "Campo inconsistente ", descr);
|
||||||
|
TString8 name;
|
||||||
|
name.format("%d.%d", _tipo, n);
|
||||||
|
bool ok = _recset->create_field(name, da-1, len, tipo, required, def);
|
||||||
|
CHECKS(ok, "Can't create field ", descr);
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDati_rilevanti_trc::create_fields(int tipo, TAS400_recordset& recset)
|
||||||
|
{
|
||||||
|
CHECKD(tipo >= 0 && tipo <= 5 || tipo == 9, "Tipo record non valido ", tipo);
|
||||||
|
_tipo = tipo;
|
||||||
|
_recset = &recset;
|
||||||
|
|
||||||
|
TString4 def; def << _tipo;
|
||||||
|
add_field(1, 1, 1, 1, "Tipo record", NU, def, OBBLIG);
|
||||||
|
|
||||||
|
if (_tipo == 0 || _tipo == 9)
|
||||||
|
{
|
||||||
|
add_field( 2, 2, 6, 5, "Codice identificativo fornitura", AN, "ART21", OBBLIG);
|
||||||
|
add_field( 3, 7, 8, 2, "Codice numerico fornitura", NU, "47", OBBLIG);
|
||||||
|
add_field( 4, 9, 9, 1, "Tipologia di invio", NU, "0", OBBLIG);
|
||||||
|
add_field( 5, 10, 26,17, "Protocollo da sostituire", AN); // ex NU
|
||||||
|
add_field( 6, 27, 32, 6, "Protocollo documento", AN); // ex NU
|
||||||
|
|
||||||
|
add_field( 7, 33, 48,16, "Codice fiscale", CF, "", OBBLIG);
|
||||||
|
add_field( 8, 49, 59,11, "Partita IVA", PI);
|
||||||
|
|
||||||
|
add_field( 9, 60,119,60, "Denominazione", AN);
|
||||||
|
add_field(10,120,159,40, "Comune domicilio fiscale", AN);
|
||||||
|
add_field(11,160,161, 2, "Provincia domicilio fiscale", AN);
|
||||||
|
|
||||||
|
add_field(12,162,185,24, "Cognome", AN);
|
||||||
|
add_field(13,186,205,20, "Nome", AN);
|
||||||
|
add_field(14,206,206, 1, "Sesso", AN);
|
||||||
|
add_field(15,207,214, 8, "Data di nascita", DT);
|
||||||
|
add_field(16,215,254,40, "Comune o stato di nascita", AN);
|
||||||
|
add_field(17,255,256, 2, "Provincia di nascita", AN);
|
||||||
|
|
||||||
|
add_field(18,257,260, 4, "Anno di riferimento", NU);
|
||||||
|
add_field(19,261,261, 1, "Comunicazione società incorp.", AN, "0", OBBLIG);
|
||||||
|
add_field(20,262,265, 4, "Progressivo invio telmatico", NU, "1");
|
||||||
|
add_field(21,266,269, 4, "Numero totale invii telematici", NU, "1");
|
||||||
|
|
||||||
|
add_field(22,270,285,16, "Codice fiscale intermediario", CF);
|
||||||
|
add_field(23,286,290, 5, "Numero iscrizione C.A.F.", AN); // Ex NU
|
||||||
|
add_field(24,291,291, 1, "Impegno alla trasmissione", AN ); // Ex NU
|
||||||
|
add_field(25,292,299, 8, "Data dell'impegno", DT);
|
||||||
|
|
||||||
|
add_field(26,300,1797,1498, "Filler", AN);
|
||||||
|
add_field(27,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
||||||
|
add_field(28,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
||||||
|
} else
|
||||||
|
if (_tipo == 1)
|
||||||
|
{
|
||||||
|
add_field(2, 2,17,16, "Codice fiscale", CF, "", OBBLIG);
|
||||||
|
add_field(3,18,25, 8, "Data dell'operazione", DT);
|
||||||
|
add_field(4,26,26, 1, "Modalità di pagamento", NU, "3", OBBLIG);
|
||||||
|
add_field(5,27,35, 9, "Importo dovuto", NU);
|
||||||
|
add_field(6,36,1797,1762, "Filler", AN);
|
||||||
|
add_field(7,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
||||||
|
add_field(8,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
||||||
|
} else
|
||||||
|
if (_tipo == 2)
|
||||||
|
{
|
||||||
|
add_field( 2, 2,12,11, "Partita IVA", PI, "", OBBLIG);
|
||||||
|
add_field( 3,13,20, 8, "Data dell'operazione", DT);
|
||||||
|
add_field( 4,21,35,15, "Numero della fattura", AN);
|
||||||
|
add_field( 5,36,36, 1, "Modalità di pagamento", NU, "1", OBBLIG);
|
||||||
|
add_field( 6,37,45, 9, "Importo dovuto", NU);
|
||||||
|
add_field( 7,46,54, 9, "Imposta", NU);
|
||||||
|
add_field( 8,55,55, 1, "Tipologia dell'operazione", NU, "1", OBBLIG);
|
||||||
|
|
||||||
|
add_field( 9,56,1797,1742, "Filler", AN);
|
||||||
|
add_field(10,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
||||||
|
add_field(11,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
||||||
|
} else
|
||||||
|
if (_tipo == 3)
|
||||||
|
{
|
||||||
|
add_field( 2, 2, 25,24, "Cognome", AN);
|
||||||
|
add_field( 3, 26, 45,20, "Nome", AN);
|
||||||
|
add_field( 4, 46, 53, 8, "Data di nascita", DT);
|
||||||
|
add_field( 5, 54, 93,40, "Comune o stato estero di nascita", AN);
|
||||||
|
add_field( 6, 94, 95, 2, "Provincia di nascita", AN);
|
||||||
|
add_field( 7, 96, 98, 3, "Stato estero del domicilio", AN);
|
||||||
|
|
||||||
|
add_field( 8, 99,158,60, "Ragione sociale", AN);
|
||||||
|
add_field( 9,159,198,40, "Città estera della sede legale", AN);
|
||||||
|
add_field(10,199,201, 3, "Stato estero della sede legale", AN);
|
||||||
|
add_field(11,202,241,40, "Indirizzo estero della sede legale", AN);
|
||||||
|
|
||||||
|
add_field(12,242,249, 8, "Data dell'operazione", DT);
|
||||||
|
add_field(13,250,264,15, "Numero della fattura", AN);
|
||||||
|
add_field(14,265,265, 1, "Modalità di pagamento", NU, "1", OBBLIG);
|
||||||
|
add_field(15,266,274, 9, "Importo dovuto", NU);
|
||||||
|
add_field(16,275,283, 9, "Imposta", NU);
|
||||||
|
add_field(17,284,284, 1, "Tipologia dell'operazione", NU, "1", OBBLIG);
|
||||||
|
|
||||||
|
add_field(18,285,1797,1513, "Filler", AN);
|
||||||
|
add_field(19,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
||||||
|
add_field(20,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
||||||
|
} else
|
||||||
|
if (_tipo == 4)
|
||||||
|
{
|
||||||
|
add_field( 2, 2,12,11, "Partita IVA", PI);
|
||||||
|
add_field( 3,13,28,16, "Codice Fiscale", CF);
|
||||||
|
add_field( 4,29,36, 8, "Data dell'operazione", DT, "", OBBLIG);
|
||||||
|
add_field( 5,37,51,15, "Numero della Nota di Variazione", AN, "", OBBLIG);
|
||||||
|
add_field( 6,52,60, 9, "Imponibile Nota di Variazione", NU);
|
||||||
|
add_field( 7,61,69, 9, "Imposta Nota di Variazione", NU);
|
||||||
|
add_field( 8,70,77, 8, "Data della Fattura da rettificare", DT, "", OBBLIG);
|
||||||
|
add_field( 9,78,92,15, "Numero della Fattura da rettificare", AN, "", OBBLIG);
|
||||||
|
add_field(10,93,93, 1, "Variazione imponib. (Debito/Credito)",AN);
|
||||||
|
add_field(11,94,94, 1, "Variazione imposta (Debito/Credito)", AN);
|
||||||
|
|
||||||
|
add_field(11,95,1797,1703, "Filler", AN);
|
||||||
|
add_field(12,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
||||||
|
add_field(13,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
||||||
|
} else
|
||||||
|
if (_tipo == 5)
|
||||||
|
{
|
||||||
|
add_field( 2, 2, 25,24, "Cognome", AN);
|
||||||
|
add_field( 3, 26, 45,20, "Nome", AN);
|
||||||
|
add_field( 4, 46, 53, 8, "Data di nascita", DT);
|
||||||
|
add_field( 5, 54, 93,40, "Comune o stato estero di nascita", AN);
|
||||||
|
add_field( 6, 94, 95, 2, "Provincia di nascita", AN);
|
||||||
|
add_field( 7, 96, 98, 3, "Stato estero del domicilio", AN);
|
||||||
|
add_field( 8, 99,158,60, "Ragione sociale", AN);
|
||||||
|
add_field( 9,159,198,40, "Città estera della sede legale", AN);
|
||||||
|
add_field(10,199,201, 3, "Stato estero della sede legale", AN);
|
||||||
|
add_field(11,202,241,40, "Indirizzo estero della sede legale", AN);
|
||||||
|
add_field(12,242,249, 8, "Data dell'operazione", DT, "", OBBLIG);
|
||||||
|
add_field(13,250,264,15, "Numero della Nota di Variazione", AN, "", OBBLIG);
|
||||||
|
add_field(14,265,273, 9, "Imponibile Nota di Variazione", NU);
|
||||||
|
add_field(15,274,282, 9, "Imposta Nota di Variazione", NU);
|
||||||
|
add_field(16,283,290, 8, "Data della Fattura da rettificare", DT, "", OBBLIG);
|
||||||
|
add_field(17,291,305,15, "Numero della Fattura da rettificare", AN, "", OBBLIG);
|
||||||
|
add_field(18,306,306, 1, "Variazione imponib. (Debito/Credito)",AN);
|
||||||
|
add_field(19,307,307, 1, "Variazione imposta (Debito/Credito)", AN);
|
||||||
|
|
||||||
|
add_field(20,308,1797,1490, "Filler", AN);
|
||||||
|
add_field(21,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG);
|
||||||
|
add_field(22,1799,1800,2,"Caratteri di fine riga", AN, "\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
_recset = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TDati_rilevanti_set
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TDati_rilevanti_set::set_field(const TAS400_column_info& fi, const TVariant& var)
|
||||||
|
{
|
||||||
|
// Salva le date in formato GGMMAAAA invece dello standard ANSI AAAAMMGG
|
||||||
|
if (fi._type == DT && fi._width == 8)
|
||||||
|
{
|
||||||
|
const TDate d = var.as_date();
|
||||||
|
if (d.ok())
|
||||||
|
{
|
||||||
|
TFixed_string str = d.string(full, '\0', full, full, gma_date);
|
||||||
|
row().overwrite(str, fi._pos);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
row().overwrite(" ", fi._pos);
|
||||||
|
return true;
|
||||||
|
} else
|
||||||
|
// Salva gli importi in formato 000001234 (non possono essere negativi)
|
||||||
|
if (fi._type == NU && fi._width == 9)
|
||||||
|
{
|
||||||
|
TString16 str = var.as_string();
|
||||||
|
CHECKS(str[0] != '-', "Importo negativo non ammesso:", (const char*)str);
|
||||||
|
// Tiene la sola parte intera e riempie di zeri
|
||||||
|
const int dot = str.find('.');
|
||||||
|
if (dot >= 0) str.cut(dot);
|
||||||
|
str.right_just(fi._width, '0');
|
||||||
|
row().overwrite(str, fi._pos);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TAS400_recordset::set_field(fi, var);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TVariant& TDati_rilevanti_set::get_field(const TAS400_column_info& ci) const
|
||||||
|
{
|
||||||
|
if (ci._type == DT && ci._width == 8)
|
||||||
|
{
|
||||||
|
const TRecnotype n = current_row();
|
||||||
|
if (n >= 0 && n < items())
|
||||||
|
{
|
||||||
|
const TString& str = row(n).mid(ci._pos, ci._width);
|
||||||
|
const int gg = atoi(str.left(2));
|
||||||
|
const int mm = atoi(str.mid(2,2));
|
||||||
|
const int aa = atoi(str.mid(4,4));
|
||||||
|
if (aa > 1800 && aa < 2100)
|
||||||
|
{
|
||||||
|
TVariant& var = get_tmp_var();
|
||||||
|
var.set(TDate(gg, mm, aa));
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL_VARIANT;
|
||||||
|
}
|
||||||
|
return TAS400_recordset::get_field(ci);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDati_rilevanti_set::add_header(const TMask& msk, int num_inv, int tot_inv)
|
||||||
|
{
|
||||||
|
const TAnagrafica ditta(LF_NDITTE, prefix().get_codditta());
|
||||||
|
|
||||||
|
new_rec("0");
|
||||||
|
set(7, ditta.codice_fiscale());
|
||||||
|
set(8, ditta.partita_IVA());
|
||||||
|
|
||||||
|
if (ditta.giuridica())
|
||||||
|
{
|
||||||
|
set( 9, ditta.ragione_sociale());
|
||||||
|
set(10, ditta.comune_residenza());
|
||||||
|
set(11, ditta.provincia_residenza());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set(12, ditta.cognome());
|
||||||
|
set(13, ditta.nome());
|
||||||
|
set(14, ditta.sesso());
|
||||||
|
set(15, ditta.data_nascita());
|
||||||
|
set(16, ditta.comune_nascita());
|
||||||
|
set(17, ditta.provincia_nascita());
|
||||||
|
}
|
||||||
|
set(18, _anno);
|
||||||
|
|
||||||
|
if (tot_inv < 1) tot_inv = 1;
|
||||||
|
if (num_inv <= 0) num_inv = 1;
|
||||||
|
if (num_inv > tot_inv) num_inv = tot_inv;
|
||||||
|
set(20, num_inv);
|
||||||
|
set(21, tot_inv);
|
||||||
|
|
||||||
|
const TString& cofi = msk.get(F_INTER_COFI);
|
||||||
|
if (cofi.full())
|
||||||
|
{
|
||||||
|
set(22, cofi);
|
||||||
|
set(23, msk.get(F_INTER_CAF));
|
||||||
|
set(24, msk.get(F_INTER_COM));
|
||||||
|
set(25, msk.get(F_INTER_DATE));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
set(25, TDate()); // Svuota data impegno
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDati_rilevanti_set::add_footer()
|
||||||
|
{
|
||||||
|
TString f = row(0);
|
||||||
|
f.overwrite("9");
|
||||||
|
new_rec(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TDati_rilevanti_set::split(const TFilename& name, const TRecnotype maxalleg)
|
||||||
|
{
|
||||||
|
const TRecnotype totrec = items();
|
||||||
|
bool done = totrec <= maxalleg;
|
||||||
|
if (!done)
|
||||||
|
{
|
||||||
|
TString msg;
|
||||||
|
msg.format(FR("Spezzatura del file %s in blocchi da %d righe"), (const char*)name, maxalleg);
|
||||||
|
TProgind pi(totrec, msg);
|
||||||
|
|
||||||
|
TDati_rilevanti_set outset(_anno);
|
||||||
|
int f = 0;
|
||||||
|
for (TRecnotype r = 0; r < totrec; r++)
|
||||||
|
{
|
||||||
|
if (!pi.setstatus(r))
|
||||||
|
break; // Procedura interrotta dall'utente
|
||||||
|
outset.new_rec(row(r));
|
||||||
|
if (outset.items() >= maxalleg || r == totrec-1)
|
||||||
|
{
|
||||||
|
// Costruisce il nome del file di invio parziale, es: Spesometro00001_2.txt
|
||||||
|
TFilename outname = name;
|
||||||
|
const TString8 saved_ext = outname.ext();
|
||||||
|
outname.ext(""); outname << '_' << (++f);
|
||||||
|
outname.ext(saved_ext);
|
||||||
|
done = outset.save_as(outname);
|
||||||
|
if (done)
|
||||||
|
outset.destroy();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cantwrite_box(outname);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (f > 1)
|
||||||
|
warning_box(FR("Sono stati generati %d file nella cartella %s"), name.path());
|
||||||
|
}
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDati_rilevanti_set::init()
|
||||||
|
{
|
||||||
|
TDati_rilevanti_trc trc;
|
||||||
|
for (int i = 0; i <= 5; i++)
|
||||||
|
trc.create_fields(i, *this);
|
||||||
|
trc.create_fields(9, *this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TDati_rilevanti_set::TDati_rilevanti_set(const TFilename& file)
|
||||||
|
: TAS400_recordset("AS400(1800,1)"), _anno(2010)
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
if (load_file(file) && move_first())
|
||||||
|
{
|
||||||
|
const int anno = get(18).as_int();
|
||||||
|
if (anno > 2010)
|
||||||
|
_anno = anno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TDati_rilevanti_set::TDati_rilevanti_set(int anno)
|
||||||
|
: TAS400_recordset("AS400(1800,1)"), _anno(anno)
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TCofi_cache
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TObject* TCofi_cache::key2obj(const char* key)
|
||||||
|
{
|
||||||
|
TToken_string chiave(key);
|
||||||
|
const int fkey = chiave.get_char(0)=='C' ? 4 : 5;
|
||||||
|
const TString4 tipocf = chiave.get();
|
||||||
|
const TString16 code= chiave.get();
|
||||||
|
|
||||||
|
_clifo.setkey(fkey);
|
||||||
|
_clifo.zero();
|
||||||
|
_clifo.put(CLI_TIPOCF, tipocf);
|
||||||
|
if (fkey == 5)
|
||||||
|
_clifo.put(CLI_PAIV, code);
|
||||||
|
else
|
||||||
|
_clifo.put(CLI_COFI, code);
|
||||||
|
|
||||||
|
int err = _clifo.read();
|
||||||
|
if (err != NOERR && fkey == 5 && pi_check("IT", code))
|
||||||
|
{
|
||||||
|
_clifo.put(CLI_TIPOCF, tipocf);
|
||||||
|
_clifo.put(CLI_STATOPAIV, "IT");
|
||||||
|
_clifo.put(CLI_PAIV, code);
|
||||||
|
err = _clifo.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == NOERR)
|
||||||
|
return new TString80(_clifo.get(CLI_RAGSOC));
|
||||||
|
|
||||||
|
if (fkey == 5 && !pi_check("IT", code)) // cerco partite IVA estere
|
||||||
|
{
|
||||||
|
TString query;
|
||||||
|
query << "USE CLIFO SELECT PAIV=\"" << code << '"'
|
||||||
|
<< "\nFROM TIPOCF=" << tipocf
|
||||||
|
<< "\nTO TIPOCF=" << tipocf;
|
||||||
|
TISAM_recordset clifo(query);
|
||||||
|
if (clifo.move_first())
|
||||||
|
return new TString80(clifo.get(CLI_RAGSOC).as_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
_occas.put(OCC_CFPI, code);
|
||||||
|
if (_occas.read() == NOERR)
|
||||||
|
{
|
||||||
|
const TString& cfpi = _occas.get(fkey == 4 ? OCC_COFI : OCC_PAIV);
|
||||||
|
if (code == cfpi || cfpi.empty())
|
||||||
|
return new TString80(_occas.get(OCC_RAGSOC));
|
||||||
|
}
|
||||||
|
|
||||||
|
TString query;
|
||||||
|
query << "USE OCCAS SELECT ";
|
||||||
|
if (fkey == 4)
|
||||||
|
query << "COFI=\"" << code << '"';
|
||||||
|
else
|
||||||
|
query << "PAIV=\"" << code << '"';
|
||||||
|
TISAM_recordset occas(query);
|
||||||
|
if (occas.move_first())
|
||||||
|
return new TString80(occas.get(OCC_RAGSOC).as_string());
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TCofi_cache::cofi2ragsoc(char tipocf, const TString& cofi)
|
||||||
|
{
|
||||||
|
TString80 key;
|
||||||
|
key.format("CF|%c|%s", tipocf, (const char*)cofi);
|
||||||
|
const TString* ragsoc = (const TString*)objptr(key);
|
||||||
|
return ragsoc != NULL ? *ragsoc : EMPTY_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TCofi_cache::paiv2ragsoc(char tipocf, const TString& paiv)
|
||||||
|
{
|
||||||
|
TString80 key;
|
||||||
|
key.format("PI|%c|%s", tipocf, (const char*)paiv);
|
||||||
|
const TString* ragsoc = (const TString*)objptr(key);
|
||||||
|
return ragsoc != NULL ? *ragsoc : EMPTY_STRING;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TDati_rilevanti_rep
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TDati_rilevanti_rep::get_usr_val(const TString& name, TVariant& var) const
|
||||||
|
{
|
||||||
|
const TDati_rilevanti_set& set = *(TDati_rilevanti_set*)recordset();
|
||||||
|
const int tipo = set.rec_type()[0] - '0';
|
||||||
|
|
||||||
|
if (name == "ANNO")
|
||||||
|
{
|
||||||
|
var.set(set.anno());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "TIPO")
|
||||||
|
{
|
||||||
|
var.set(tipo);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "COFI")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: var = set.get("1.2"); break;
|
||||||
|
case 4: var = set.get("4.3"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "PAIV")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 2: var = set.get("2.2"); break;
|
||||||
|
case 4: var = set.get("4.2"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "RAGSOC")
|
||||||
|
{
|
||||||
|
char tipocf = 'C';
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 2: if (set.get("2.8").as_int() == 2) tipocf = 'F'; break;
|
||||||
|
default: break;
|
||||||
|
};
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: var = cofi2ragsoc(tipocf, set.get("1.2").as_string()); break;
|
||||||
|
case 2: var = paiv2ragsoc(tipocf, set.get("2.2").as_string()); break;
|
||||||
|
case 3:
|
||||||
|
var = set.get("3.8");
|
||||||
|
if (var.is_empty())
|
||||||
|
{
|
||||||
|
TString80 rs;
|
||||||
|
rs << set.get("3.2") << ' ' << set.get("3.3");
|
||||||
|
var = rs.trim();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
const TString16 paiv = set.get("4.2").as_string();
|
||||||
|
if (paiv.full())
|
||||||
|
{
|
||||||
|
var = paiv2ragsoc('C', paiv);
|
||||||
|
if (var.is_empty())
|
||||||
|
var = paiv2ragsoc('F', paiv);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TString16 cofi = set.get("4.3").as_string();
|
||||||
|
var = cofi2ragsoc('C', cofi);
|
||||||
|
if (var.is_empty())
|
||||||
|
var = paiv2ragsoc('F', cofi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
var = set.get("5.8");
|
||||||
|
if (var.is_empty())
|
||||||
|
{
|
||||||
|
TString80 rs;
|
||||||
|
rs << set.get("5.2") << ' ' << set.get("5.3");
|
||||||
|
var = rs.trim();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "DATAREG")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: var = set.get("1.3"); break;
|
||||||
|
case 2: var = set.get("2.3"); break;
|
||||||
|
case 3: var = set.get("3.12"); break;
|
||||||
|
case 4: var = set.get("4.4"); break;
|
||||||
|
case 5: var = set.get("5.12"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "NUMDOC")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 2: var = set.get("2.4"); break;
|
||||||
|
case 3: var = set.get("3.13"); break;
|
||||||
|
case 4: var = set.get("4.5"); break;
|
||||||
|
case 5: var = set.get("5.13"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "IMPORTO")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: var = set.get("1.5"); break;
|
||||||
|
case 2: var = set.get("2.6"); break;
|
||||||
|
case 3: var = set.get("3.15"); break;
|
||||||
|
case 4: var = set.get("4.6"); break;
|
||||||
|
case 5: var = set.get("5.14"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "IMPOSTA")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 2: var = set.get("2.7"); break;
|
||||||
|
case 3: var = set.get("3.16"); break;
|
||||||
|
case 4: var = set.get("4.7"); break;
|
||||||
|
case 5: var = set.get("5.15"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "DATARETT")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 4: var = set.get("4.8"); break;
|
||||||
|
case 5: var = set.get("5.16"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "NUMRETT")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 4: var = set.get("4.9"); break;
|
||||||
|
case 5: var = set.get("5.17"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "SIMPORTO")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 4: var = set.get("4.10"); break;
|
||||||
|
case 5: var = set.get("5.18"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "SIMPOSTA")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 4: var = set.get("4.11"); break;
|
||||||
|
case 5: var = set.get("5.19"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "MODPAG")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 1: var = set.get("1.4"); break;
|
||||||
|
case 2: var = set.get("2.5"); break;
|
||||||
|
case 3: var = set.get("3.14"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (name == "TIPOPE")
|
||||||
|
{
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 2: var = set.get("2.8"); break;
|
||||||
|
case 3: var = set.get("3.17"); break;
|
||||||
|
default: var.set_null(); break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return TReport::get_usr_val(name, var);
|
||||||
|
}
|
||||||
|
|
||||||
|
TDati_rilevanti_rep::TDati_rilevanti_rep(const TFilename& file)
|
||||||
|
{
|
||||||
|
load("fe0100");
|
||||||
|
|
||||||
|
TDati_rilevanti_set* set = new TDati_rilevanti_set(file);
|
||||||
|
|
||||||
|
// Elimina testata e coda
|
||||||
|
set->destroy(0);
|
||||||
|
set->destroy(set->items()-1);
|
||||||
|
|
||||||
|
set_recordset(set);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
131
fe/felib.h
Normal file
131
fe/felib.h
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
#ifndef __FELIB_H__
|
||||||
|
#define __FELIB_H__
|
||||||
|
|
||||||
|
#ifndef __TEXTSET_H__
|
||||||
|
#include <textset.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TAnagrafica
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TAnagrafica : public TObject
|
||||||
|
{
|
||||||
|
char _tipo; // F o G
|
||||||
|
TString16 _cofi, _paiv;
|
||||||
|
TString80 _ragsoc;
|
||||||
|
TString4 _com_nasc, _com_res;
|
||||||
|
TString80 _loc_res, _ind_res;
|
||||||
|
TDate _data_nasc;
|
||||||
|
int _allegato, _stato_estero;
|
||||||
|
|
||||||
|
TAnagrafica& operator =(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
|
||||||
|
TAnagrafica(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
|
||||||
|
protected:
|
||||||
|
void build_ind_res(const TRectype& rec, const char* ind, const char* civ);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual bool ok() const { return _tipo=='F' || _tipo == 'G'; }
|
||||||
|
bool fisica() const { return _tipo == 'F'; }
|
||||||
|
bool giuridica() const { return _tipo == 'G'; }
|
||||||
|
|
||||||
|
const TString& codice_fiscale() const { return _cofi; }
|
||||||
|
const TString& partita_IVA() const { return _paiv; }
|
||||||
|
|
||||||
|
const TString& ragione_sociale() const { return _ragsoc; }
|
||||||
|
const TString& cognome() const { return _ragsoc.left(24); }
|
||||||
|
const TString& nome() const { CHECK(fisica(), "Non chiedere nome giuridico!"); return _ragsoc.mid(30,20); }
|
||||||
|
char sesso() const { CHECK(fisica(), "Solo sesso fisico!"); return (_cofi[9] >= '4') ? 'F' : 'M'; }
|
||||||
|
const TDate& data_nascita() const { return _data_nasc; }
|
||||||
|
int stato_estero() const { return _stato_estero; }
|
||||||
|
int inserimento_in_allegato() const { return _allegato; }
|
||||||
|
|
||||||
|
const TString& comune_nascita() const;
|
||||||
|
const TString& provincia_nascita() const;
|
||||||
|
const TString& comune_residenza() const;
|
||||||
|
const TString& provincia_residenza() const;
|
||||||
|
const TString& localita_residenza() const { return _loc_res; }
|
||||||
|
const TString& indirizzo_residenza() const { return _ind_res; }
|
||||||
|
|
||||||
|
bool init(const TRectype& rec);
|
||||||
|
bool init(int num, const TString& codice) { return init(cache().get(num, codice)); }
|
||||||
|
bool init(int num, long codice) { return init(cache().get(num, codice)); }
|
||||||
|
bool init(int num, char tipo, long codice);
|
||||||
|
bool init(char tipo, long codice, const TString& ocfpi);
|
||||||
|
|
||||||
|
TAnagrafica() : _tipo('\0') {}
|
||||||
|
TAnagrafica(int lognum, const TString& codice) { init(lognum, codice); }
|
||||||
|
TAnagrafica(int lognum, long codice) { init(lognum, codice); }
|
||||||
|
TAnagrafica(int lognum, char tipo, long codice) { init(lognum, tipo, codice); }
|
||||||
|
TAnagrafica(char tipo, long codice, const TString& ocfpi) { init(tipo, codice, ocfpi); }
|
||||||
|
TAnagrafica(const TRectype& rec) { init(rec); }
|
||||||
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TDati_rilevanti_set
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TDati_rilevanti_set : public TAS400_recordset
|
||||||
|
{
|
||||||
|
int _anno;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool set_field(const TAS400_column_info& fi, const TVariant& var);
|
||||||
|
virtual const TVariant& get_field(const TAS400_column_info& fi) const;
|
||||||
|
|
||||||
|
void init();
|
||||||
|
bool set_val(int n, const TVariant& v) { return TAS400_recordset::set(n-1, v); }
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool set(unsigned int n, const TVariant& v) { return set_val(n, v); }
|
||||||
|
bool set(unsigned int n, const TString& v) { return set_val(n, v); }
|
||||||
|
bool set(unsigned int n, char v) { TString4 str; str << v; return set_val(n, str); }
|
||||||
|
bool set(unsigned int n, int v) { return set_val(n, long(v)); }
|
||||||
|
bool set(unsigned int n, const real& v) { return set_val(n, v); }
|
||||||
|
bool set(unsigned int n, const TDate& v) { return set_val(n, v); }
|
||||||
|
void add_header(const TMask& msk, int num_inv = 1, int tot_inv = 1);
|
||||||
|
void add_footer();
|
||||||
|
bool split(const TFilename& name, const TRecnotype maxalleg = 15000);
|
||||||
|
int anno() const { return _anno; }
|
||||||
|
|
||||||
|
TDati_rilevanti_set(int anno);
|
||||||
|
TDati_rilevanti_set(const TFilename& file);
|
||||||
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TDati_rilevanti_rep
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TCofi_cache : public TCache
|
||||||
|
{
|
||||||
|
TLocalisamfile _clifo, _occas;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual TObject* key2obj(const char* key);
|
||||||
|
|
||||||
|
public:
|
||||||
|
const TString& cofi2ragsoc(char tipocf, const TString& cofi);
|
||||||
|
const TString& paiv2ragsoc(char tipocf, const TString& paiv);
|
||||||
|
TCofi_cache() : _clifo(LF_CLIFO), _occas(LF_OCCAS) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
class TDati_rilevanti_rep : public TReport
|
||||||
|
{
|
||||||
|
TCofi_cache _cofi;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
const TString& cofi2ragsoc(char tipocf, const TString& cofi) const
|
||||||
|
{ return ((TDati_rilevanti_rep*)this)->_cofi.cofi2ragsoc(tipocf, cofi); }
|
||||||
|
|
||||||
|
const TString& paiv2ragsoc(char tipocf, const TString& cofi) const
|
||||||
|
{ return ((TDati_rilevanti_rep*)this)->_cofi.paiv2ragsoc(tipocf, cofi); }
|
||||||
|
|
||||||
|
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TDati_rilevanti_rep(const TFilename& file);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user