Corretto calcolo prospetto SS
git-svn-id: svn://10.65.10.50/branches/R_10_00@22981 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
3de99221c0
commit
1fdd0d560e
162
m770/777100.cpp
162
m770/777100.cpp
@ -211,8 +211,8 @@ class TTrasferimento770 : public TObject
|
||||
bool _save_headers;
|
||||
|
||||
protected:
|
||||
bool riepiloga_ss(const TRecord770& rec, TArray& riep_ss) const;
|
||||
bool riepiloga_sx(const TRecord770& rec, TArray& riep_sx) const;
|
||||
void riepiloga_ss(const TRecord770& rec, TArray& riep_ss) const;
|
||||
void riepiloga_sx(const TRecord770& rec, TArray& riep_sx) const;
|
||||
|
||||
public:
|
||||
bool open(const char* path = "", char mode = 'r', int volume = 0);
|
||||
@ -272,7 +272,9 @@ bool TForm770::validate(TForm_item &cf, TToken_string &s)
|
||||
{
|
||||
const TString& prov = cf.get();
|
||||
if (prov == "EE") // Il 770 non gradisce la provincia EE associata agli stati esteri
|
||||
cf.set("");
|
||||
cf.set(""); else
|
||||
if (prov == "FO") // Ci sono ancora vecchie province :-(
|
||||
cf.set("FC");
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -554,6 +556,42 @@ TRecnotype TForm770::trasfer(long codditta, TTrasferimento770& file, char rectyp
|
||||
int err = first(); // Deve sempre tornare NOERR
|
||||
for (; err == NOERR; err = next())
|
||||
{
|
||||
// Normalizza cognome e nome delle persone fisiche
|
||||
if (cur.relation()->log2ind(LF_ANAG) > 0)
|
||||
{
|
||||
TLocalisamfile& anag = cur.file(-216); // Anagrafica percipiente
|
||||
const TString& ragsoc = anag.get(ANA_RAGSOC);
|
||||
const TString& nome = ragsoc.mid(30);
|
||||
if (nome.blank() && anag.get_char(ANA_TIPOA) == 'F')
|
||||
{
|
||||
TToken_string rs(ragsoc, ' '); rs.strip_double_spaces();
|
||||
const int pezzi = rs.items();
|
||||
|
||||
int spc = 0;
|
||||
if (pezzi >= 4)
|
||||
{
|
||||
int spc = rs.find(' ', 0);
|
||||
spc = rs.find(' ', spc+1);
|
||||
}
|
||||
else
|
||||
{
|
||||
spc = rs.find(' ', 3);
|
||||
if (spc <= 5 && rs.starts_with("DE", true) && pezzi >= 3)
|
||||
spc = rs.find(' ', spc+1);
|
||||
if (spc < 0)
|
||||
spc = rs.find(' ', 0);
|
||||
}
|
||||
if (spc >= 2)
|
||||
{
|
||||
const TString80 nome = rs.mid(spc+1);
|
||||
rs.cut(spc); rs.overwrite(nome, 30, 20);
|
||||
anag.put(ANA_RAGSOC, rs);
|
||||
if (pezzi == 2) // Salvo solo quando sono sicuro!
|
||||
anag.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
transfer_section(body, rigo, rec, file);
|
||||
rigo++;
|
||||
if (rigo > rpm)
|
||||
@ -880,7 +918,7 @@ TTracciato770::~TTracciato770()
|
||||
|
||||
const TTracciato770& TTracciati770::tracciato(char tipo)
|
||||
{
|
||||
CHECK(tipo >= 'A' && tipo <= 'Z');
|
||||
CHECK(tipo >= 'A' && tipo <= 'Z', "Tipo record non valido");
|
||||
const int pos = tipo - 'A';
|
||||
TTracciato770* trc = (TTracciato770*)_trc.objptr(pos);
|
||||
if (trc == NULL)
|
||||
@ -1396,7 +1434,7 @@ bool TTrasferimento770::append_record_b()
|
||||
rec.set(47, rec_anagiu.get(ANG_SITSOC));
|
||||
}
|
||||
|
||||
rec.set(75, 1); // Reazione della dichiarazione (sezione I)
|
||||
rec.set(75, 1); // Redazione della dichiarazione (sezione I)
|
||||
rec.set(76, 0); // Comunicazioni relative a certificazioni lavoro dipendente
|
||||
const int autonomi = conta_certificazioni();
|
||||
const bool prosp_st = casella_prospetto_st();
|
||||
@ -1417,18 +1455,23 @@ bool TTrasferimento770::append_record_b()
|
||||
key.cut(0) << "F|" << rec_nditte.get(NDT_RAPPR);
|
||||
const TRectype& rec_rap = _cache770.get(LF_ANAG, key);
|
||||
const TRectype& rec_rap_fis = _cache770.get(LF_ANAGFIS, key.get(1));
|
||||
key.cut(0) << "|" << rec_rap_fis.get(ANF_COMNASC);
|
||||
const TRectype& rec_com_nas = _cache770.get(LF_COMUNI, key);
|
||||
key.cut(0) << "|" << rec_rap.get(ANA_COMRES);
|
||||
const TRectype& rec_com_res = _cache770.get(LF_COMUNI, key);
|
||||
rec.set(126, rec_rap.get(ANA_COFI));
|
||||
rec.set(127, rec_nditte.get(NDT_CARRAPP));
|
||||
rec.set(131, rec_rap.get(ANA_RAGSOC).left(24));
|
||||
rec.set(132, rec_rap.get(ANA_RAGSOC).mid(30, 20));
|
||||
rec.set(133, rec_rap_fis.get(ANF_SESSO));
|
||||
rec.set(134, rec_rap_fis.get_date(ANF_DATANASC));
|
||||
rec.set(135, rec_com_nas.get(COM_DENCOM));
|
||||
rec.set(136, rec_com_nas.get(COM_PROVCOM));
|
||||
if (!rec_rap_fis.empty())
|
||||
{
|
||||
key.cut(0) << "|" << rec_rap_fis.get(ANF_COMNASC);
|
||||
const TRectype& rec_com_nas = _cache770.get(LF_COMUNI, key);
|
||||
key.cut(0) << "|" << rec_rap.get(ANA_COMRES);
|
||||
const TRectype& rec_com_res = _cache770.get(LF_COMUNI, key);
|
||||
rec.set(126, rec_rap.get(ANA_COFI));
|
||||
rec.set(127, rec_nditte.get(NDT_CARRAPP));
|
||||
rec.set(131, rec_rap.get(ANA_RAGSOC).left(24));
|
||||
rec.set(132, rec_rap.get(ANA_RAGSOC).mid(30, 20));
|
||||
rec.set(133, rec_rap_fis.get(ANF_SESSO));
|
||||
rec.set(134, rec_rap_fis.get_date(ANF_DATANASC));
|
||||
rec.set(135, rec_com_nas.get(COM_DENCOM));
|
||||
rec.set(136, rec_com_nas.get(COM_PROVCOM));
|
||||
}
|
||||
else
|
||||
cantread_box("dati del legale rappresentante");
|
||||
|
||||
// Ignoro la parte "estera"
|
||||
|
||||
@ -1450,7 +1493,15 @@ long TTrasferimento770::append_quadro(const char* quadro, long codditta, TProgin
|
||||
return items;
|
||||
}
|
||||
|
||||
bool TTrasferimento770::riepiloga_ss(const TRecord770& rec, TArray& riep_ss) const
|
||||
static real& real_at(TArray& riep, int idx)
|
||||
{
|
||||
real* r = (real*)riep.objptr(idx);
|
||||
if (r == NULL)
|
||||
riep.add(r = new real, idx);
|
||||
return *r;
|
||||
}
|
||||
|
||||
void TTrasferimento770::riepiloga_ss(const TRecord770& rec, TArray& riep_ss) const
|
||||
{
|
||||
TString8 code;
|
||||
real val;
|
||||
@ -1458,33 +1509,20 @@ bool TTrasferimento770::riepiloga_ss(const TRecord770& rec, TArray& riep_ss) con
|
||||
{
|
||||
const TString& key = code.right(3);
|
||||
const int num = atoi(key);
|
||||
if (num >= 26 && num <= 31)
|
||||
if (num >= 27 && num <= 35)
|
||||
{
|
||||
const int idx = num-26;
|
||||
real* r = (real*)riep_ss.objptr(idx);
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new real;
|
||||
riep_ss.add(r, idx);
|
||||
}
|
||||
*r += val;
|
||||
real& r = real_at(riep_ss, num-27); // AU_27-AU_47 -> SS003001
|
||||
r += val;
|
||||
} else
|
||||
if (num >= 43 && num <= 48)
|
||||
if (num >= 47 && num <= 55)
|
||||
{
|
||||
const int idx = num-43;
|
||||
real* r = (real*)riep_ss.objptr(idx);
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new real;
|
||||
riep_ss.add(r, idx);
|
||||
}
|
||||
*r -= val;
|
||||
real& r = real_at(riep_ss, num-47);
|
||||
r -= val;
|
||||
}
|
||||
}
|
||||
return !riep_ss.empty();
|
||||
}
|
||||
|
||||
bool TTrasferimento770::riepiloga_sx(const TRecord770& rec, TArray& riep_sx) const
|
||||
void TTrasferimento770::riepiloga_sx(const TRecord770& rec, TArray& riep_sx) const
|
||||
{
|
||||
TString8 code;
|
||||
real val;
|
||||
@ -1494,16 +1532,10 @@ bool TTrasferimento770::riepiloga_sx(const TRecord770& rec, TArray& riep_sx) con
|
||||
const int col = atoi(code.mid(5,3));
|
||||
if (rig >= 2 && rig <= 25 && col >= 4 && col <= 5)
|
||||
{
|
||||
real* r = (real*)riep_sx.objptr(5); // SX004005
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new real;
|
||||
riep_sx.add(r, 5);
|
||||
}
|
||||
*r += val;
|
||||
real& r = real_at(riep_sx, 5); // SX004005
|
||||
r += val;
|
||||
}
|
||||
}
|
||||
return !riep_sx.empty();
|
||||
}
|
||||
|
||||
|
||||
@ -1600,21 +1632,22 @@ bool TTrasferimento770::split(const char* path)
|
||||
}
|
||||
outfile << recf;
|
||||
totale['F'-'A']++; // Praticamente vale sempre 1
|
||||
riep_sx.destroy();
|
||||
riep_sx.destroy(); // La prossima volta non deve salvare nulla
|
||||
}
|
||||
|
||||
outfile << rec;
|
||||
written++;
|
||||
|
||||
// Tengo traccia degli eventuali riepiloghi
|
||||
if (_save_headers)
|
||||
{
|
||||
totale[tipo_rec - 'A']++;
|
||||
|
||||
if (tipo_rec == 'E')
|
||||
riepiloga_sx(rec, riep_sx);
|
||||
|
||||
if (tipo_rec == 'H')
|
||||
riepiloga_ss(rec, riep_ss);
|
||||
switch (tipo_rec)
|
||||
{
|
||||
case 'E': riepiloga_sx(rec, riep_sx); break;
|
||||
case 'H': riepiloga_ss(rec, riep_ss); break;
|
||||
default : break;
|
||||
}
|
||||
}
|
||||
|
||||
if (written >= records_per_disk)
|
||||
@ -1625,7 +1658,7 @@ bool TTrasferimento770::split(const char* path)
|
||||
if (_save_headers)
|
||||
{
|
||||
// Compila record di riepilogo SS
|
||||
if (riep_ss.items() > 0)
|
||||
if (!riep_ss.empty())
|
||||
{
|
||||
rec.tipo_record('J');
|
||||
rec.set(2, cod_fis_dic());
|
||||
@ -1634,10 +1667,10 @@ bool TTrasferimento770::split(const char* path)
|
||||
FOR_EACH_ARRAY_ITEM(riep_ss, i, obj)
|
||||
{
|
||||
const real* val = (const real*)obj;
|
||||
if (val != NULL)
|
||||
if (val != NULL && !val->is_zero())
|
||||
{
|
||||
TString8 code;
|
||||
code.format("SS003%03d", i+1); // i=0 -> SS0003001 -> AUXXX026-AUXXX043
|
||||
code.format("SS003%03d", i+1); // i=0 -> SS0003001 -> AUXXX027-AUXXX047
|
||||
rec.np_put(code, *val);
|
||||
}
|
||||
}
|
||||
@ -1703,7 +1736,7 @@ bool TTransfer770_msk::on_field_event(TOperable_field& of, TField_event fe, long
|
||||
{
|
||||
TFilename name = of.get();
|
||||
if (!name.exist())
|
||||
return error_box("Il percorso non e' valido");
|
||||
return cantread_box(name);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -1714,6 +1747,7 @@ bool TTransfer770_msk::on_field_event(TOperable_field& of, TField_event fe, long
|
||||
|
||||
TTransfer770_msk::TTransfer770_msk() : TAutomask("777100a")
|
||||
{
|
||||
/*
|
||||
int anno = ini_get_int(CONFIG_STUDIO, "77", "AnnoDic");
|
||||
if (anno <= 0)
|
||||
{
|
||||
@ -1721,6 +1755,8 @@ TTransfer770_msk::TTransfer770_msk() : TAutomask("777100a")
|
||||
anno = oggi.year()-1;
|
||||
}
|
||||
set(F_ANNO, anno);
|
||||
*/
|
||||
set(F_ANNO, ANNO_DIC);
|
||||
}
|
||||
|
||||
class TTransfer770_app : public TSkeleton_application
|
||||
@ -1773,7 +1809,17 @@ void TTransfer770_app::main_loop()
|
||||
else
|
||||
tmp = m.get(F_PATH);
|
||||
|
||||
t.split(tmp);
|
||||
if (t.split(tmp))
|
||||
{
|
||||
tmp.add(t.default_name());
|
||||
TString msg; msg << TR("E' stato generato il file ") << tmp;
|
||||
xvt_dm_popup_message(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp.add(t.default_name());
|
||||
cantwrite_box(tmp);
|
||||
}
|
||||
t.remove();
|
||||
}
|
||||
|
||||
|
@ -125,9 +125,8 @@ END
|
||||
|
||||
STRINGA 12
|
||||
BEGIN
|
||||
KEY "CODICE COMUNE"
|
||||
KEY "CODICE COMUNE SOLO SE CAUSALE=N"
|
||||
PROMPT 78 5 ""
|
||||
FIELD 218@->COMRES
|
||||
SPECIAL STRING TRASFER "AU001011" "AN"
|
||||
END
|
||||
|
||||
@ -163,6 +162,8 @@ BEGIN
|
||||
PROMPT 90 7 ""
|
||||
FIELD 216@->COFIEST
|
||||
SPECIAL STRING TRASFER "AU001015" "AN"
|
||||
MESSAGE EMPTY HIDE,15@
|
||||
MESSAGE SHOW,15@
|
||||
END
|
||||
|
||||
STRINGA 16
|
||||
@ -170,6 +171,7 @@ BEGIN
|
||||
KEY "LOCALITA' ESTERA DI RES."
|
||||
PROMPT 75 7 ""
|
||||
SPECIAL STRING TRASFER "AU001016" "AN"
|
||||
GROUP 15
|
||||
END
|
||||
|
||||
STRINGA 17
|
||||
@ -177,6 +179,7 @@ BEGIN
|
||||
KEY "INDIRIZZO DI RES. ESTERO"
|
||||
PROMPT 75 7 ""
|
||||
SPECIAL STRING TRASFER "AU001017" "AN"
|
||||
GROUP 15
|
||||
END
|
||||
|
||||
NUMERO 18
|
||||
@ -185,6 +188,7 @@ BEGIN
|
||||
PROMPT 75 7 ""
|
||||
FIELD 216@->STATORES
|
||||
SPECIAL STRING TRASFER "AU001018" "NU"
|
||||
GROUP 15
|
||||
END
|
||||
|
||||
STRINGA 19
|
||||
|
Loading…
x
Reference in New Issue
Block a user