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
138
m770/777100.cpp
138
m770/777100.cpp
@ -211,8 +211,8 @@ class TTrasferimento770 : public TObject
|
|||||||
bool _save_headers;
|
bool _save_headers;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool riepiloga_ss(const TRecord770& rec, TArray& riep_ss) const;
|
void riepiloga_ss(const TRecord770& rec, TArray& riep_ss) const;
|
||||||
bool riepiloga_sx(const TRecord770& rec, TArray& riep_sx) const;
|
void riepiloga_sx(const TRecord770& rec, TArray& riep_sx) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool open(const char* path = "", char mode = 'r', int volume = 0);
|
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();
|
const TString& prov = cf.get();
|
||||||
if (prov == "EE") // Il 770 non gradisce la provincia EE associata agli stati esteri
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,6 +556,42 @@ TRecnotype TForm770::trasfer(long codditta, TTrasferimento770& file, char rectyp
|
|||||||
int err = first(); // Deve sempre tornare NOERR
|
int err = first(); // Deve sempre tornare NOERR
|
||||||
for (; err == NOERR; err = next())
|
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);
|
transfer_section(body, rigo, rec, file);
|
||||||
rigo++;
|
rigo++;
|
||||||
if (rigo > rpm)
|
if (rigo > rpm)
|
||||||
@ -880,7 +918,7 @@ TTracciato770::~TTracciato770()
|
|||||||
|
|
||||||
const TTracciato770& TTracciati770::tracciato(char tipo)
|
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';
|
const int pos = tipo - 'A';
|
||||||
TTracciato770* trc = (TTracciato770*)_trc.objptr(pos);
|
TTracciato770* trc = (TTracciato770*)_trc.objptr(pos);
|
||||||
if (trc == NULL)
|
if (trc == NULL)
|
||||||
@ -1396,7 +1434,7 @@ bool TTrasferimento770::append_record_b()
|
|||||||
rec.set(47, rec_anagiu.get(ANG_SITSOC));
|
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
|
rec.set(76, 0); // Comunicazioni relative a certificazioni lavoro dipendente
|
||||||
const int autonomi = conta_certificazioni();
|
const int autonomi = conta_certificazioni();
|
||||||
const bool prosp_st = casella_prospetto_st();
|
const bool prosp_st = casella_prospetto_st();
|
||||||
@ -1417,6 +1455,8 @@ bool TTrasferimento770::append_record_b()
|
|||||||
key.cut(0) << "F|" << rec_nditte.get(NDT_RAPPR);
|
key.cut(0) << "F|" << rec_nditte.get(NDT_RAPPR);
|
||||||
const TRectype& rec_rap = _cache770.get(LF_ANAG, key);
|
const TRectype& rec_rap = _cache770.get(LF_ANAG, key);
|
||||||
const TRectype& rec_rap_fis = _cache770.get(LF_ANAGFIS, key.get(1));
|
const TRectype& rec_rap_fis = _cache770.get(LF_ANAGFIS, key.get(1));
|
||||||
|
if (!rec_rap_fis.empty())
|
||||||
|
{
|
||||||
key.cut(0) << "|" << rec_rap_fis.get(ANF_COMNASC);
|
key.cut(0) << "|" << rec_rap_fis.get(ANF_COMNASC);
|
||||||
const TRectype& rec_com_nas = _cache770.get(LF_COMUNI, key);
|
const TRectype& rec_com_nas = _cache770.get(LF_COMUNI, key);
|
||||||
key.cut(0) << "|" << rec_rap.get(ANA_COMRES);
|
key.cut(0) << "|" << rec_rap.get(ANA_COMRES);
|
||||||
@ -1429,6 +1469,9 @@ bool TTrasferimento770::append_record_b()
|
|||||||
rec.set(134, rec_rap_fis.get_date(ANF_DATANASC));
|
rec.set(134, rec_rap_fis.get_date(ANF_DATANASC));
|
||||||
rec.set(135, rec_com_nas.get(COM_DENCOM));
|
rec.set(135, rec_com_nas.get(COM_DENCOM));
|
||||||
rec.set(136, rec_com_nas.get(COM_PROVCOM));
|
rec.set(136, rec_com_nas.get(COM_PROVCOM));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cantread_box("dati del legale rappresentante");
|
||||||
|
|
||||||
// Ignoro la parte "estera"
|
// Ignoro la parte "estera"
|
||||||
|
|
||||||
@ -1450,7 +1493,15 @@ long TTrasferimento770::append_quadro(const char* quadro, long codditta, TProgin
|
|||||||
return items;
|
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;
|
TString8 code;
|
||||||
real val;
|
real val;
|
||||||
@ -1458,33 +1509,20 @@ bool TTrasferimento770::riepiloga_ss(const TRecord770& rec, TArray& riep_ss) con
|
|||||||
{
|
{
|
||||||
const TString& key = code.right(3);
|
const TString& key = code.right(3);
|
||||||
const int num = atoi(key);
|
const int num = atoi(key);
|
||||||
if (num >= 26 && num <= 31)
|
if (num >= 27 && num <= 35)
|
||||||
{
|
{
|
||||||
const int idx = num-26;
|
real& r = real_at(riep_ss, num-27); // AU_27-AU_47 -> SS003001
|
||||||
real* r = (real*)riep_ss.objptr(idx);
|
r += val;
|
||||||
if (r == NULL)
|
|
||||||
{
|
|
||||||
r = new real;
|
|
||||||
riep_ss.add(r, idx);
|
|
||||||
}
|
|
||||||
*r += val;
|
|
||||||
} else
|
} else
|
||||||
if (num >= 43 && num <= 48)
|
if (num >= 47 && num <= 55)
|
||||||
{
|
{
|
||||||
const int idx = num-43;
|
real& r = real_at(riep_ss, num-47);
|
||||||
real* r = (real*)riep_ss.objptr(idx);
|
r -= val;
|
||||||
if (r == NULL)
|
|
||||||
{
|
|
||||||
r = new real;
|
|
||||||
riep_ss.add(r, idx);
|
|
||||||
}
|
|
||||||
*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;
|
TString8 code;
|
||||||
real val;
|
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));
|
const int col = atoi(code.mid(5,3));
|
||||||
if (rig >= 2 && rig <= 25 && col >= 4 && col <= 5)
|
if (rig >= 2 && rig <= 25 && col >= 4 && col <= 5)
|
||||||
{
|
{
|
||||||
real* r = (real*)riep_sx.objptr(5); // SX004005
|
real& r = real_at(riep_sx, 5); // SX004005
|
||||||
if (r == NULL)
|
r += val;
|
||||||
{
|
|
||||||
r = new real;
|
|
||||||
riep_sx.add(r, 5);
|
|
||||||
}
|
|
||||||
*r += val;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return !riep_sx.empty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1600,21 +1632,22 @@ bool TTrasferimento770::split(const char* path)
|
|||||||
}
|
}
|
||||||
outfile << recf;
|
outfile << recf;
|
||||||
totale['F'-'A']++; // Praticamente vale sempre 1
|
totale['F'-'A']++; // Praticamente vale sempre 1
|
||||||
riep_sx.destroy();
|
riep_sx.destroy(); // La prossima volta non deve salvare nulla
|
||||||
}
|
}
|
||||||
|
|
||||||
outfile << rec;
|
outfile << rec;
|
||||||
written++;
|
written++;
|
||||||
|
|
||||||
|
// Tengo traccia degli eventuali riepiloghi
|
||||||
if (_save_headers)
|
if (_save_headers)
|
||||||
{
|
{
|
||||||
totale[tipo_rec - 'A']++;
|
totale[tipo_rec - 'A']++;
|
||||||
|
switch (tipo_rec)
|
||||||
if (tipo_rec == 'E')
|
{
|
||||||
riepiloga_sx(rec, riep_sx);
|
case 'E': riepiloga_sx(rec, riep_sx); break;
|
||||||
|
case 'H': riepiloga_ss(rec, riep_ss); break;
|
||||||
if (tipo_rec == 'H')
|
default : break;
|
||||||
riepiloga_ss(rec, riep_ss);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (written >= records_per_disk)
|
if (written >= records_per_disk)
|
||||||
@ -1625,7 +1658,7 @@ bool TTrasferimento770::split(const char* path)
|
|||||||
if (_save_headers)
|
if (_save_headers)
|
||||||
{
|
{
|
||||||
// Compila record di riepilogo SS
|
// Compila record di riepilogo SS
|
||||||
if (riep_ss.items() > 0)
|
if (!riep_ss.empty())
|
||||||
{
|
{
|
||||||
rec.tipo_record('J');
|
rec.tipo_record('J');
|
||||||
rec.set(2, cod_fis_dic());
|
rec.set(2, cod_fis_dic());
|
||||||
@ -1634,10 +1667,10 @@ bool TTrasferimento770::split(const char* path)
|
|||||||
FOR_EACH_ARRAY_ITEM(riep_ss, i, obj)
|
FOR_EACH_ARRAY_ITEM(riep_ss, i, obj)
|
||||||
{
|
{
|
||||||
const real* val = (const real*)obj;
|
const real* val = (const real*)obj;
|
||||||
if (val != NULL)
|
if (val != NULL && !val->is_zero())
|
||||||
{
|
{
|
||||||
TString8 code;
|
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);
|
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();
|
TFilename name = of.get();
|
||||||
if (!name.exist())
|
if (!name.exist())
|
||||||
return error_box("Il percorso non e' valido");
|
return cantread_box(name);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1714,6 +1747,7 @@ bool TTransfer770_msk::on_field_event(TOperable_field& of, TField_event fe, long
|
|||||||
|
|
||||||
TTransfer770_msk::TTransfer770_msk() : TAutomask("777100a")
|
TTransfer770_msk::TTransfer770_msk() : TAutomask("777100a")
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
int anno = ini_get_int(CONFIG_STUDIO, "77", "AnnoDic");
|
int anno = ini_get_int(CONFIG_STUDIO, "77", "AnnoDic");
|
||||||
if (anno <= 0)
|
if (anno <= 0)
|
||||||
{
|
{
|
||||||
@ -1721,6 +1755,8 @@ TTransfer770_msk::TTransfer770_msk() : TAutomask("777100a")
|
|||||||
anno = oggi.year()-1;
|
anno = oggi.year()-1;
|
||||||
}
|
}
|
||||||
set(F_ANNO, anno);
|
set(F_ANNO, anno);
|
||||||
|
*/
|
||||||
|
set(F_ANNO, ANNO_DIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TTransfer770_app : public TSkeleton_application
|
class TTransfer770_app : public TSkeleton_application
|
||||||
@ -1773,7 +1809,17 @@ void TTransfer770_app::main_loop()
|
|||||||
else
|
else
|
||||||
tmp = m.get(F_PATH);
|
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();
|
t.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,9 +125,8 @@ END
|
|||||||
|
|
||||||
STRINGA 12
|
STRINGA 12
|
||||||
BEGIN
|
BEGIN
|
||||||
KEY "CODICE COMUNE"
|
KEY "CODICE COMUNE SOLO SE CAUSALE=N"
|
||||||
PROMPT 78 5 ""
|
PROMPT 78 5 ""
|
||||||
FIELD 218@->COMRES
|
|
||||||
SPECIAL STRING TRASFER "AU001011" "AN"
|
SPECIAL STRING TRASFER "AU001011" "AN"
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -163,6 +162,8 @@ BEGIN
|
|||||||
PROMPT 90 7 ""
|
PROMPT 90 7 ""
|
||||||
FIELD 216@->COFIEST
|
FIELD 216@->COFIEST
|
||||||
SPECIAL STRING TRASFER "AU001015" "AN"
|
SPECIAL STRING TRASFER "AU001015" "AN"
|
||||||
|
MESSAGE EMPTY HIDE,15@
|
||||||
|
MESSAGE SHOW,15@
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGA 16
|
STRINGA 16
|
||||||
@ -170,6 +171,7 @@ BEGIN
|
|||||||
KEY "LOCALITA' ESTERA DI RES."
|
KEY "LOCALITA' ESTERA DI RES."
|
||||||
PROMPT 75 7 ""
|
PROMPT 75 7 ""
|
||||||
SPECIAL STRING TRASFER "AU001016" "AN"
|
SPECIAL STRING TRASFER "AU001016" "AN"
|
||||||
|
GROUP 15
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGA 17
|
STRINGA 17
|
||||||
@ -177,6 +179,7 @@ BEGIN
|
|||||||
KEY "INDIRIZZO DI RES. ESTERO"
|
KEY "INDIRIZZO DI RES. ESTERO"
|
||||||
PROMPT 75 7 ""
|
PROMPT 75 7 ""
|
||||||
SPECIAL STRING TRASFER "AU001017" "AN"
|
SPECIAL STRING TRASFER "AU001017" "AN"
|
||||||
|
GROUP 15
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMERO 18
|
NUMERO 18
|
||||||
@ -185,6 +188,7 @@ BEGIN
|
|||||||
PROMPT 75 7 ""
|
PROMPT 75 7 ""
|
||||||
FIELD 216@->STATORES
|
FIELD 216@->STATORES
|
||||||
SPECIAL STRING TRASFER "AU001018" "NU"
|
SPECIAL STRING TRASFER "AU001018" "NU"
|
||||||
|
GROUP 15
|
||||||
END
|
END
|
||||||
|
|
||||||
STRINGA 19
|
STRINGA 19
|
||||||
|
Loading…
x
Reference in New Issue
Block a user