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:
guy 2014-07-30 12:58:29 +00:00
parent 3de99221c0
commit 1fdd0d560e
2 changed files with 110 additions and 60 deletions

View File

@ -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();
} }

View File

@ -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