From 1fdd0d560e4dfff6a1a3f7f5b6a00c2266f827d3 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 30 Jul 2014 12:58:29 +0000 Subject: [PATCH] Corretto calcolo prospetto SS git-svn-id: svn://10.65.10.50/branches/R_10_00@22981 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/777100.cpp | 162 +++++++++++++++++++++++++++++++----------------- m770/77qla.frm | 8 ++- 2 files changed, 110 insertions(+), 60 deletions(-) diff --git a/m770/777100.cpp b/m770/777100.cpp index 9c5d910f6..15add5269 100755 --- a/m770/777100.cpp +++ b/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(); } diff --git a/m770/77qla.frm b/m770/77qla.frm index 785c56121..990a2d5df 100755 --- a/m770/77qla.frm +++ b/m770/77qla.frm @@ -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