diff --git a/cg/cg0200.h b/cg/cg0200.h index 0aec1ed9d..06acccd38 100755 --- a/cg/cg0200.h +++ b/cg/cg0200.h @@ -164,6 +164,8 @@ #define F_MAIL 303 #define DLG_OGGETTI 304 #define F_DIRTY 305 +#define F_BYMAIL 306 +#define F_DOCMAIL 307 ////////////////////////////////////// diff --git a/cg/cg0200a.uml b/cg/cg0200a.uml index 9034bc999..c53b5c818 100755 --- a/cg/cg0200a.uml +++ b/cg/cg0200a.uml @@ -45,7 +45,7 @@ BEGIN FIELD CODCF FLAGS "GR" KEY 1 - USE LF_CLIFO KEY 1 + USE LF_CLIFO INPUT TIPOCF F_TIPOCF SELECT INPUT CODCF F_CODCF DISPLAY "Codice@6R" CODCF @@ -412,7 +412,7 @@ BEGIN GROUP 6 END -GROUPBOX DLG_NULL 76 8 +GROUPBOX DLG_NULL 76 10 BEGIN PROMPT 1 4 "Numeri telefonici" END @@ -491,14 +491,29 @@ BEGIN FIELD MAIL END -GROUPBOX DLG_NULL 76 4 +BOOLEAN F_BYMAIL BEGIN - PROMPT 1 12 "Percipiente" + PROMPT 2 11 "Consenso spedizione documenti per posta elettronica" + FIELD BYMAIL + MESSAGE FALSE CLEAR,F_DOCMAIL + MESSAGE TRUE ENABLE,F_DOCMAIL +END + +STRING F_DOCMAIL 50 +BEGIN + PROMPT 2 12 "Indirizzo doc." + FIELD DOCMAIL + CHECKTYPE REQUIRED +END + +GROUPBOX DLG_NULL 76 6 +BEGIN + PROMPT 1 14 "Dati Percipiente/Nascita" END LIST F_TIPOAPER 1 15 BEGIN - PROMPT 2 13 "Tipo " + PROMPT 2 15 "Tipo " FIELD TIPOAPER FLAGS "D" ITEM "F|Fisica" @@ -507,7 +522,7 @@ END NUMBER F_CODANAGPER 5 BEGIN - PROMPT 61 13 "Codice " + PROMPT 59 15 "Codice " FIELD CODANAGPER FLAGS "R" GROUP 4 @@ -527,7 +542,7 @@ END STRING F_RAGSOC1 50 BEGIN - PROMPT 2 14 "Ragione sociale " + PROMPT 2 16 "Ragione sociale " GROUP 4 USE LF_ANAG KEY 2 INPUT TIPOA F_TIPOAPER SELECT @@ -539,12 +554,6 @@ BEGIN ADD RUN ba4 -1 #F_TIPOAPER END -GROUPBOX DLG_NULL 76 4 -BEGIN - PROMPT 1 16 "Dati di nascita" - GROUP 5 -END - DATE F_DATANASC BEGIN PROMPT 2 17 "Data " diff --git a/cg/cg0400.cpp b/cg/cg0400.cpp index b6378a498..353a998ca 100755 --- a/cg/cg0400.cpp +++ b/cg/cg0400.cpp @@ -1236,7 +1236,21 @@ void TProgressivi_iva::setta_intestazione() r++; if (_livelloprog == 1) set_header(r++, "IVA %s",(const char*) _codivamsk); - else set_header(r++, FR("ATTIVITA' %s"),(const char*)_codattmsk); + else + { + if (_annoiva > 2007) + { + TString key; + + key.format("%ld|%s", _codditta, (const char *)_codattmsk); + const TString16 codateco = cache().get(LF_ATTIV, key, ATT_CODATECO); + + set_header(r++, FR("ATTIVITA' %s"), (const char*) codateco); + + } + else + set_header(r++, FR("ATTIVITA' %s"),(const char*) _codattmsk); + } set_header(++r, FR("@31gImponibile@64gImposta")); } diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 87601e150..edc924861 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -305,6 +305,11 @@ bool TPrimanota_application::read_caus(const char* cod, int year) const long protiva = causale().reg().protocol() + 1; m->set(F_PROTIVA, protiva, true); // Aggiorna protocollo IVA } + + const bool show_notevar = iva == iva_vendite || iva == iva_acquisti; + TSheet_field& ivasheet = m->sfield(F_SHEETIVA); + ivasheet.enable_column(IVA_NOTAVARECF, show_notevar); + ivasheet.sheet_mask().enable(IVA_NOTAVARECF, show_notevar); } if (ins && !ci_sono_importi()) @@ -741,9 +746,24 @@ void TPrimanota_application::init_insert_mode(TMask& m) ini2mask(ini, m, false); // Controllo se e' stato salvato il campo virtuale col codice IVA - const TString& codiva = ini.get("CODIVA", "23"); - if (!codiva.empty()) - m.set(F_CODIVA, codiva, 3); + if (m.id2pos(F_CODIVA) > 0) + { + const TString& codiva = ini.get("CODIVA", "23"); + if (codiva.full()) + m.set(F_CODIVA, codiva, 3); + } + + // Devo ricalcolare il numero di protocollo nel caso di cambio causale al volo + if (m.id2pos(F_PROTIVA) > 0) + { + if (causale().iva() != nessuna_iva) + { + const long protiva = causale().reg().protocol() + 1; + m.set(F_PROTIVA, protiva, true); // Aggiorna protocollo IVA + } + else + m.reset(F_PROTIVA); + } xvt_fsys_removefile(tmp); } @@ -952,6 +972,7 @@ int TPrimanota_application::read(TMask& m) TBill c; c.get(r); c.add_to(riga, 4, 0x7); // Conto 105-110 + riga.add(r.get(RMI_NAVP)); } calcola_imp(); // Calcola totale imponibile ed imposte @@ -961,7 +982,7 @@ int TPrimanota_application::read(TMask& m) pags().reset(); // Azzera sheet rate if (!read_scadenze(m)) // Se non esiste fattura { - const TString dd(m.get(F_DATADOC)); + const TString& dd = m.get(F_DATADOC); set_pagamento(NULL, dd); // Ignora codice pagamento in testata } } @@ -1004,14 +1025,13 @@ void TPrimanota_application::mask2rel(const TMask& m) _rel->destroy_rows(numreg); // Destroy all records cgs_pack(); // Destroy all null rows - TArray& rows = cgs().rows_array(); - // Controlla se e' un movimento con righe contabili if (iva() == nessuna_iva || !m.get_bool(F_SOLAIVA)) { + TString_array& rows = cgs().rows_array(); for (int i = 0; i < rows.items(); i++) { - TToken_string& row = (TToken_string&)rows[i]; + TToken_string& row = rows.row(i); TImporto n; n = row; const TBill conto(row, 2, 0x3); @@ -1101,12 +1121,11 @@ void TPrimanota_application::mask2rel(const TMask& m) const bool intra = causale().intra(); - TArray& irows = ivas().rows_array(); ivas_pack(); - + TString_array& irows = ivas().rows_array(); for (int i = 0; i < irows.items(); i++) { - TToken_string& row = (TToken_string&)irows[i]; + TToken_string& row = irows.row(i); TRectype &r = _rel->iva(i); r.zero(); @@ -1128,26 +1147,24 @@ void TPrimanota_application::mask2rel(const TMask& m) r.put(RMI_IMPOSTA, imposta); r.put(RMI_TIPOCR, row.get()); - r.put("CODCMS", row.get(10)); - r.put("FASCMS", row.get(11)); // Roba obsoleta allo stato brado const TBill c(row, 6); const int rimp = bill2pos(c, 'I')+1; r.put(RMI_RIGAIMP, rimp); c.put(r); + r.put(RMI_NAVP, row.get(10)); } } void TPrimanota_application::check_saldi() { + const int anno = _rel->curr().get_int(MOV_ANNOES); + TString_array& rows = cgs().rows_array(); - const int anno = _rel->curr().get_int("ANNOES"); - - for (int i = 0; i < rows.items(); i++) + FOR_EACH_ARRAY_ROW(rows, i, row) { - TToken_string& row = (TToken_string&)rows[i]; - TBill conto(row, 2, 0x3); + TBill conto(*row, 2, 0x3); conto.find(); const char sez = conto.sezione(); if (sez > ' ') @@ -1839,7 +1856,7 @@ bool TPrimanota_application::link_cesp(const TMask& msk, const char* action) if (!fexist("ce1.exe")) return false; - // Cerca una riga con tipo costo/ricavo 2,3,4,8 + // Cerca una riga con tipo costo/ricavo 2,3,4 int i; for (i = _rel->cg_items()-1; i >= 0; i--) @@ -1847,7 +1864,7 @@ bool TPrimanota_application::link_cesp(const TMask& msk, const char* action) const TRectype& rec = _rel->cg(i); const TBill zio(rec); char tipo_cr = char('0' + zio.tipo_cr()); - if (strchr("2348", tipo_cr)) + if (strchr("234", tipo_cr)) break; } if (i < 0) diff --git a/cg/cg2100.h b/cg/cg2100.h index f781b3009..01d0ef3d0 100755 --- a/cg/cg2100.h +++ b/cg/cg2100.h @@ -83,6 +83,18 @@ #define CG_ROWTYPE 115 #define CG_MASTRINO 200 +// Sheet IVA +#define IVA_IMPONIBILE 101 +#define IVA_CODIVA 102 +#define IVA_INDETRAIBILE 103 +#define IVA_IMPOSTA 104 +#define IVA_TIPOCOSTORIC 105 +#define IVA_TIPO 106 +#define IVA_GRUPPO 107 +#define IVA_CONTO 108 +#define IVA_SOTTOCONTO 109 +#define IVA_NOTAVARECF 111 + // Campi ripetuti sulla seconda pagina #define H_DATAREG 201 #define H_NUMREG 202 @@ -156,4 +168,4 @@ #define K_ANNOES 415 #define K_DATACOMP 416 -#endif \ No newline at end of file +#endif diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index d0febf269..4efec06cd 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -1986,7 +1986,7 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key) provv << c.provvisorio(); m.set(F_PROVVISORIO, provv); - if (c.iva() != nessuna_iva) + if (c.iva() != nessuna_iva && m.id2pos(F_SOLAIVA) > 0) m.set(F_SOLAIVA, c.soloiva() ? "X" : " "); return true; } @@ -3179,4 +3179,4 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key) shiva.force_update(); } return true; -} \ No newline at end of file +} diff --git a/cg/cg2103.cpp b/cg/cg2103.cpp index f386fecd7..ff1adc2e0 100755 --- a/cg/cg2103.cpp +++ b/cg/cg2103.cpp @@ -153,6 +153,9 @@ const TString& TCausale::tipo_doc() const int TCausale::tipomov() const { return _rec.get_int(CAU_TIPOMOV); } +const TString& TCausale::tipodoc() const +{ return _rec.get(CAU_TIPODOC); } + bool TCausale::saldaconto(const TDate& datareg) const { static TDate _data_sal(8,8,3); diff --git a/cg/cg2106.cpp b/cg/cg2106.cpp index 24e8fbeef..343ea9b88 100755 --- a/cg/cg2106.cpp +++ b/cg/cg2106.cpp @@ -349,7 +349,7 @@ bool TPrimanota_application::aggiusta_prorata() if (annodoc < 1900) annodoc = _msk[2]->get_int(F_ANNOIVA); const real prorata_attuale = reg.prorata(annodoc); - const real vecchio_prorata = prorata_attuale < 100.0 ? 100.0 : 0.0; + const real vecchio_prorata = prorata_attuale < CENTO ? CENTO : ZERO; TSheet_field& iva_sheet = ivas(); TString_array& righe_iva = iva_sheet.rows_array(); diff --git a/cg/cg2107.cpp b/cg/cg2107.cpp index bc7bbe50e..eaf140bb4 100755 --- a/cg/cg2107.cpp +++ b/cg/cg2107.cpp @@ -454,13 +454,15 @@ void TEasySolder_mask::set_imp(short id, const TImporto& imp) { TEdit_field& e = efield(id); CHECK(e.size() >= 15, "Campo troppo piccolo per contenere un importo"); - TString80 str; if (!imp.is_zero()) { const TCurrency c(imp.valore()); + TString80 str; str << c.string(true) << ' ' << imp.sezione(); + e.set(str); } - e.set(str); + else + e.reset(); } diff --git a/cg/cg21cg.uml b/cg/cg21cg.uml index 3ffb006ad..2cc1939d6 100755 --- a/cg/cg21cg.uml +++ b/cg/cg21cg.uml @@ -353,8 +353,6 @@ END BUTTON DLG_DELREC 10 2 BEGIN PROMPT -34 -1 "Elimina" - PICTURE BMP_DELREC - PICTURE BMP_DELRECDN MESSAGE EXIT,K_DEL END diff --git a/cg/cg21iva.uml b/cg/cg21iva.uml index 85596b57c..32f96a625 100755 --- a/cg/cg21iva.uml +++ b/cg/cg21iva.uml @@ -5,18 +5,18 @@ BEGIN PROMPT 1 1 "@BImposta" END -STRING 102 4 +STRING IVA_CODIVA 4 BEGIN PROMPT 2 2 "IVA " HELP "Codice IVA della riga" FLAGS "U" USE %IVA - INPUT CODTAB 102 + INPUT CODTAB IVA_CODIVA DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 DISPLAY "%@6" R0 DISPLAY "Tipo" S1 - OUTPUT 102 CODTAB + OUTPUT IVA_CODIVA CODTAB OUTPUT 158 S0 CHECKTYPE NORMAL WARNING "Codice IVA assente" @@ -29,15 +29,15 @@ BEGIN FLAGS "D" END -STRING 103 1 +STRING IVA_INDETRAIBILE 1 BEGIN PROMPT 2 3 "Indetraibilita' " USE %DET - INPUT CODTAB 103 + INPUT CODTAB IVA_INDETRAIBILE DISPLAY "Codice" CODTAB DISPLAY "Tipo" I0 DISPLAY "Descrizione@50" S0 - OUTPUT 103 CODTAB + OUTPUT IVA_INDETRAIBILE CODTAB OUTPUT 99 S0 CHECTYPE NORMAL FLAGS "U" @@ -49,12 +49,12 @@ BEGIN FLAGS "D" END -CURRENCY 101 18 +CURRENCY IVA_IMPONIBILE 18 BEGIN PROMPT 2 4 "Imponibile " END -CURRENCY 104 18 +CURRENCY IVA_IMPOSTA 18 BEGIN PROMPT 48 4 "Imposta " HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo" @@ -65,7 +65,7 @@ BEGIN PROMPT 1 6 "@BConto" END -LIST 106 1 12 +LIST IVA_TIPO 1 12 BEGIN PROMPT 2 7 "Tipo " HELP "Tipo del conto" @@ -79,27 +79,27 @@ BEGIN FLAGS "U" END -NUMBER 107 3 +NUMBER IVA_GRUPPO 3 BEGIN PROMPT 22 7 "Gruppo " HELP "Codice del gruppo" FIELD GRUPPO END -NUMBER 108 3 +NUMBER IVA_CONTO 3 BEGIN PROMPT 38 7 "Conto " FIELD CONTO USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="") - INPUT GRUPPO 107 - INPUT CONTO 108 + INPUT GRUPPO IVA_GRUPPO + INPUT CONTO IVA_CONTO DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO DISPLAY "Descrizione@50" DESCR DISPLAY "Tipo" TMCF - OUTPUT 106 TMCF - OUTPUT 107 GRUPPO - OUTPUT 108 CONTO + OUTPUT IVA_TIPO TMCF + OUTPUT IVA_GRUPPO GRUPPO + OUTPUT IVA_CONTO CONTO OUTPUT 110 DESCR ADD RUN cg0 -0 MESSAGE DIRTY,109|DIRTY,209|DIRTY,309 @@ -108,26 +108,26 @@ BEGIN END -NUMBER 109 6 +NUMBER IVA_SOTTOCONTO 6 BEGIN PROMPT 55 7 "Sottoconto " FIELD SOTTOCONTO USE LF_PCON SELECT SOTTOCONTO!="" - INPUT GRUPPO 107 - INPUT CONTO 108 - INPUT SOTTOCONTO 109 + INPUT GRUPPO IVA_GRUPPO + INPUT CONTO IVA_CONTO + INPUT SOTTOCONTO IVA_SOTTOCONTO DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO DISPLAY "Sottoconto" SOTTOCONTO DISPLAY "Descrizione@50" DESCR DISPLAY "C/R" TIPOSPRIC - OUTPUT 109 SOTTOCONTO - OUTPUT 107 GRUPPO - OUTPUT 108 CONTO + OUTPUT IVA_SOTTOCONTO SOTTOCONTO + OUTPUT IVA_GRUPPO GRUPPO + OUTPUT IVA_CONTO CONTO OUTPUT 110 DESCR ADD RUN cg0 -0 CHECKTYPE NORMAL - VALIDATE REQIF_FUNC 1 101 + VALIDATE REQIF_FUNC 1 IVA_IMPONIBILE WARNING "Sottoconto assente" END @@ -147,8 +147,8 @@ BEGIN OUTPUT 210 RAGSOC CHECKTYPE NORMAL ADD RUN cg0 -1 C - MESSAGE COPY,109 - VALIDATE REQIF_FUNC 1 101 + MESSAGE COPY,IVA_SOTTOCONTO + VALIDATE REQIF_FUNC 1 IVA_IMPONIBILE WARNING "Cliente assente" END @@ -165,8 +165,8 @@ BEGIN OUTPUT 310 RAGSOC CHECKTYPE NORMAL ADD RUN cg0 -1 F - MESSAGE COPY,109 - VALIDATE REQIF_FUNC 1 101 + MESSAGE COPY,IVA_SOTTOCONTO + VALIDATE REQIF_FUNC 1 IVA_IMPONIBILE WARNING "Fornitore assente" END @@ -181,7 +181,7 @@ BEGIN DISPLAY "Conto" CONTO DISPLAY "Sottoconto" SOTTOCONTO DISPLAY "C/R" TIPOSPRIC - COPY OUTPUT 109 + COPY OUTPUT IVA_SOTTOCONTO CHECKTYPE NORMAL ADD RUN cg0 -0 END @@ -220,7 +220,7 @@ BEGIN CHECKTYPE SEARCH END -LIST 105 1 51 +LIST IVA_TIPOCOSTORIC 1 51 BEGIN PROMPT 2 9 "Tipo Costo/Ricavo " ITEM " |0. Acquisti o vendite in genere" @@ -235,6 +235,12 @@ BEGIN HELP "Tipo Costo/Ricavo del conto" END +BOOLEAN IVA_NOTAVARECF +BEGIN + PROMPT 2 15 "Nota di variazione riferita ad anni precedenti (per Elenco Clienti/Fornitori)" + FIELD NOTAVARECF +END + BUTTON DLG_OK 10 2 BEGIN PROMPT -13 -1 "" @@ -248,8 +254,6 @@ END BUTTON DLG_DELREC 10 2 BEGIN PROMPT -33 -1 "Elimina" - PICTURE BMP_DELREC - PICTURE BMP_DELRECDN MESSAGE EXIT,K_DEL END diff --git a/cg/cg2200.cpp b/cg/cg2200.cpp index 9402cf5a9..091801679 100755 --- a/cg/cg2200.cpp +++ b/cg/cg2200.cpp @@ -267,7 +267,7 @@ void TProvvisori_app::inizia_saldi(const TRectype& r) _saldi.reset(); tiposal tsal = normale; - const TString16 c = r.get(MOV_CODCAUS); + const TString4 c = r.get(MOV_CODCAUS); if (c.not_empty()) { const TRectype& cau = cache().get(LF_CAUSALI, c); diff --git a/cg/cg3900.cpp b/cg/cg3900.cpp index 7fd693c74..89c585d66 100755 --- a/cg/cg3900.cpp +++ b/cg/cg3900.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -112,15 +113,22 @@ TVariant TAllegato_info::get(const TString& field) const } else if (field == COM_DENCOM || field == COM_PROVCOM) { - TString8 key; - key << get(CLI_STATOCF) << '|' << get(CLI_COMCF); + TToken_string key; + key << get(CLI_STATOCF); + const bool italy = key.blank() || key == "IT"; + key << '|' << get(CLI_COMCF); var = cache().get(LF_COMUNI, key, field); - if (var.is_empty() && key[0] == '|') // Ritento col CAP per gli Italiani + if (var.is_empty() && italy) // Ritento col CAP per gli Italiani { key = " |"; key << cap2comune(get(CLI_CAPCF).as_string(), get(CLI_LOCCF).as_string()); var = cache().get(LF_COMUNI, key, field); } + if (var.is_empty() && field == COM_PROVCOM) + { + if (!italy || key.get_char(1) == 'Z') + var = "EE"; + } } else { @@ -187,12 +195,7 @@ void TAllegato_info::key(TString& tmp) const { tmp = get(CLI_COFI).as_string(); if (tmp.blank()) - { - if (occasionale()) - tmp = _occas; - else - tmp = _codice; - } + tmp.cut(0) << _codice; } tmp.insert(_tipo == 'F' ? "F|" : "C|"); } @@ -273,7 +276,8 @@ class TPadoaSchioppa_set : public TAS400_recordset void add_trc(int trc); protected: - int primo_campo_libero(); + int primo_campo_libero(); // Posizione primo campo libero per record 1 e 2 + void init_trc(); // Constructor helper public: long new_rec(int tiporec); // 0, 1, 2, 3, 9, -1 (1 o 2 a seconda del tipo corrente) @@ -290,6 +294,7 @@ public: bool set(int fldcode, const TVariant& val); TPadoaSchioppa_set(); + TPadoaSchioppa_set(const TFilename& name); }; long TPadoaSchioppa_set::new_rec(int tiporec) @@ -309,7 +314,6 @@ void TPadoaSchioppa_set::add_field(int trc, int da, int a, int lung, const char* { CHECKS(da > 0 && a >= da, "Posizioni incoerenti sul campo ", name); CHECKS(lung == a-da+1, "Lunghezza incoerente sul campo ", name); - CHECKS(lung == a-da+1, "Lunghezza incoerente sul campo ", name); TString80 field; field.format("%d.%s", trc, (const char*)name); TFieldtypes ft = _alfafld; @@ -356,7 +360,7 @@ void TPadoaSchioppa_set::add_trc(int trc) case 0: // Testata case 9: // Coda add_field(trc, 2, 4, 3, "IndentificativoFornitura", AN, true, "ECF"); - add_field(trc, 5, 6, 2, "IdentificativoAnno" , AN, true, "00"); + add_field(trc, 5, 6, 2, "IdentificativoAnno" , NU, true, "00"); add_field(trc, 7, 8, 2, "CodiceFornitura" , NU, true, "38"); add_field(trc, 9, 24, 16, "CodiceFiscale" , CF, true); add_field(trc, 25, 35, 11, "PartitaIVA" , PI, true); @@ -416,16 +420,6 @@ void TPadoaSchioppa_set::add_trc(int trc) add_field(trc,1799,1800, 2, "FineRiga" , AN, true, "\r\n"); // 0D 0A } -TPadoaSchioppa_set::TPadoaSchioppa_set() - : TAS400_recordset("AS400(1800,1)") -{ - add_trc(0); - add_trc(1); - add_trc(2); - add_trc(3); - add_trc(9); -} - int TPadoaSchioppa_set::primo_campo_libero() { const TToken_string& curr = row(-1); // Record corrente @@ -521,7 +515,7 @@ bool TPadoaSchioppa_set::set(const char* name, const TDate& value) // Usata per 1001, 2001 e 3001 bool TPadoaSchioppa_set::set(int fldcode, const TString& val) { - CHECKD(fldcode >= 1001 && fldcode <= 3001, "Codice campo non valido", fldcode); + CHECKD(fldcode >= 1001 && fldcode <= 3001, "Codice campo non valido ", fldcode); CHECKD(val.full(), "Campo non posizionale vuoto ", fldcode); const int tiporec = atoi(rec_type()); @@ -534,7 +528,7 @@ bool TPadoaSchioppa_set::set(int fldcode, const TString& val) // Usata solo per 1001 bool TPadoaSchioppa_set::set(int fldcode, long val) { - CHECKD(fldcode == 1001, "Codice campo non valido", fldcode); + CHECKD(fldcode == 1001, "Codice campo non valido ", fldcode); CHECKD(val > 0, "Campo non posizionale vuoto ", fldcode); TString16 value; value.format("%16ld", val); @@ -544,7 +538,7 @@ bool TPadoaSchioppa_set::set(int fldcode, long val) // Usata dal 4001 in poi bool TPadoaSchioppa_set::set(int fldcode, const TVariant& val) { - CHECKD(fldcode >= 4001 && fldcode <= 13001, "Codice campo non valido", fldcode); + CHECKD(fldcode >= 4001 && fldcode <= 13001, "Codice campo non valido ", fldcode); if (val.is_zero()) return true; @@ -554,6 +548,28 @@ bool TPadoaSchioppa_set::set(int fldcode, const TVariant& val) return set(field, val); } +void TPadoaSchioppa_set::init_trc() +{ + add_trc(0); + add_trc(1); + add_trc(2); + add_trc(3); + add_trc(9); +} + +TPadoaSchioppa_set::TPadoaSchioppa_set() + : TAS400_recordset("AS400(1800,1)") +{ + init_trc(); +} + +TPadoaSchioppa_set::TPadoaSchioppa_set(const TFilename& name) + : TAS400_recordset("AS400(1800,1)") +{ + init_trc(); + load_file(name); +} + /////////////////////////////////////////////////////////// // TCodiva_cache /////////////////////////////////////////////////////////// @@ -672,6 +688,27 @@ TAlleg_report::TAlleg_report(TRecordset* rs, const TMask& am, bool hide_not_alle set_recordset(rs); } +/////////////////////////////////////////////////////////// +// TAlleg_log +/////////////////////////////////////////////////////////// + +class TAlleg_log : public TLog_report +{ + bool _red_alert; + +public: + virtual bool log(int severity, const char* msg); + bool red_alert() const { return _red_alert; } + TAlleg_log() : TLog_report(TR("Errori riscontrati")), _red_alert(false) {} +}; + +bool TAlleg_log::log(int severity, const char* msg) +{ + if (severity > 0) + _red_alert = true; + return TLog_report::log(severity, msg); +} + /////////////////////////////////////////////////////////// // TAlleg_mask /////////////////////////////////////////////////////////// @@ -680,7 +717,6 @@ class TAlleg_mask : public TAutomask { TCodiva_cache _codiva; TCausali_cache _causali; - bool _red_alert; protected: // TAutomask virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); @@ -691,21 +727,30 @@ protected: // Elaborazione bool documento_corrispettivi(const TString& tipodoc) const; int imp_iva(char tipocf, bool non_esposti, const TRecordset& riga, real& imp, real& iva); real indetraibile_al(const TRecordset& riga, bool prorata100) const; - bool scan_iva_rows(const TRecordset& mov, TAssoc_array& clifi, bool strict); + bool scan_iva_rows(const TRecordset& mov, TAssoc_array& clifi, bool invio, bool ministeriale); TRecordset* new_recordset(char tipocf = ' ', bool strict = false); void log_error(const char* ragsoc, const char* msg1, const char* msg2, - TLog_report& errlog, int severity = 2); + TAlleg_log& errlog, int severity = 2); void log_error(const TRecordset& clifo, const char* msg1, const char* msg2, - TLog_report& errlog, int severity = 2); + TAlleg_log& errlog, int severity = 2); void copia_importo(const TRecordset& clifo, const char* fldname, TPadoaSchioppa_set& pss, int fldcode) const; - void add_0_9(int trc, TPadoaSchioppa_set& pss, TLog_report& log); - void add_1_2(int trc, TRecordset& clifo, TPadoaSchioppa_set& pss, TLog_report& log); +protected: // Generazione + bool build_output_name(TFilename& fname) const; + void add_0_9(int trc, TPadoaSchioppa_set& pss, TAlleg_log& log); + void add_1_2(int trc, TRecordset& clifo, TPadoaSchioppa_set& pss, TAlleg_log& log); void add_3(TPadoaSchioppa_set& pss); + bool show_errors(TAlleg_log& log) const; void generazione(); +protected: // Fusione + bool test_file(const TFilename& name, TString& error) const; + void import_clifo(const TFilename& name, TAssoc_array& clips, TAssoc_array& forps, TAlleg_log& log); + TRecnotype export_clifo(int tiporec, TAssoc_array& clifo, TAllegati_set& all, TPadoaSchioppa_set& pss); + void fusione(); + public: TAlleg_mask(); ~TAlleg_mask(); @@ -754,7 +799,8 @@ int TAlleg_mask::imp_iva(char tipocf, bool non_esposti, const TRecordset& riga, return allegato; } -bool TAlleg_mask::scan_iva_rows(const TRecordset& mov, TAssoc_array& clifi, bool invio) +bool TAlleg_mask::scan_iva_rows(const TRecordset& mov, TAssoc_array& clifi, + bool invio, bool ministeriale) { // Informazioni base sul cliente in testata: vengono ignorati gli importi const TAllegato_info clifo(mov); @@ -813,24 +859,23 @@ bool TAlleg_mask::scan_iva_rows(const TRecordset& mov, TAssoc_array& clifi, bool const bool non_esposti = movintra || reverse_charge; const bool prorata100 = caus.reg().prorata100(annoiva); - bool anno_prec = false; // In attesa di modifiche a prima nota - if (get(F_ALGO) == "R") - anno_prec = datadoc.year() == anno-1; // Serve per quadrature - - TAllegato_importi& allimp = ai->importi(anno_prec); - TISAM_recordset righe_iva("USE RMOVIVA\nFROM NUMREG=#NR\nTO NUMREG=#NR"); righe_iva.set_var("#NR", mov.get(MOV_NUMREG)); real imponibile, imposta, indecifrabile; for (bool ok = righe_iva.move_first(); ok; ok = righe_iva.move_next()) { + bool anno_prec = false; + if (ministeriale) + anno_prec = righe_iva.get(RMI_NAVP).as_bool(); + else + anno_prec = datadoc.year() == anno-1; // Serve per quadrature + TAllegato_importi& allimp = ai->importi(anno_prec); + const int allegato = imp_iva(clifo.tipo(), non_esposti, righe_iva, imponibile, imposta); switch (allegato) { - case 1: allimp._imp += imponibile; - allimp._iva += imposta; - break; + case 1: allimp._imp += imponibile; allimp._iva += imposta; break; case 2: allimp._impNI += imponibile; break; case 3: allimp._impES += imponibile; break; case 4: allimp._ivaNE += imponibile; break; // Importi con IVA non esposta @@ -845,7 +890,7 @@ bool TAlleg_mask::scan_iva_rows(const TRecordset& mov, TAssoc_array& clifi, bool // algo: R=data Registrazione; D=data Documento TRecordset* TAlleg_mask::new_recordset(char tipocf, bool invio) { - const int algo_dick = get(F_ALGO) == "D"; + const bool ministeriale = get(F_ALGO) == "D"; // Compito: tradurre in ISAM la seguente query: // SELECT * FROM MOV @@ -853,7 +898,7 @@ TRecordset* TAlleg_mask::new_recordset(char tipocf, bool invio) // ORDER BY TIPO,CODCF; TString query = "USE MOV KEY 3"; // La chiave 3 e' TIPO+CODCF+DATAREG+NUMREG query << "\nSELECT "; - if (algo_dick) + if (ministeriale) query << "(ANNOIVA>=#ANNO)"; // Seleziona dall'anno desiderato in poi else query << "(ANNOIVA==#ANNO)"; // Seleziona solo l'anno desiderato @@ -895,7 +940,7 @@ TRecordset* TAlleg_mask::new_recordset(char tipocf, bool invio) continue; // Controllo inutilmente anche il tipo documento - const TString& tipodoc = caus.tipo_doc(); + const TString& tipodoc = caus.tipodoc(); if (documento_corrispettivi(tipodoc)) continue; @@ -909,8 +954,7 @@ TRecordset* TAlleg_mask::new_recordset(char tipocf, bool invio) if (keep) keep = (tipocf == 'C') ^ (tipoiva == iva_acquisti); // compatibile - // Cavolata interpretativa tipicamente italiana - if (keep && algo_dick) + if (keep && ministeriale) { const int annodoc = mov.get(MOV_DATADOC).as_date().year(); const bool is_nota = (tipodoc=="NC") || (tipodoc=="ND"); @@ -920,7 +964,7 @@ TRecordset* TAlleg_mask::new_recordset(char tipocf, bool invio) if (!keep) continue; - scan_iva_rows(mov, clifi, invio); + scan_iva_rows(mov, clifi, invio, ministeriale); } TAllegati_set* hullygully = new TAllegati_set; @@ -945,7 +989,7 @@ const TRectype& TAlleg_mask::contribuente() const return anag; } -void TAlleg_mask::add_0_9(int trc, TPadoaSchioppa_set& pss, TLog_report& log) +void TAlleg_mask::add_0_9(int trc, TPadoaSchioppa_set& pss, TAlleg_log& log) { pss.new_rec(trc); @@ -960,7 +1004,7 @@ void TAlleg_mask::add_0_9(int trc, TPadoaSchioppa_set& pss, TLog_report& log) else { if (pariva[0] == '8' || pariva[0] == '9') - log_error(ragsoc, TR("** Verificare esenzione dall'invio degli elenchi"), pariva, log, 2); + log_error(ragsoc, TR("* Verificare esenzione dall'invio degli elenchi"), pariva, log, 2); } const TString16 codfis = anag.get(ANA_COFI); @@ -1000,11 +1044,15 @@ void TAlleg_mask::add_0_9(int trc, TPadoaSchioppa_set& pss, TLog_report& log) pss.set("ComuneSedeLegale", comres.get(COM_DENCOM)); pss.set("ProvinciaSedeLegale", comres.get(COM_PROVCOM)); } - pss.set("AnnoRiferimento", get(F_ANNO)); + + const long anno = get_int(F_ANNO); + pss.set("IdentificativoAnno", TVariant(anno-2006L)); // 00=2006, 01=2007, 02=2008, ... + pss.set("AnnoRiferimento", TVariant(anno)); // 2006, 2007, 2008, ... // Compilare solo se diverso da dichiarante pss.set("CodiceSoggettoObbligato", get(F_SOGG)); + // Dati dell'intermediario che si cucca 50 Euro senza fare una mazza! const TString& inter = get(F_INTR); if (inter.full()) { @@ -1067,7 +1115,6 @@ void TAlleg_mask::add_3(TPadoaSchioppa_set& pss) } } - void TAlleg_mask::copia_importo(const TRecordset& clifo, const char* fldname, TPadoaSchioppa_set& pss, int fldcode) const { @@ -1080,29 +1127,27 @@ void TAlleg_mask::copia_importo(const TRecordset& clifo, const char* fldname, } void TAlleg_mask::log_error(const char* ragsoc, const char* msg1, const char* msg2, - TLog_report& errlog, int severity) + TAlleg_log& errlog, int severity) { TString str; str << ragsoc << " - " << msg1; if (msg2 && *msg2) str << " : " << msg2; errlog.log(severity, str); - if (severity > 0) - _red_alert = true; } void TAlleg_mask::log_error(const TRecordset& clifo, const char* msg1, const char* msg2, - TLog_report& errlog, int severity) + TAlleg_log& errlog, int severity) { TString str; str << clifo.get("#RECORD.NUMBER") << ". " << clifo.get(CLI_TIPOCF) << clifo.get(CLI_CODCF) << ' ' << clifo.get(CLI_RAGSOC); - str.strip_double_spaces(); + str.strip_d_spaces(); log_error(str, msg1, msg2, errlog, severity); } -void TAlleg_mask::add_1_2(int trc, TRecordset& clifo, TPadoaSchioppa_set& pss, TLog_report& log) +void TAlleg_mask::add_1_2(int trc, TRecordset& clifo, TPadoaSchioppa_set& pss, TAlleg_log& log) { const int anno = get_int(F_ANNO); const bool coffee = get_bool(F_COFI); // Codice fiscale voluto o obbligatorio @@ -1162,7 +1207,7 @@ void TAlleg_mask::add_1_2(int trc, TRecordset& clifo, TPadoaSchioppa_set& pss, T else { if (paiv[0] == '8' || paiv[0] == '9') - log_error(clifo, TR("** Verificare esclusione della Parita IVA"), paiv, log, 1); + log_error(clifo, TR("* Verificare esclusione della Partita IVA"), paiv, log, 1); } pss.set(3001, paiv); // Partita IVA (obbligatoria dal 2006) @@ -1205,35 +1250,62 @@ void TAlleg_mask::add_1_2(int trc, TRecordset& clifo, TPadoaSchioppa_set& pss, T } } +bool TAlleg_mask::show_errors(TAlleg_log& log) const +{ + if (yesno_box(TR("Sono stati rilevati errori sulla fornitura:\nSi desidera visualizzarli?"))) + { + TReport_book errbuc; + errbuc.add(log); + errbuc.preview(); + } + return yesno_box(TR("Si desidera generare ugualmente la fornitura?")); +} + +// Pulisce e normalizza un nome di file +static bool normalize_name(TFilename& name) +{ + name.trim(); + if (name.not_empty()) + { + name.lower(); + name.replace('\\', '/'); + } + return name.not_empty(); +} + +// Estrae un nome di file pulito da una riga di spreadsheet +static bool row2name(const TToken_string& row, TFilename& name) +{ + row.get(0, name); + return normalize_name(name); +} + +bool TAlleg_mask::build_output_name(TFilename& fname) const +{ + fname = get(F_DIR); + fname.add(get(F_NAME)); + return normalize_name(fname); +} + void TAlleg_mask::generazione() { - _red_alert = false; - TLog_report log(TR("Errori riscontrati")); - - TReport_book book; TPadoaSchioppa_set pss; + TAlleg_log log; add_0_9(0, pss, log); // Testa TRecordset* cli = new_recordset('C', true); - - if (cli != NULL) + if (cli != NULL && cli->items()) { log.log(0, TR("CLIENTI")); add_1_2(1, *cli, pss, log); // Clienti - - TAlleg_report rep(cli, *this, true); - book.add(rep); } - TRecordset* ven = new_recordset('F', true); - if (ven != NULL) + TRecordset* acq = new_recordset('F', true); + if (acq != NULL && acq->items() > 0) { log.log(0, TR("FORNITORI")); - add_1_2(2, *ven, pss, log); // Fornitori - - TAlleg_report rep(ven, *this, true); - book.add(rep); + add_1_2(2, *acq, pss, log); // Fornitori } add_3(pss); // Totali Clienti e Fornitori @@ -1241,25 +1313,261 @@ void TAlleg_mask::generazione() add_0_9(9, pss, log); // Piede (= Testa) bool go_on = true; - if (_red_alert) + if (log.red_alert()) + go_on = show_errors(log); + if (go_on) { - if (yesno_box(TR("Sono stati rilevati errori sulla fornitura:\nSi desidera visualizzarli?"))) - { - TReport_book errbuc; - errbuc.add(log); - errbuc.preview(); - } - go_on = yesno_box("Si desidera generare ugualmente la fornitura?"); + TFilename fname; + if (build_output_name(fname)) + pss.save_as(fname); + + TReport_book book; + TAlleg_report clirep(cli, *this, true); + book.add(clirep); + TAlleg_report acqrep(acq, *this, true); + book.add(acqrep); + book.preview(); } + else + { + delete cli; + delete acq; + } +} + +void TAlleg_mask::import_clifo(const TFilename& name, + TAssoc_array& clips, TAssoc_array& forps, + TAlleg_log& log) +{ + TString error; + if (test_file(name, error)) + { + TPadoaSchioppa_set inps(name); + + TProgind pi(inps.items(), name, true, true); + TAssoc_array* cur_clifo = NULL; + for (bool ok = inps.move_first(); ok; ok = inps.move_next()) + { + if (!pi.addstatus(1)) + break; + const int trc = inps.rec_type()[0]-'0'; + if (trc == 1 || trc == 2) + { + TAssoc_array& clifo = trc == 1 ? clips : forps; + int i = 0, pos = 1; + const TString& rec = inps.curr_row(); + for (i = 0; i < npCount; i++, pos += npSize) // Scandisce i 70 campi non posizionali + { + const TString& fld = rec.mid(pos, npSize); + const TString8 code = fld.mid(2,6); + const int ncode = atoi(code); + if (ncode > 1000) + { + switch (ncode) + { + case 1001: // Inizia una nuova anagrafica + cur_clifo = NULL; + break; + case 3001: // Ho trovato la Partita IVA della nuova anagrafica + if (cur_clifo == NULL) + { + // Cerco l'anagrafica corrispondente alla Partita IVA + const TString16 piva = fld.mid(8); + cur_clifo = (TAssoc_array*)clifo.objptr(piva); + if (cur_clifo == NULL) // Se non la trovo ... + { + cur_clifo = new TAssoc_array; // ... allora la creo nuova + clifo.add(piva, cur_clifo); + } + } + else + log.log(2, "Dati inconsistenti"); + break; + default : + if (cur_clifo != NULL) + { + if (ncode > 4000) // Importi + { + const real imp = fld.mid(8); + const TVariant value(imp); // Impossibile fondere con riga precedente :-? + TVariant* tot = (TVariant*)cur_clifo->objptr(code); + if (tot != NULL) + tot->add(value); // Incremento importo precedente + else + cur_clifo->add(code, value); // Creo nuovo importo + } + else // Non importi: praticamente solo Codice Fiscale + { + const TVariant value(fld.mid(8)); + cur_clifo->add(code, value); + } + } + else + log.log(2, "Dati inconsistenti"); + break; + } + } + else + break; + } + } + } + } + else + { + error.replace('\n', ' '); + log.log(1, error); + } +} + + +TRecnotype TAlleg_mask::export_clifo(int tiporec, TAssoc_array& clifo, + TAllegati_set& all, TPadoaSchioppa_set& pss) +{ + TRecnotype count = 0; + if (!clifo.empty()) + { + pss.new_rec(tiporec); + FOR_EACH_ASSOC_OBJECT(clifo, cash, ckey, cobj) + { + const TVariant piva = ckey; + pss.set(1001, ++count); + pss.set(3001, piva.as_string()); + + all.new_rec(); + all.set(CLI_TIPOCF, tiporec == 1 ? "C" : "F"); + all.set(CLI_CODCF, count); + all.set(CLI_PAIV, piva); + + TString80 str = tiporec == 1 ? TR("Cliente") : TR("Fornitore"); + str << ' ' << count; + all.set(CLI_RAGSOC, (const char*)str); + + TAssoc_array& data = *(TAssoc_array*)cobj; + FOR_EACH_ASSOC_OBJECT(data, dash, dkey, dobj) + { + const int code = atoi(dkey); + const TVariant& var = *(TVariant*)dobj; + if (code > 4000) + { + pss.set(code, var); + if (tiporec == 1) // Clienti + { + switch (code) + { + case 4001: all.set("C_IMP", var); break; + case 4002: all.set("C_IVA", var); break; + case 5001: all.set("C_NI", var); break; + case 6001: all.set("C_ES", var); break; + case 7001: all.set("C_NE", var); break; + default : break; + } + } + else // Fornitori + { + switch (code) + { + case 4001: all.set("C_IMP", var); break; + case 4002: all.set("C_IVA", var); break; + case 5001: all.set("C_IND", var); break; + case 6001: all.set("C_NI", var); break; + case 7001: all.set("C_ES", var); break; + case 8001: all.set("C_NE", var); break; + default : break; + } + } + } + else + { + if (code != 1001 && code != 3001) // Gia' scritti da prima + pss.set(code, var.as_string()); + } + } + } + } + return count; +} + +void TAlleg_mask::fusione() +{ + TPadoaSchioppa_set pss; + TAlleg_log log; + + add_0_9(0, pss, log); // Testa + + TAssoc_array clips, forps; + TSheet_field& sheet = sfield(F_FUSION); + TFilename name; + FOR_EACH_SHEET_ROW(sheet, r, row) if (row2name(*row, name)) + { + TString error; + if (test_file(name, error)) + import_clifo(name, clips, forps, log); + else + log.log(1, error); + } + + TAllegati_set* all = new TAllegati_set; + export_clifo(1, clips, *all, pss); // Clienti + export_clifo(2, forps, *all, pss); // Fornitori + + add_3(pss); // Totali Clienti e Fornitori + add_0_9(9, pss, log); // Piede (= Testa) + + bool go_on = all->items() > 0; + if (log.red_alert()) + go_on = show_errors(log); if (go_on) { - TFilename fname = get(F_DIR); - fname.add(get(F_NAME)); + TFilename fname; + if (build_output_name(fname)) pss.save_as(fname); + TReport_book book; + TAlleg_report rep(all, *this, true); + book.add(rep); book.preview(); } + else + delete all; +} + +bool TAlleg_mask::test_file(const TFilename& name, TString& error) const +{ + TToken_string errors(80, ';'); + + error.cut(0); + if (!name.exist()) + errors = TR("non e' accessibile o inesistente"); + else + { + const TFixed_string ecf_ext("ecf"); + if (ecf_ext.compare(name.ext(), true) != 0) + errors.add(TR("non ha un'estensione valida (ECF)")); + + TFilename outname; build_output_name(outname); + if (name == outname) + errors.add(TR("ha lo stesso nome del file totale")); + + const long sz = fsize(name); + if (sz % 1800) + errors.add(TR("non ha una dimensione valida (multipla di 1800)")); + + ifstream ecf_file(name); + TString4 head; head.spaces(); + ecf_file.read(head.get_buffer(), head.size()); + if (!head.starts_with("0ECF")) + errors.add(TR("non ha un record di testata valido (0ECF)")); + } + + if (errors.full()) + { + error << '\'' << name << "' " << TR("non e' una fornitura valida") + << ":\n" << errors; + } + + return errors.empty(); } bool TAlleg_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) @@ -1381,10 +1689,47 @@ bool TAlleg_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) if (e == fe_button) { if (check_fields()) + { + if (curr_page() == 0) generazione(); + else + fusione(); + } return false; } break; + case F_FUSION: + if (e == se_notify_modify) + { + TFilename name; + if (row2name(((TSheet_field&)o).row(jolly), name)) + { + TString error; + if (!test_file(name, error)) + return error_box(error); + } + } else + if (e == fe_close) + { + TSheet_field& s = (TSheet_field&)o; + TString error; + TFilename name1, name2; + FOR_EACH_SHEET_ROW(s, i, row1) if (row2name(*row1, name1)) + { + if (!test_file(name1, error)) + return error_box(error); + + FOR_EACH_SHEET_ROW(s, j, row2) if (j > i && row2name(*row2, name2)) + { + if (name1 == name2) + { + error.format("La riga %d e' duplicata nella riga %d", i+1, j+1); + return error_box(error); + } + } + } + } + break; default: break; } diff --git a/cg/cg3900a.h b/cg/cg3900a.h index 3e90e32b4..aeccf67bd 100755 --- a/cg/cg3900a.h +++ b/cg/cg3900a.h @@ -13,3 +13,7 @@ #define F_COMP 113 #define F_DATA 114 #define F_FILTRO 115 + +#define F_FUSION 201 +#define F_DIR2 204 +#define F_NAME2 205 diff --git a/cg/cg3900a.rep b/cg/cg3900a.rep index 5d4481246..9c745fff4 100755 --- a/cg/cg3900a.rep +++ b/cg/cg3900a.rep @@ -60,7 +60,7 @@ #INTERMEDIARIO - + #CAF @@ -151,7 +151,7 @@ P_NE MESSAGE ADD,#F1.206 - + CAPCF diff --git a/cg/cg3900a.uml b/cg/cg3900a.uml index a7116261a..771ac7f6f 100755 --- a/cg/cg3900a.uml +++ b/cg/cg3900a.uml @@ -49,16 +49,18 @@ BEGIN PROMPT 1 4 "@bFornitura" END -STRING F_DIR 128 50 +STRING F_DIR 256 64 BEGIN PROMPT 2 5 "Cartella " CHECKTYPE REQUIRED + MESSAGE COPY,F_DIR2 END -STRING F_NAME 50 +STRING F_NAME 64 BEGIN PROMPT 2 6 "File " CHECKTYPE REQUIRED + MESSAGE COPY,F_NAME2 END GROUPBOX DLG_NULL 78 4 @@ -119,7 +121,7 @@ END DATE F_DATA BEGIN - PROMPT 2 15 "Data dell'impegno alla trasmimssione " + PROMPT 2 15 "Data dell'impegno alla trasmissione " VALIDATE REQIF_FUNC 1 F_INTR WARNING "Data obbligatoria in presenza di un intermediario" FIELD IMPEGNO @@ -177,4 +179,59 @@ END ENDPAGE +PAGE "Somma forniture" 0 0 0 -3 + +SPREADSHEET F_FUSION 78 15 +BEGIN + PROMPT 1 1 "" + ITEM "Elenco Forniture da sommare@70" +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 17 "@bFornitura totale" +END + +STRING F_DIR2 256 64 +BEGIN + PROMPT 2 18 "Cartella " + FLAGS "D" +END + +STRING F_NAME2 64 +BEGIN + PROMPT 2 19 "File " + FLAGS "D" +END + +ENDPAGE + +ENDMASK + +PAGE "File" -1 -1 78 5 + +STRING 101 256 70 +BEGIN + PROMPT 1 1 "File " + FSELECT "*.ecf" + CHECKTYPE REQUIRED +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + ENDMASK diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index 2751e41b8..785e7beaf 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -5,9 +5,11 @@ // ------------------------------------------------------------ #include +#include #include #include "cg4300.h" +#include // flags per annuale #define IS_PRORATA 0x0001 @@ -152,7 +154,15 @@ void TLiquidazione_app::describe_name(int month, TToken_string& codatts, char fl d->_s0 = _nditte->curr().get("CODDITTA"); d->_s1 = _nditte->curr().get("RAGSOC"); - d->_s2 = _nditte->curr(LF_ATTIV).get("CODATT"); + + if (atoi(_year) > 2007) + { + const TString16 codateco = _nditte->curr(LF_ATTIV).get(ATT_CODATECO); + + d->_s2 = codateco; + } + else + d->_s2 = _nditte->curr(LF_ATTIV).get("CODATT"); d->_s3 = codatts.items() == 1 ? (const char*)_nditte->curr(LF_ATTIV).get("DESCR") : ""; d->_s4 = _freqviva; @@ -1804,7 +1814,7 @@ void TLiquidazione_app::set_plm(_DescrItem& d) } if (!(d._r7.is_zero() && d._r8.is_zero())) { - set_row(rw++,FR("Totali acquisti indeducibili per art.19@91g%r@107g%r"), + set_row(rw++,FR("Totale acquisti indeducibili per art.19@91g%r@107g%r"), &(d._r7), &(d._r8)); } if (! (d._r9.is_zero() && d._r10.is_zero())) diff --git a/cg/cg4400.cpp b/cg/cg4400.cpp index a048faf13..d3f52adc6 100755 --- a/cg/cg4400.cpp +++ b/cg/cg4400.cpp @@ -2496,11 +2496,27 @@ void TStampa_registri_app::preprocess_header() if (_intesta_liq) set_header(r, FR("Registro IVA: %s %s %s"), (const char*)_codreg, (const char*)_desc_lib, (const char*) data); - else - set_header(r, FR("Registro IVA: %s %s %s Attivita\' %s %s"), - (const char*) _codreg, (const char*) _desc_lib, - (const char*) data, (const char*) _codatt, - (const char*) _attivita); + else + { + if (_annoes > 2007) + { + TString key; + + key.format("%ld|%s", _ditta, (const char *)_codatt); + const TString16 codateco = cache().get(LF_ATTIV, key, ATT_CODATECO); + + set_header(r, FR("Registro IVA: %s %s %s Attivita\' %s %s"), + (const char*) _codreg, (const char*) _desc_lib, + (const char*) data, (const char*) codateco, + (const char*) _attivita); + } + else + set_header(r, FR("Registro IVA: %s %s %s Attivita\' %s %s"), + (const char*) _codreg, (const char*) _desc_lib, + (const char*) data, (const char*) _codatt, + (const char*) _attivita); + + } } else { @@ -3694,8 +3710,19 @@ void TStampa_registri_app::stampa_prospetto_riepilogo(tiporeg tipo, const TStrin row.put(codreg, 14); row.put(format("%-.40s",(const char*)_tabreg->get("S0")), 18); row.put(TR("Attivita\'"), 60); - row.put(codatt, 70); - row.put(desc, 76); + + if (_annoes > 2007) + { + TString key; + + key.format("%ld|%s", _ditta, (const char *)codatt); + const TString16 codateco = cache().get(LF_ATTIV, key, ATT_CODATECO); + + row.put(codateco, 70); + } + else + row.put(codatt, 70); + row.put(desc, 77); pr.print(row); } else diff --git a/cg/cg6100.cpp b/cg/cg6100.cpp index 13ca3131c..82607dd4e 100755 --- a/cg/cg6100.cpp +++ b/cg/cg6100.cpp @@ -24,7 +24,7 @@ public: virtual bool create(); virtual bool destroy(); virtual void main_loop(); - virtual bool check_autorization() const { return FALSE; } + virtual bool check_autorization() const { return false; } void stato_trasferimento(TString& std); bool controlli_preliminari(); diff --git a/cg/cg6400.cpp b/cg/cg6400.cpp index e0876da11..ecfad8b03 100755 --- a/cg/cg6400.cpp +++ b/cg/cg6400.cpp @@ -38,10 +38,10 @@ class TRic_archivi : public TSkeleton_application bool _sequenza,_disketto; bool _prima_volta,_baipassa; TString _nomeid,_nomeidp,_ragsoc_dittar; - TFilename _marker,_trasf,_trasfer,_pathname; + TFilename _marker,_trasf,_trasfer,_pathname,_trasfhard; long _dittainv,_dittainvp,_dittaric,_totrectras,_totrectrasp; TDate _datatras,_datatrasp,_dataultras_tab,_dataultras; - TString _sigle_file,_nrec_file,_trasfhard; + TString _sigle_file,_nrec_file; char _agg_cau,_agg_pcon,_agg_cls,_agg_clifo,_agg_fatatt,_agg_fatpas; public: @@ -50,7 +50,7 @@ public: virtual bool create(); virtual bool destroy(); virtual bool check_autorization() const - {return FALSE;} + {return false;} virtual void main_loop(); bool leggi_marker(); bool leggi_marker_rep(); @@ -106,7 +106,7 @@ bool TRic_archivi::create() _prima_volta = TRUE; _nultras = 0; _nultras_tab = 0; - _baipassa = FALSE; + _baipassa = false; return TSkeleton_application::create(); } @@ -139,7 +139,7 @@ void TRic_archivi::componi_path(TMask* msk) if (drive == "A:" || drive == "B:") _disketto = TRUE; else - _disketto = FALSE; + _disketto = false; // Fine cazzata const int pos = path.find(':'); @@ -189,13 +189,13 @@ bool TRic_archivi::leggi_marker() if (_numtotdisk == 0) { message_box(TR("Il numero totale dischi su marker non e' significativo: impossibile proseguire")); - return FALSE; + return false: } if (_progdisk != _numdisk) { message_box(FR("Il dischetto inserito (%d) non rispecchia la giusta sequenza (%d)"), _numdisk, _progdisk); - _sequenza = FALSE; + _sequenza = false; return TRUE; } else @@ -206,7 +206,7 @@ bool TRic_archivi::leggi_marker() _numinv = atoi(buffer.sub(14,17)); const TString8 tmp = buffer.sub(17,23); - _datatras = converti(tmp,FALSE); + _datatras = converti(tmp, false); _totrectras = atol(buffer.sub(23,29)); @@ -238,7 +238,7 @@ bool TRic_archivi::leggi_marker() return TRUE; } - return FALSE; + return false; } bool TRic_archivi::leggi_marker_rep() @@ -266,7 +266,7 @@ bool TRic_archivi::leggi_marker_rep() if (_progdisk != _numdisk) { message_box(FR("Il dischetto inserito (%d) non rispecchia la giusta sequenza (%d)"), _numdisk, _progdisk); - _sequenza = FALSE; + _sequenza = false; return TRUE; } else @@ -478,7 +478,7 @@ void TRic_archivi::leggi_trasfer(const char* nome) _nultras = 0; _trasf = _tras_file->path(_dittaric); - _trasf << nome; + _trasf.add(nome); _tras_file->open(_trasf); @@ -513,7 +513,7 @@ void TRic_archivi::leggi_trasfer(const char* nome) int TRic_archivi::controllo_ripartenza() { TString std; - bool flag = FALSE; + bool flag = false; int var = 0; set_firm(_dittaric); @@ -568,7 +568,7 @@ bool TRic_archivi::video_ripartenza() { leggi_trasfer("\\trasfer"); - _prima_volta = FALSE; + _prima_volta = false; TMask maskera("cg6400a"); TMask* msk = &maskera; @@ -583,19 +583,19 @@ bool TRic_archivi::video_ripartenza() msk->set(F_CODDITTARIC, _dittaric); msk->set(F_RAGSOC, _ragsoc_dittar); msk->set(F_NULTRASDSK, _numinv); - TString data1 = _datatras.string(); + TString16 data1 = _datatras.string(); msk->set(F_DATAULTRASDSK, data1); if (_nultras != 0) { msk->set(F_NULTRASTAB, _nultras); - TString data2 = _dataultras.string(); + TString16 data2 = _dataultras.string(); msk->set(F_DATAULTRASTAB, data2); } else { msk->set(F_NULTRASTAB, _nultras_tab); - TString data2 = _dataultras_tab.string(); + TString16 data2 = _dataultras_tab.string(); msk->set(F_DATAULTRASTAB, data2); } @@ -613,13 +613,13 @@ bool TRic_archivi::video_ripartenza() tasto = msk->run(); if (tasto != K_ENTER) - return FALSE; + return false; if (_baipassa) return TRUE; if (!ripartenza()) - return FALSE; + return false; if (_numinv > (_nultras_tab + 1)) warning_box(FR("Trasferimento FUORI SEQUENZA: manca un trasferimento intermedio.\n" @@ -650,11 +650,8 @@ void TRic_archivi::ripristina_trasfer() { TProgind prg (1,TR("Trasferimento archivi"),false, false); - if (_numdisk == 1) - { -// set_firm(_dittaric); + if (_numdisk == 1) fcopy(_trasfer,_trasf,false); - } else fcopy(_trasfer,_trasf,true); } @@ -662,7 +659,7 @@ void TRic_archivi::ripristina_trasfer() void TRic_archivi::trasfer2tempfile() { _trasfhard = _tras_file->path(_dittaric); - _trasfhard << HEADER; + _trasfhard.add(HEADER); switch (_scelta) { case 'S': _tras_file->fcopytemp(_trasf,_trasfhard); break; @@ -705,20 +702,15 @@ long TRic_archivi::leggi_tabella_tras() bool TRic_archivi::set_flag() { - TString sigla; - long nrec; - int j; int k = 0; - TString flag; + TString4 flag; TString record; - TString ana_com,pcon_cau; - TString uselab; - bool fatto = TRUE; + TString4 uselab; + bool fatto = true; - TConfig conf(CONFIG_DITTA); - - ana_com = conf.get("AnCfCm","cg"); - pcon_cau = conf.get("PcTcCm","cg"); + TConfig conf(CONFIG_DITTA, "cg"); + const TString4 ana_com = conf.get("AnCfCm"); + const TString4 pcon_cau = conf.get("PcTcCm"); _tras_file->open(_trasfhard); @@ -733,43 +725,43 @@ bool TRic_archivi::set_flag() record = _tras_file->record(); } - for (j = 0; j < _sigle_file.len(); j++) + for (int j = 0; j < _sigle_file.len(); j++) { - sigla = _sigle_file.mid(j,1); - nrec = atol(_nrec_file.mid(k,6)); + const char sigla = _sigle_file[j]; + const long nrec = atol(_nrec_file.mid(k,6)); if (fatto) { - if (sigla == "W" || sigla == "P") + if (sigla == 'W' || sigla == 'P') { if (nrec > 0 && pcon_cau == "") { flag = "T"; - fatto = FALSE; + fatto = false; } } else - if (sigla == "A") + if (sigla == 'A') { if (nrec > 0 && ana_com == "") { flag = "T"; - fatto = FALSE; + fatto = false; } } else - if (sigla == "Z" || sigla == "U" || sigla == "B") + if (sigla == 'Z' || sigla == 'U' || sigla == 'B') { if (nrec > 0) { flag = "C"; - fatto = FALSE; + fatto = false; } } else { flag = "*"; - fatto = FALSE; + fatto = false; } if (flag == "T") @@ -778,7 +770,7 @@ bool TRic_archivi::set_flag() uselab = ""; } - if (sigla == "W" || sigla == "P") + if (sigla == 'W' || sigla == 'P') { if (pcon_cau == "X") { @@ -787,7 +779,7 @@ bool TRic_archivi::set_flag() } } - if (sigla == "A") + if (sigla == 'A') { if (ana_com == "X") { @@ -798,11 +790,10 @@ bool TRic_archivi::set_flag() k += 6; } - record.overwrite(_sigle_file,86); - record.overwrite(_nrec_file,95); - - TString agg(7); + record.overwrite(_sigle_file, 86); + record.overwrite(_nrec_file, 95); + char agg[8]; agg[0] = _agg_cls; agg[1] = _agg_cau; agg[2] = _agg_clifo; @@ -813,14 +804,12 @@ bool TRic_archivi::set_flag() record.overwrite(agg,234); record.overwrite(uselab,240); - TString str; - str.spaces(60); + TString80 str; str.spaces(60); record.overwrite(str,241); const int size = 1024; - if (!_tras_file->write_control_rec(record, size)) - return FALSE; + return false; } conf.set("FlStTra", flag); @@ -852,5 +841,5 @@ int cg6400 (int argc, char* argv[]) TRic_archivi* main_app = new TRic_archivi(*argv[2],p3); main_app->run(argc, argv,main_app->_titolo); delete main_app; - return TRUE; + return 0; } diff --git a/cg/cg6600.cpp b/cg/cg6600.cpp index b8b0374d6..06ffd1b09 100755 --- a/cg/cg6600.cpp +++ b/cg/cg6600.cpp @@ -1277,12 +1277,11 @@ void TRic_tab::scrivi_righeIVA(long numreg) _triva->setkey(1); _triva->zero(); _triva->put(RMI_NUMREG, numreg); - TRectype riva(LF_RMOVIVA); - riva = _triva->curr(); + for (_triva->read(); !_triva->eof(); _triva->next()) { - if (_triva->curr() > riva) - break; + if (_triva->get_long(RMI_NUMREG) != numreg) + break; _triva->put(RMI_NUMREG, _nuovareg); _rmoviva->curr() = _triva->curr(); _rmoviva->write(); diff --git a/cg/cg6800.cpp b/cg/cg6800.cpp index b8ed3e9a6..8514e4d21 100755 --- a/cg/cg6800.cpp +++ b/cg/cg6800.cpp @@ -632,7 +632,7 @@ bool TVar_mov::setta_campi_maschera_iva(TMask& m) regiva.trim(); TString codcaus = _rec_mov->get (MOV_CODCAUS); long codcf = _rec_mov->get_long(MOV_CODCF); - TString ocfpi = _rec_mov->get (MOV_OCFPI); + TString16 ocfpi = _rec_mov->get (MOV_OCFPI); char provvis = _rec_mov->get_char(MOV_PROVVIS); /***************************************************** diff --git a/cg/cg6900.cpp b/cg/cg6900.cpp index 2c697ab69..7063c4bb1 100755 --- a/cg/cg6900.cpp +++ b/cg/cg6900.cpp @@ -102,12 +102,12 @@ void TInv_cont::main_loop() long ditta = msk->get_long(F_DITTAINV); set_firm(ditta); - TConfig conf(CONFIG_DITTA); - TString std = conf.get("FlStInv"); + TConfig conf(CONFIG_DITTA, "cg"); + const TString& std = conf.get("FlStInv"); if (_scelta == 'S' && std != "D") { - TString appname = "cg6 -8 L"; + const char* const appname = "cg6 -8 L"; TString corpo = ""; TDate data = msk->get(F_DATALIM); @@ -182,9 +182,8 @@ void TInv_cont::main_loop() { // aggiorna_marker(str,23); - _trasf = ""; _trasf = firm2dir(0); - _trasf << "\\trasfer"; + _trasf.add("trasfer"); ::remove(_trasf); _tras_file.open(_trasf,TRUE); @@ -573,11 +572,11 @@ bool TInv_cont::esiste_tabella_studio() return TRUE; } + bool TInv_cont::leggi_header() { - _header = ""; _header = firm2dir(0); - _header << HEADER; + _header.add(HEADER); _tras_file.open(_header); @@ -729,7 +728,7 @@ bool TInv_cont::controlla_stato_invio() { set_firm(_ditta); - TConfig conf(CONFIG_DITTA); + TConfig conf(CONFIG_DITTA, "cg"); _std = conf.get("FlStInv"); if (_stato != _std) @@ -1547,18 +1546,19 @@ void TInv_cont::iva_inviata(long numreg) } } -void TInv_cont::movIVA2tempfile(TString& key, TMask& m) +void TInv_cont::movIVA2tempfile(const TString& key, TMask& m) { - TString ocfpi; - TDate datareg; - bool inviva; - bool provvis; - int size = 1024; + const int size = 1024; + + TString16 ocfpi; + TDate datareg; + bool inviva; + bool provvis; _tras_file.open(_header); - long items = _rmoviva->items(); - _prog = new TProgind(items,"Invio movimenti Iva in corso... Prego attendere.",FALSE); + const long items = _rmoviva->items(); + _prog = new TProgind(items, TR("Invio movimenti Iva"), FALSE); _rmoviva->setkey(1); @@ -1566,7 +1566,7 @@ void TInv_cont::movIVA2tempfile(TString& key, TMask& m) _rmoviva->first(); else { - long numreg = atol(key.mid(0,7)); + const long numreg = atol(key.mid(0,7)); _rmoviva->zero(); _rmoviva->put(RMI_NUMREG, numreg); _rmoviva->put(RMI_NUMRIG, 1); @@ -1595,7 +1595,7 @@ void TInv_cont::movIVA2tempfile(TString& key, TMask& m) } } else - inviva = FALSE; + inviva = false; // Controlla data limite invio if ( inviva || datareg > _datalimsk ) @@ -1625,10 +1625,8 @@ void TInv_cont::movIVA2tempfile(TString& key, TMask& m) } leggi_record_controllo(); - TString chiave; - chiave.format("%07ld", nreg); - TString sigla("U"); - _control_rec.overwrite(sigla,240); + TString8 chiave; chiave.format("%07ld", nreg); + _control_rec.overwrite("U",240); // Sigla _control_rec.overwrite(chiave,241); _tras_file.write_control_rec(_control_rec,size); @@ -1646,16 +1644,18 @@ void TInv_cont::movIVA2tempfile(TString& key, TMask& m) //la chiave e' compilata con i dati del file precedente. leggi_record_controllo(); - TString chiave,app,sigla; - app.format("%-60s", (const char*) chiave); - char sigla_p = _tras_file.ult_file()[0]; - int posiz = _files.find(sigla_p); - TString nuova_sigla = " "; + + const char sigla_p = _tras_file.ult_file()[0]; + const int posiz = _files.find(sigla_p); + TString4 nuova_sigla = " "; if (posiz < _files.len()) nuova_sigla = _files.mid(posiz+1,1); _control_rec.overwrite(nuova_sigla,240); + + TString80 app; app.spaces(60); _control_rec.overwrite(app,241); + _tras_file.write_control_rec(_control_rec,size); _tras_file.close(); @@ -1664,7 +1664,7 @@ void TInv_cont::movIVA2tempfile(TString& key, TMask& m) } void TInv_cont::SC_inviato(char tipo,int gruppo,int conto,long sottoc, - int anno,TString& numpart,int nriga) + int anno,const TString& numpart,int nriga) { _part->setkey(1); _part->zero(); @@ -1685,12 +1685,12 @@ void TInv_cont::SC_inviato(char tipo,int gruppo,int conto,long sottoc, void TInv_cont::movSC2tempfile(TString& key, TMask& m) { - int size = 1024; + const int size = 1024; _tras_file.open(_header); - long items = _part->items(); - _prog = new TProgind(items,"Invio movimenti di Saldaconto in corso... Prego attendere.",FALSE); + const long items = _part->items(); + _prog = new TProgind(items, TR("Invio movimenti di Saldaconto."), FALSE); _part->setkey(1); @@ -1703,7 +1703,7 @@ void TInv_cont::movSC2tempfile(TString& key, TMask& m) int conto = atoi(key.mid(4,3)); long sottoc = atol(key.mid(7,6)); int anno = atoi(key.mid(13,4)); - TString numpart = key.mid(17,7); + TString8 numpart= key.mid(17,7); int nriga = atoi(key.mid(24,4)); _part->zero(); _part->put(PART_TIPOCF, tipo); @@ -1756,10 +1756,10 @@ void TInv_cont::movSC2tempfile(TString& key, TMask& m) scrivi_righePAGSCA(tipo,gruppo,conto,sottoc,anno,numpart,nriga); leggi_record_controllo(); - TString chiave; + TString80 chiave; chiave.format("%c%03d%03d%06ld%04d%7s%04d", tipo,gruppo,conto,sottoc,anno,(const char*)numpart,nriga); - TString sigla("B"); - _control_rec.overwrite(sigla,240); + + _control_rec.overwrite("B",240); // Sigla _control_rec.overwrite(chiave,241); _tras_file.write_control_rec(_control_rec,size); @@ -1788,7 +1788,7 @@ void TInv_cont::movSC2tempfile(TString& key, TMask& m) } void TInv_cont::scrivi_righeSCAD(char tipocf,int gruppo,int conto,long sottoc, - int anno,TString& numpart,int nriga) + int anno,const TString& numpart,int nriga) { _scad->zero(); _scad->put(SCAD_TIPOCF, tipocf); @@ -1802,26 +1802,24 @@ void TInv_cont::scrivi_righeSCAD(char tipocf,int gruppo,int conto,long sottoc, _scad->put(SCAD_NUMPART, numpart); _scad->put(SCAD_NRIGA, nriga); - TRectype scad (_scad->curr()); - + const TRectype scad = _scad->curr(); + const TString16 numpart_rec = scad.get(SCAD_NUMPART); + for (_scad->read(_isgteq); !_scad->eof(); _scad->next()) { - TString rec = scad.get(SCAD_NUMPART); - TString file = _scad->get(SCAD_NUMPART); - - if (_scad->curr() != scad || file != rec) break; + const TString& numpart_file = _scad->get(SCAD_NUMPART); + if (_scad->curr() != scad || numpart_file != numpart_rec) + break; _tscad->curr() = _scad->curr(); if (_tscad->read() == NOERR) { - _tscad->zero(); _tscad->curr() = _scad->curr(); _tscad->rewrite(); } else { - _tscad->zero(); _tscad->curr() = _scad->curr(); _tscad->write(); } @@ -1872,44 +1870,45 @@ void TInv_cont::scrivi_righePAGSCA(char tipocf,int gruppo,int conto,long sottoc, int cg6900 (int argc, char* argv[]) { - switch (*argv[2]) + const char t = argc > 2 ? argv[2][0] : ' '; + switch (t) { - case 'S': + case 'S': { - TInv_cont* main_app = new TInv_cont(*argv[2]); + TInv_cont* main_app = new TInv_cont('S'); main_app->run(argc, argv,main_app->_titolo); delete main_app; } break; - case 'P': + case 'P': { - TInv_cont* main_app = new TInv_cont(*argv[2]); + TInv_cont* main_app = new TInv_cont('P'); main_app->run(argc, argv,main_app->_titolo); delete main_app; } break; - case 'L': + case 'L': { TLista_archivi* a = new TLista_archivi; - a->run(argc, argv,"Lista controllo archivi"); + a->run(argc, argv, TR("Lista controllo archivi")); delete a; } break; - case 'R': + case 'R': { TRip_flag* a = new TRip_flag; - a->run(argc, argv,"Ripristino flag movimenti"); + a->run(argc, argv,TR("Ripristino flag movimenti")); delete a; } break; - case 'C': + case 'C': { TCanc_file_invio a; - a.run(argc, argv,"Eliminazione file invio"); + a.run(argc, argv,TR("Eliminazione file invio")); } break; - default: + default: break; } diff --git a/cg/cg6900.h b/cg/cg6900.h index da88782b3..26f5435f8 100755 --- a/cg/cg6900.h +++ b/cg/cg6900.h @@ -41,7 +41,8 @@ class TInv_cont : public TSkeleton_application char _scelta; - TString _control_rec, _header, _trasf, _std, _stato, _marker, _nome_simbolico; + TFilename _trasf, _header; + TString _control_rec, _std, _stato, _marker, _nome_simbolico; TString _files, _codcaus, _numdoc, _reg, _codpag, _tipodoc, _codcausm, _sigle,_cpg_nc; TString _ocfpi, _ragsococc, _indocc, _capocc, _localocc, _provocc, _codvali, _codval; bool _esiste_ditta, _esiste_record, _inviato, _flag_provvis, _flag_bollato; @@ -102,18 +103,18 @@ public: void scrivi_righePN(long numreg); void primanota_inviata(long numreg); - void movIVA2tempfile(TString& key,TMask& m); + void movIVA2tempfile(const TString& key,TMask& m); bool occasionali(const TString& ocfpi); void iva_inviata(long numreg); void movSC2tempfile(TString& key,TMask& m); - void scrivi_righeSCAD(char,int,int,long,int,TString&,int); + void scrivi_righeSCAD(char,int,int,long,int,const TString&,int); void scrivi_righePAGSCA(char,int,int,long,int,TString&,int); - void SC_inviato(char,int,int,long,int,TString&,int); + void SC_inviato(char,int,int,long,int,const TString&,int); int nprogre_interno(long nreg, int nrig); - void aggiorna_array_rate(char tipo,int g,int c,long s,int anno,TString& npart, int nrata); - int ultima_rata_partita(char tipo,int g,int c,long s,int anno,TString& npart); + void aggiorna_array_rate(char tipo,int g,int c,long s,int anno,const TString& npart, int nrata); + int ultima_rata_partita(char tipo,int g,int c,long s,int anno,const TString& npart); void partita2trasfer(TString& record, bool crea_record_riferimento = TRUE); void pagsca2trasfer (TString& record, real& importo, real& importoval); long crea_record_riferimento_PN(); diff --git a/cg/cg6902.cpp b/cg/cg6902.cpp index 1d2b36d52..e053bb770 100755 --- a/cg/cg6902.cpp +++ b/cg/cg6902.cpp @@ -1186,7 +1186,8 @@ bool TInv_cont::testata_mov_IVA(long numreg) _tmov->setkey(1); _tmov->zero(); _tmov->put(MOV_NUMREG, numreg); - if (_tmov->read() == NOERR) + const bool ok = _tmov->read() == NOERR; + if (ok) { _codcf = _tmov->get_long(MOV_CODCF); _data74ter = _tmov->get_date(MOV_DATA74TER); @@ -1194,18 +1195,15 @@ bool TInv_cont::testata_mov_IVA(long numreg) _codvali = _tmov->get (MOV_CODVALI); _cambioi = _tmov->get_real(MOV_CAMBIOI); _corrval = _tmov->get_real(MOV_CORRVALUTA); - _ocfpi = _tmov->get (MOV_OCFPI); _dataregiva = _tmov->get_date(MOV_DATAREG); _inviato = _tmov->get_bool(MOV_INVIVA); _tipodoc = _tmov->get (MOV_TIPODOC); _provvis = _tmov->get_char(MOV_PROVVIS); - if (_ocfpi.not_empty()) + _ocfpi = _tmov->get (MOV_OCFPI); + if (_ocfpi.full()) cerca_occasionale(); } - else - return FALSE; - - return TRUE; + return ok; } void TInv_cont::cerca_occasionale() @@ -1233,6 +1231,7 @@ void TInv_cont::cerca_occasionale() void TInv_cont::cerca_comune_occas(const TString& com) { +/* TLocalisamfile comuni (LF_COMUNI); comuni.setkey(1); @@ -1243,30 +1242,34 @@ void TInv_cont::cerca_comune_occas(const TString& com) _localocc = comuni.get(COM_DENCOM); _provocc = comuni.get(COM_PROVCOM); } +*/ + TString8 comkey; comkey << " |" << com; + const TRectype& comrec = cache().get(LF_COMUNI, comkey); + _localocc = comrec.get(COM_DENCOM); + _provocc = comrec.get(COM_PROVCOM); } // Invia a sistema un movimento IVA bool TInv_cont::invio_mov_IVA() { const int size = 256; - TString record(size); + // TString256 record(size); + TString256 record; long nreg_p; int numero_righe = 0; nreg_p = -1; - long cicli = _triva->items(); - _prog = new TProgind(cicli,"Movimenti Iva: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); + const long cicli = _triva->items(); + _prog = new TProgind(cicli,TR("Movimenti Iva: generazione file TRASFER per Sistema\nPrego attendere."),FALSE); _tras_file.open(_trasf,TRUE); - for (_triva->first(); !_triva->eof(); _triva->next()) + TString str; + for (int err = _triva->first(); err == NOERR; err = _triva->next()) { - TString str; - - _prog->addstatus(1); - - record.spaces(); + _prog->addstatus(1); + record.spaces(); long nreg = _triva->get_long(RMI_NUMREG); int nrig = _triva->get_int (RMI_NUMRIG); @@ -1363,17 +1366,16 @@ bool TInv_cont::invio_mov_IVA() str.format("%-.2s", (const char*) _provocc); record.overwrite(str,131); //Provincia cliente occasionale + + record.overwrite(_ocfpi, 199); //Codice occasionale alla pos 200 (aggiunta AGA) } - int tipoatt = _triva->get_int(RMI_TIPOATT); + const int tipoatt = _triva->get_int(RMI_TIPOATT); str.format("%01d", tipoatt); record.overwrite(str,133); //Tipo attivita' - bool intra = _triva->get_bool(RMI_INTRA); - if (intra) - record.overwrite("X",134); - else - record.overwrite(" ",134); //Flag causale x acquisti intracomunitari + const bool intra = _triva->get_bool(RMI_INTRA); + record.overwrite(intra ? "X" : " ",134); //Flag causale x acquisti intracomunitari /* TString corrlire = _corrlire.string(); @@ -1388,24 +1390,27 @@ bool TInv_cont::invio_mov_IVA() /* Cambio intra con 5 decimali */ dec2integer(_cambioi,100000L); - TString cambioi = _cambioi.string(); + TString16 cambioi = _cambioi.string(); if (_cambioi.sign() < 0) negPC2negAS(cambioi); str.format("%011s", (const char*) cambioi); record.overwrite(str,149); //Cambio dec2integer(_corrval,1000); - TString corrval = _corrval.string(); + TString16 corrval = _corrval.string(); if (_corrval.sign() < 0) negPC2negAS(corrval); str.format("%014s", (const char*) corrval); record.overwrite(str,160); //Corrispettivo in valuta + const bool nota = _triva->get_bool(RMI_NOTAVARECF); + record.overwrite(nota ? "1" : "0", 177); //Nota variazione relativa anni precedenti + _tmov->setkey(1); _tmov->put(MOV_NUMREG, nreg); if (_tmov->read() == NOERR) { - int meseliq = _tmov->get_int(MOV_MESELIQ); + const int meseliq = _tmov->get_int(MOV_MESELIQ); if (meseliq > 0) { str.format("%02d", meseliq); @@ -1430,11 +1435,11 @@ int TInv_cont::nprogre_interno(long numreg, int numrig) { int riga = 1; - TString key (format("%06ld%02d", numreg, numrig)); + TString8 key; key.format("%06ld%02d", numreg, numrig); if (!_riga_interna.is_key(key)) { - TString nr (format("%d", riga)); + TString8 nr; nr.format("%d", riga); _riga_interna.add(key,nr); } else @@ -1449,9 +1454,9 @@ int TInv_cont::nprogre_interno(long numreg, int numrig) long TInv_cont::crea_record_riferimento_PN() { - int size = 256; - TString record(size); - TString str; + const int size = 256; + TString256 record; + TString8 str; _ultima_nreg++; @@ -1465,7 +1470,7 @@ long TInv_cont::crea_record_riferimento_PN() str.format("%02d", 1); record.overwrite(str,8); //Numero di riga - TString datareg (_tpart->get_date(PART_DATAREG)); + TString16 datareg (_tpart->get_date(PART_DATAREG)); str = riconverti(datareg,FALSE); str.format("%06s", (const char*) str); record.overwrite(str,15); //Data di registrazione @@ -1502,7 +1507,7 @@ long TInv_cont::crea_record_riferimento_PN() str.format("%c", tipocf); record.overwrite(str,219); //Flag Cliente / Fornitore - TString codcaus (_tpart->get(PART_CODCAUS)); + TString4 codcaus (_tpart->get(PART_CODCAUS)); if (tipocf != ' ' && codcaus.empty()) codcaus = (TString&)_tab_cau[_tpart->get_int(PART_TIPOMOV)-1]; // Causale str.format("%03s",(const char*)codcaus); @@ -1702,7 +1707,8 @@ void TInv_cont::partita2trasfer(TString& record, bool crea_record_riferimento) _numrec_sc++; } -void TInv_cont::aggiorna_array_rate(char tipo,int g,int c,long s,int anno,TString& numpart, int rata) +void TInv_cont::aggiorna_array_rate(char tipo,int g,int c,long s,int anno, + const TString& numpart, int rata) { TString key (format("%c%02d%02d%06ld%4d%-7s", tipo, g, c, s, anno, (const char*) numpart)); @@ -1720,14 +1726,16 @@ void TInv_cont::aggiorna_array_rate(char tipo,int g,int c,long s,int anno,TStrin } } -int TInv_cont::ultima_rata_partita(char tipo,int g,int c,long s,int anno,TString& numpart) +int TInv_cont::ultima_rata_partita(char tipo,int g,int c,long s, + int anno, const TString& numpart) { int rata = 1; - TString key (format("%c%02d%02d%06ld%4d%-7s", tipo, g, c, s, anno, (const char*) numpart)); + TString80 key; + key.format("%c%02d%02d%06ld%4d%-7s", tipo, g, c, s, anno, (const char*)numpart); if (!_ultima_rata.is_key(key)) { - TString nr (format("%2d", rata)); + TString4 nr; nr.format("%2d", rata); _ultima_rata.add(key,nr); } else diff --git a/cg/cg6903.cpp b/cg/cg6903.cpp index dcfcb0644..2b2e96c85 100755 --- a/cg/cg6903.cpp +++ b/cg/cg6903.cpp @@ -51,7 +51,7 @@ void TRip_flag::main_loop() if (rippn || ripiva) { long cicli = _mov->items(); - _prog = new TProgind(cicli,"Ripristino movimenti in corso... Prego attendere.",FALSE); + _prog = new TProgind(cicli, TR("Ripristino movimenti in corso"), FALSE); _mov->setkey(1); _mov->zero(); diff --git a/cg/cg6904.cpp b/cg/cg6904.cpp index 352202556..5668d04b2 100755 --- a/cg/cg6904.cpp +++ b/cg/cg6904.cpp @@ -6,10 +6,8 @@ bool TInv_cont::invio_contabilita_PC() { - char sigla; - TString nrec,files; - bool header = TRUE; const int size = 1024; + bool header = true; _numrec_cau = 0; _numrec_clifo = 0; @@ -22,15 +20,15 @@ bool TInv_cont::invio_contabilita_PC() leggi_record_controllo(); - files = _tras_file.sigle_file(); - nrec = _tras_file.nrec_file(); + TString16 files = _tras_file.sigle_file(); + TString nrec = _tras_file.nrec_file(); files.trim(); _tras_file.open(_trasf,TRUE); for (int i = 0; i < files.len();i++) { - sigla = files[i]; + const char sigla = files[i]; //_numrec = atol(nrec.mid(i * 6,6)); if (header) @@ -93,10 +91,8 @@ bool TInv_cont::invio_contabilita_PC() aggiorna_header(files); aggiorna_trasfer(files); - TString str; - calcola_totale_record(); - str.format("%06ld", _tot_rec); + TString8 str; str.format("%06ld", _tot_rec); aggiorna_marker(str,26); return TRUE; @@ -104,7 +100,7 @@ bool TInv_cont::invio_contabilita_PC() void TInv_cont::invio_testata_causali() { - int size = 1024; + const int size = 1024; TString record(size); TString cod; @@ -964,8 +960,8 @@ void TInv_cont::invio_righe_contabili() TString4 rowtype = _trmov->get(RMV_ROWTYPE); record.overwrite(rowtype,158); - record.overwrite(_trmov->get("CODCMS"),159); - record.overwrite(_trmov->get("FASCMS"),179); +// record.overwrite(_trmov->get("CODCMS"),159); +// record.overwrite(_trmov->get("FASCMS"),179); _tras_file.write_control_rec(record,size); _numrec_pn++; @@ -1001,14 +997,13 @@ void TInv_cont::invio_righe_IVA() _prog = new TProgind(cicli,"Movimenti Iva: generazione file TRASFER per PC\nPrego attendere.",FALSE); _tras_file.open(_trasf,TRUE); - TString tipodoc; + TString4 tipodoc; + TString16 str; for (_triva->first(); !_triva->eof(); _triva->next()) { - TString str; - _prog->addstatus(1); - + record.spaces(); long nreg = _triva->get_long(RMI_NUMREG); @@ -1022,7 +1017,7 @@ void TInv_cont::invio_righe_IVA() str.format("%03d", nrig); record.overwrite(str,9); //Numero di riga - TString codiva = _triva->get(RMI_CODIVA); + TString4 codiva = _triva->get(RMI_CODIVA); str.format("%-4s", (const char*) codiva); record.overwrite(str,60); @@ -1096,9 +1091,6 @@ void TInv_cont::invio_righe_IVA() str.format("%03d", rigaiva); record.overwrite(str,113); - record.overwrite(_triva->get("CODCMS"),118); - record.overwrite(_triva->get("FASCMS"),138); - _tmov->setkey(1); _tmov->put(MOV_NUMREG, nreg); if (_tmov->read() == NOERR) @@ -1110,6 +1102,10 @@ void TInv_cont::invio_righe_IVA() record.overwrite(str, 116); } } + +// record.overwrite(_triva->get(RMI_CODCMS),118); +// record.overwrite(_triva->get(RMI_FASCMS),138); + record.overwrite(_triva->get(RMI_NAVP),148); _numrec_iva++; diff --git a/cg/cglib01.cpp b/cg/cglib01.cpp index 54bc1287b..f84e069b0 100755 --- a/cg/cglib01.cpp +++ b/cg/cglib01.cpp @@ -256,26 +256,31 @@ const TString& cap2comune(const TString& cap, const TString& denom) if (cappone[2] == '1') //e' un capoluogo di provincia cappone.overwrite("00", 3, 2); + TString80 up_denom = denom; + up_denom.upper(); + TRelation relcom(LF_COMUNI); TRectype& comrec = relcom.curr(); - comrec.put(COM_CAPCOM, cappone); + comrec.put(COM_CAPCOM, cappone); + + TString4 codone; TCursor comuni (&relcom, "", 3, &comrec, &comrec); const TRecnotype items = comuni.items(); comuni.freeze(); - - TString4 codone; double cmp = 0.69; for (comuni = 0L; comuni.pos() < items; ++comuni) { - const TString& denominazione = comrec.get(COM_DENCOM); - const double fc = xvt_str_fuzzy_compare (denom, denominazione); + TString80 denominazione = comrec.get(COM_DENCOM); + denominazione.upper(); + const double fc = xvt_str_fuzzy_compare (up_denom, denominazione); if (fc > cmp) { codone = comrec.get(COM_COM); cmp = fc; } - } + } + if (codone.full()) return get_tmp_string() = codone; } diff --git a/cg/cglib03.cpp b/cg/cglib03.cpp index fd4bd0854..dc3ef9360 100755 --- a/cg/cglib03.cpp +++ b/cg/cglib03.cpp @@ -130,7 +130,7 @@ TInteressi_IVA_table::~TInteressi_IVA_table() int TInteressi_IVA_table::read(int anno, int mese) { - TString16 k; k.format("%04d%02d",anno,mese); + TString8 k; k.format("%04d%02d",anno,mese); zero();put("CODTAB",k); if (TTable::read(_isgteq) == NOERR) { @@ -214,10 +214,13 @@ bool TRigaiva_array::add_riga(const TRectype& iva) { const int dec = TCurrency::get_firm_dec(); real impo_ind = impo * percind / CENTO; impo_ind.round(dec); - real impos_ind = impos * percind / CENTO; impos_ind.round(dec); const real impo_det = impo - impo_ind; - const real impos_det = impos - impos_ind; - + + const TCodiceIVA iva(codiva); + + real impos_ind = iva.imposta(impo_ind, dec); + const real impos_det = impos - impos_ind; + ok = add_riga(impo_det,impos_det,ZERO,ZERO,codiva,0,tipocr,intra,tipoatt); ok &= add_riga(impo_ind,impos_ind,ZERO,ZERO,codiva,tipodet,tipocr,intra,tipoatt); } @@ -244,13 +247,14 @@ bool TRiga_array::add_riga(const real& imponibile, const real& imposta, TRiga& r = riga(i); if (r._codiva==codiva) { - found = TRUE; + found = true; r._imponibile += imponibile; r._imposta += imposta; r._implordo += implordo; r._imponibilep += imponibilep; r._impostap += impostap; r._implordop += implordop; + break; } } if (!found) @@ -267,13 +271,13 @@ bool TRiga_array::add_riga(const real& imponibile, const real& imposta, bool TDociva_array::add_riga(const char* _descrdociva, const real& _importo,const int _natdoc) { - bool found = FALSE; + bool found = false; for (int i = 0; i < items(); i++) { TDociva& r = riga(i); if (r._descrdoc==_descrdociva) { - found = TRUE; + found = true; if ((r._ndoc == 1)||(r._ndoc == 2)||(r._ndoc == 9))//||(r._ndoc == 4)) r._totdociva += _importo; } @@ -291,13 +295,13 @@ bool TDociva_array::add_riga(const char* _descrdociva, const real& _importo,cons bool TTipodoc_array::add_riga(const char* tipodoc, const char* descrdoc, const real& totdoc) { - bool found = FALSE; + bool found = false; for (int i = 0; i < items(); i++) { TTipodoc& r = (TTipodoc&)(*this)[i]; if (r._tipodoc==tipodoc) { - found = TRUE; + found = true; r._totdoc += totdoc; } } diff --git a/cg/cglib04.cpp b/cg/cglib04.cpp index 1f3100db7..adb76dd1d 100755 --- a/cg/cglib04.cpp +++ b/cg/cglib04.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -295,7 +294,7 @@ TRic_recfield::operator const char*() const // Ritorna il record di controllo del trasfer const char* TTransfer_file::record() const { - return (const char*)*_control_rec; + return *_control_rec; } TTransfer_file::TTransfer_file(char scelta) @@ -533,10 +532,10 @@ bool TTransfer_file::read_control_rec_t() _sigle_file = _control_rec_t.sub(38,47); _nrec_file = _control_rec_t.sub(47,101); - TString ult_file = _control_rec_t.sub(240,241); - TString key = _control_rec_t.sub(241,256); - _ult_file = ult_file.trim(); - _key = key.trim(); + _ult_file = _control_rec_t.sub(240,241); + _ult_file = _ult_file.trim(); + _key = _control_rec_t.sub(241,256); + _key = _key.trim(); fill_index(_sigle_file,_nrec_file); } else @@ -591,14 +590,14 @@ long TTransfer_file::start(int i) return 1; else { - TToken_string data = (TToken_string&)_index[i-1]; + TToken_string& data = (TToken_string&)_index[i-1]; return data.get_long(1) + 1; } } long TTransfer_file::end(int i) { - TToken_string data = (TToken_string&)_index[i]; + TToken_string& data = (TToken_string&)_index[i]; return data.get_long(4); } @@ -608,7 +607,7 @@ long TTransfer_file::rec(int i) if (i > 0) { - TToken_string data = (TToken_string&)_index[i-1]; + TToken_string& data = (TToken_string&)_index[i-1]; rec = (data.get_long(1)) + 1; } @@ -618,11 +617,9 @@ long TTransfer_file::rec(int i) int TTransfer_file::num(char sigla) { const int items = _index.items(); - TString16 dep; - for (int i = 0; i < items; i++) { - dep = name(i); + const char* dep = name(i); if ( dep[0] == sigla) return i; } @@ -655,13 +652,12 @@ void TTransfer_file::readat(long recnum) pos = end(i-1) + 1; offset = recnum - nrec(i-1); pos += offset * lenrec(i); - break; } else { pos = recnum * lenrec(i); - break; } + break; } } _curpos = recnum; @@ -676,54 +672,37 @@ int TTransfer_file::read_rec_trasfer(long numrec, int size) return letti; } -char TTransfer_file::flg_agg(char sigla) +char TTransfer_file::flg_agg(char sigla) const { char flag; - - if (sigla == 'W') - flag = _control_rec->sub(235,236)[0]; - - if (sigla == 'A') - flag = _control_rec->sub(236,237)[0]; - - if (sigla == 'P') - flag = _control_rec->sub(237,238)[0]; - + switch (sigla) + { + case 'W': flag = (*_control_rec)[235]; break; + case 'A': flag = (*_control_rec)[236]; break; + case 'P': flag = (*_control_rec)[237]; break; + default : flag = ' '; break; + } return flag; } -bool TTransfer_file::numprot_att() +bool TTransfer_file::numprot_att() const { - char flag; - - flag = _control_rec->sub(238,239)[0]; - if (flag == 'X') - return true; - else - return false; - - return true; + char flag = (*_control_rec)[238]; + return flag == 'X'; } -bool TTransfer_file::numprot_pas() +bool TTransfer_file::numprot_pas() const { - char flag; - - flag = _control_rec->sub(239,240)[0]; - if (flag == 'X') - return true; - else - return false; - - return true; + char flag = (*_control_rec)[239]; + return flag == 'X'; } -char TTransfer_file::flg_agg_IV(char sigla) +char TTransfer_file::flg_agg_IV(char sigla) const { char flag = ' '; if (sigla == 'P') - flag = _control_rec->sub(234,235)[0]; + flag = (*_control_rec)[234]; return flag; } @@ -757,20 +736,20 @@ void TTransfer_file::writeat(const char* str,int size,int fieldnum,const char* f int TTransfer_file::go2field(int fieldnum, const char* file, const long nrec, bool seek) { - TString256 key; + int pos_campo = 0; if (nrec < 0) readat(_curpos); // Mi posiziono all' inizio del record else readat(nrec); + TString16 key; if (!file) key.format("%2s%d",(const char*)_curfile,fieldnum); else key.format("%2s%d", file, fieldnum); - int pos_campo = 0; - if (_trc.is_key((const char *) key)) + if (_trc.is_key(key)) { TToken_string * data = (TToken_string *) _trc.objptr(key); @@ -1814,12 +1793,12 @@ void TTransfer_file::scrivi_occasionali(const TString& record, TString& cfpi) err = _toccas->rewrite(); } -void TTransfer_file::write_tmp_movIVA(TString& record) +void TTransfer_file::write_tmp_movIVA(const TString& record) { TString key,str; int numfield = 3; //Per i movimenti i primi due campi della mappa non sono significativi //ai fini del trasferimento (flag record gia trasferito e nuovo ultimo numero di registrazione). - const TMappa_trc& trc = mappa(); + const TMappa_trc& trc = mappa(); TIsamtempfile* file = NULL; TRectype* dep = NULL; int logicnum; @@ -1831,9 +1810,9 @@ void TTransfer_file::write_tmp_movIVA(TString& record) const TString4 sigla = record.mid(0,2); key.format("%2s%d", (const char*)sigla, numfield); - if (trc.is_key((const char *) key)) + if (trc.is_key(key)) { - TString cfpi; + TString16 cfpi; int logicnum_p = 0; @@ -1882,21 +1861,21 @@ void TTransfer_file::write_tmp_movIVA(TString& record) logicnum_p = logicnum; - int from = trc.from(key); - int to = trc.to(key); - TString16 fname = trc.field_name(key); + const int from = trc.from(key); + const int to = trc.to(key); + const TString16 fname = trc.field_name(key); TString80 field = record.sub(from-1,to); int flag = trc.flag(key); int dec = trc.flag_bis(key); - if (logicnum == LF_MOV && fname == "TOTDOC") + if (logicnum == LF_MOV && fname == MOV_TOTDOC) { numfield++; key.format("%2s%d", (const char*) sigla,numfield); continue; } - TRecfield campo (*dep,fname); + const TRecfield campo(*dep, fname); if (campo.type() == _realfld) { negativo(field); @@ -1919,19 +1898,19 @@ void TTransfer_file::write_tmp_movIVA(TString& record) if (logicnum == LF_RMOVIVA) { - if (fname == "NUMRIG") + if (fname == RMI_NUMRIG) { - int nriga = atoi(field); + const int nriga = atoi(field); field.format("%3d", nriga); } } - if (logicnum == LF_MOV && ( fname == "NUMREG" || flag == 2 ) ) + if (logicnum == LF_MOV && ( fname == MOV_NUMREG || flag == 2 ) ) { - if (fname == "NUMREG") + if (fname == MOV_NUMREG) { - dep->put("NUMREG", _numreg); - dep->put("OCFPI", cfpi); + dep->put(MOV_NUMREG, _numreg); + dep->put(MOV_OCFPI, cfpi); } if (flag == 2) @@ -1941,7 +1920,7 @@ void TTransfer_file::write_tmp_movIVA(TString& record) } } else - if (logicnum == LF_RMOVIVA && fname == "NUMREG") + if (logicnum == LF_RMOVIVA && fname == RMI_NUMREG) { int annoes = cerca_annoes(_numreg,tipodoc); dep->put("ANNOES", annoes); @@ -1951,9 +1930,9 @@ void TTransfer_file::write_tmp_movIVA(TString& record) dep->put(fname, field); numfield++; - key.format("%2s%d", (const char*) sigla,numfield); + key.format("%2s%d", (const char*)sigla,numfield); } - while (trc.is_key((const char*) key)); + while (trc.is_key(key)); _prog->addstatus(1); trasfer_data_moviva(*file, *dep, logicnum_p); @@ -3142,7 +3121,7 @@ bool TTransfer_file::fcopytemp(const char* orig, const char* dest) bool is_delete = false, tpcon_valid = false; const char* const rflag = "rb"; - const char* wflag = "ab"; + const char* const wflag = "ab"; TLocalisamfile tabella(LF_TAB); @@ -3187,11 +3166,11 @@ bool TTransfer_file::fcopytemp(const char* orig, const char* dest) if ( (pos = sigle.find('Z')) >= 0) { _tmpmov = "%"; - _tmpmov << path(); - _tmpmov << SLASH << TEMP_MOV; + _tmpmov << path(); + _tmpmov.add(TEMP_MOV); _tmprmov = "%"; _tmprmov << path(); - _tmprmov << SLASH << TEMP_RMOV; + _tmprmov.add(TEMP_RMOV); nrec_mov = atol(nrec.mid(pos*6,6)); } if ( (pos = sigle.find('U')) >= 0) @@ -3483,24 +3462,21 @@ void TTransfer_file::scrivi_PN(long nrec) void TTransfer_file::scrivi_IVA(long nrec) { - TString buffer(sizeT); - TString16 trec; + TString buffer(sizeT); _prog = new TProgind (nrec,TR("Trasferimento Movimenti Iva in corso\nPrego attendere"),false, true, 1); - TRic_recfield recf (_ttab->curr(), "S0", 0, sizeT); + const TRic_recfield recf(_ttab->curr(), "S0", 0, sizeT); _ttab->zero(); _ttab->put("CODTAB", "U1"); - for (_ttab->read(); !_ttab->eof(); _ttab->next()) + for (int err = _ttab->read(_isgteq); err == NOERR; err = _ttab->next()) { - trec = (_ttab->get("CODTAB")).left(2); - + const TString& trec = _ttab->get("CODTAB").left(2); if (trec != "U1") break; - buffer = (const char*) recf; - + buffer = (const char*)recf; write_tmp_movIVA(buffer); } delete _prog; @@ -3523,12 +3499,10 @@ void TTransfer_file::scrivi_SC(long nrec) _ttab->put("CODTAB", "B1"); for (_ttab->read(); !_ttab->eof(); _ttab->next()) { - const TString& trec = (_ttab->get("CODTAB")).left(2); - + const TString& trec = _ttab->get("CODTAB").left(2); if (trec != "B1") break; buffer = (const char*) recf; - write_tmp_movSC(buffer); } delete _prog; @@ -3563,7 +3537,6 @@ bool TTransfer_file::fcopytemp_PC(const char* orig, const char* dest) const word size = 1024; TString buffer(size); - TString16 trec; if (sigle.find('W') >= 0) { @@ -3666,9 +3639,9 @@ bool TTransfer_file::fcopytemp_PC(const char* orig, const char* dest) while (ok) { - const word letti = fread((char*)(const char*)buffer, 1, size, i); + const word letti = fread(buffer.get_buffer(size), 1, size, i); - trec = buffer.left(2); + const TString4 trec = buffer.left(2); if (trec == " 1") // Copio il record di controllo nel file di appoggio { // header. @@ -3679,7 +3652,7 @@ bool TTransfer_file::fcopytemp_PC(const char* orig, const char* dest) if (trec == "B1" || trec == "B2" || trec == "B3") { - TString app = buffer.mid(19,7); + TString8 app = buffer.mid(19,7); app.trim(); // Modifica del 06-09-96 relativa all'allineamento app.format("%-7s", (const char*) app); // del numero di riferimento partita che per i file buffer.overwrite(app,19); // temporanei deve essere sempre a sinistra @@ -4302,6 +4275,7 @@ void TTransfer_file::write_testata_movimenti(TString& record) { field = converti(field,TRUE); } + else if (fname == OCC_CFPI) { _depmov->put(fname,field); @@ -4383,13 +4357,15 @@ void TTransfer_file::write_testata_movimenti(TString& record) void TTransfer_file::write_righe_contabili(const TString& record) { - TString16 key; - int numfield = 1; const TMappa_trc& trc = mappa(); + + int numfield = 1; real importo = ZERO; int gruppo = 0; + const TString4 sigla = record.mid(0,2); + TString16 key; key.format("%2s%d", (const char*)sigla,numfield); _deprmov->zero(); @@ -4630,18 +4606,14 @@ void TTransfer_file::write_righe_IVA(TString& record) key.format("%2s%d", (const char*) sigla,numfield); } - _triva->zero(); - _triva->curr() = *_depriva; - + _triva->curr() = *_depriva; if (_triva->read() == NOERR) { - _triva->zero(); _triva->curr() = *_depriva; _triva->rewrite(); } else { - _triva->zero(); _triva->curr() = *_depriva; _triva->write(); } diff --git a/cg/cglib04.h b/cg/cglib04.h index 925ea3129..e0cc524a4 100755 --- a/cg/cglib04.h +++ b/cg/cglib04.h @@ -146,9 +146,6 @@ class TTransfer_file TRectype* _deprmov; TRectype* _depriva; TRectype* _depoccas; - //TRectype* _deppart; - //TRectype* _depscad; - //TRectype* _deppagsca; TExtrectype* _deppart; TExtrectype* _depscad; TExtrectype* _deppagsca; @@ -160,10 +157,10 @@ class TTransfer_file long _numreg, _numreg_p, _numreg_piva, _npoccas; long _nregSC, _nregSC_p; int _numrigSC, _numrigSC_p, _annoSC, _annoSC_p, _nrigaSC; - TString _numpartSC, _numpartSC_p; + TString8 _numpartSC, _numpartSC_p; int _annoes; TDate _datareg; - TString _cod_com; + TString4 _cod_com; long _curpos; long _tot_rec; // Numero totale di record nel transfer @@ -171,7 +168,7 @@ class TTransfer_file int _last_tab,_last_mov; long _ditta; - TString16 _tiporec; + TString4 _tiporec; TString16 _nome_simb; TString16 _dataultras; TString16 _sigle_file; @@ -206,7 +203,7 @@ private: int trasfer_data_tab(TIsamtempfile& file, TRectype& dep); void write_tmp_movPN(TString& record); int trasfer_data_mov(TIsamtempfile& file, TRectype& dep); - void write_tmp_movIVA(TString& record); + void write_tmp_movIVA(const TString& record); int trasfer_data_moviva(TIsamtempfile& file, TRectype& dep, int ln); // Funzioni per la ricezione del Saldaconto da Sistema void write_tmp_movSC(TString& record); @@ -288,7 +285,7 @@ public: // Funzioni che agiscono sul record di controllo del file trasfer. - bool read_control_rec(); // Legge il record del file header + bool read_control_rec(); // Legge il record del file header bool read_control_rec_t(); // Legge il record di controllo del file trasfer bool write_control_rec(const char* str, const int size); // Scrive una stringa di lunghezza size @@ -296,13 +293,13 @@ public: const char* nome_simb () const { return _nome_simb; } // Ritorna il nome simbolico del sistema inviante long ditta () const { return _ditta; } // Ritorna la ditta inviante int nultras () const { return _nultras; } // Ritorna il numero ultimo trasferimento - const char* dataultras() const { return (const char*) _dataultras; } // Ritorna la data ultimo trasferimento - const char* sigle_file() const { return (const char*) _sigle_file; } // Ritorna una stringa contenente le sigle dei file da ricevere - const char* nrec_file () const { return (const char*) _nrec_file; } // Ritorna una stringa con il numero totale di record corrispondenti ad ogni sigla dei file da ricevere - char flg_agg(char sigla); // Ritorna i flag tipo aggiornamento relativi alle tabelle - bool numprot_att(); // Ritorna il flag riattribuzione numero protocollo su fatture attive - bool numprot_pas(); // Ritorna il flag riattribuzione numero protocollo su fatture passive - char flg_agg_IV(char sigla); // Ritorna il flag tipo aggiornamento classi piano dei conti + const char* dataultras() const { return _dataultras; } // Ritorna la data ultimo trasferimento + const char* sigle_file() const { return _sigle_file; } // Ritorna una stringa contenente le sigle dei file da ricevere + const char* nrec_file () const { return _nrec_file; } // Ritorna una stringa con il numero totale di record corrispondenti ad ogni sigla dei file da ricevere + char flg_agg(char sigla) const; // Ritorna i flag tipo aggiornamento relativi alle tabelle + bool numprot_att() const; // Ritorna il flag riattribuzione numero protocollo su fatture attive + bool numprot_pas() const; // Ritorna il flag riattribuzione numero protocollo su fatture passive + char flg_agg_IV(char sigla) const; // Ritorna il flag tipo aggiornamento classi piano dei conti const char* ult_file () const { return (const char*) _ult_file; } // Ritorna l'ultima sigla file elaborato const char* key () const { return (const char*) _key; } // Ritorna la chiave ultimo record elaborato const char* record () const; // Ritorna il record di controllo del trasfer diff --git a/cg/cgpagame.cpp b/cg/cgpagame.cpp index 9c3b47d0c..083fa4852 100755 --- a/cg/cgpagame.cpp +++ b/cg/cgpagame.cpp @@ -1,8 +1,10 @@ +#include "cgpagame.h" + +#include #include #include #include -#include "cgpagame.h" #include "cg2100.h" #include @@ -18,27 +20,30 @@ inline void swap(int& x, int& y) {int tmp = x; x = y; y = tmp; } int TPagamento::_rata_ifield(int n, int f) const -{ - TToken_string& t = (TToken_string&)_rate[n]; - return t.get_int(f); +{ + int v = 0; + _rate.row(n).get(f, v); + return v; } long TPagamento::_rata_lfield(int n, int f) const { - TToken_string& t = (TToken_string&)_rate[n]; - return t.get_long(f); + long v = 0; + _rate.row(n).get(f, v); + return v; } real TPagamento::_rata_rfield(int n, int f) const { - TToken_string& t = (TToken_string&)_rate[n]; - return real(t.get(f)); + real v; + _rate.row(n).get(f, v); + return v; } TDate TPagamento::_rata_dfield(int n, int f) const { - TToken_string& t = (TToken_string&)_rate[n]; - return TDate(t.get(f)); + const TDate v = _rata_sfield(n, f); + return v; } /* Funzione sgradita al nuovo C ed anche a Guy: static bleah! @@ -490,30 +495,30 @@ void TPagamento::next_scad(TDate& d, int scad, bool mcomm, int rata) void TPagamento::set_default_type(int type, bool change_existing) { - _def_tpr = type; - if (change_existing) - { - for (int i = 0; i < n_rate(); i++) - { - TToken_string& tt = rata(i); - tt.add(type, 2); - } - _dirty = true; - } + _def_tpr = type; + if (change_existing) + { + for (int i = 0; i < n_rate(); i++) + { + TToken_string& tt = rata(i); + tt.add(type, 2); + } + _dirty = true; + } } void TPagamento::set_default_ulc(const char* ulc, bool change_existing) { - _def_ulc = ulc; - if (change_existing) - { - for (int i = 0; i < n_rate(); i++) - { - TToken_string& tt = rata(i); - tt.add(ulc, 5); - } - _dirty = true; - } + _def_ulc = ulc; + if (change_existing) + { + for (int i = 0; i < n_rate(); i++) + { + TToken_string& tt = rata(i); + tt.add(ulc, 5); + } + _dirty = true; + } } void TPagamento::remove_rata(int i) @@ -827,31 +832,22 @@ const char* TPagamento::desc_tipo(int tipo, char ulc, bool* ok) const if (ulc > ' ') { const char key[3] = { tipo+'0', toupper(ulc), '\0' }; -/* - TTable clr("%CLR"); - clr.put("CODTAB", key); - const int err = clr.read(); - if (err == NOERR) - o = clr.get("S0"); // Bravo merlo: e' locale! - else if (ok != NULL) - *ok = false; -*/ o = cache().get("%CLR", key).get("S0"); } if (*o == '\0') { switch (tipo) { - case 0: o = "Altro pagamento"; break; - case 1: o = "Rimessa diretta o contanti"; break; - case 2: o = "Tratta"; break; - case 3: o = "Ricevuta Bancaria"; break; - case 4: o = "Cessione"; break; - case 5: o = "Paghero'"; break; - case 6: o = "Lettera di credito"; break; - case 7: o = "Tratta accettata"; break; - case 8: o = "Rapporti interban. diretti"; break; - case 9: o = "Bonifici"; break; + case 0: o = TR("Altro pagamento"); break; + case 1: o = TR("Rimessa diretta o contanti"); break; + case 2: o = TR("Tratta"); break; + case 3: o = TR("Ricevuta Bancaria"); break; + case 4: o = TR("Cessione"); break; + case 5: o = TR("Paghero'"); break; + case 6: o = TR("Lettera di credito"); break; + case 7: o = TR("Tratta accettata"); break; + case 8: o = TR("Rapporti interban. diretti"); break; + case 9: o = TR("Bonifici"); break; default: if (ok != NULL) *ok = false; break; } } diff --git a/cg/cgprassi.hlp b/cg/cgprassi.hlp deleted file mode 100755 index 1dfedab79..000000000 Binary files a/cg/cgprassi.hlp and /dev/null differ diff --git a/cg/cgtrc.ini b/cg/cgtrc.ini index 813dc9692..a8c6c275f 100755 --- a/cg/cgtrc.ini +++ b/cg/cgtrc.ini @@ -223,14 +223,15 @@ U1|19|46|47|25|GRUPPO||| U1|20|48|49|25|CONTO||| U1|21|50|55|25|SOTTOCONTO||| U1|22|135|135|25|INTRA||| +U1|23|175|176|23|MESELIQ||| +U1|24|178|178|25|NOTAVARECF||| +U1|25|200|215|23|OCFPI||| U1|50|62|86||||| U1|51|249|249|23|||| U1|52|109|126||||| U1|53|127|131||||| U1|54|132|133||||| U1|56|87|108||||| -U1|57|175|176|23|MESELIQ||| -U1|58|177|192|23|OCFPI||| # # Tracciato Partite in caso di Fattura # diff --git a/cg/cgtrcpc.ini b/cg/cgtrcpc.ini index d9dc6770f..b15c0705b 100755 --- a/cg/cgtrcpc.ini +++ b/cg/cgtrcpc.ini @@ -200,6 +200,7 @@ U1|14|114|116|25|RIGAIVA||| U1|15|117|118|24|MESELIQ||| U1|16|119|138|25|CODCMS||| U1|17|139|148|25|FASCMS||| +U1|18|149|149|25|NOTAVARECF||| B1|1|3|3|28|TIPOC||| B1|2|4|6|28|GRUPPO||| B1|3|7|9|28|CONTO||| diff --git a/cg/f20.dir b/cg/f20.dir index 07bb54e6a..79993145a 100755 --- a/cg/f20.dir +++ b/cg/f20.dir @@ -1,3 +1,3 @@ 20 0 -$clifo|0|0|679|0|Clienti/Fornitori||| +$clifo|0|0|730|0|Clienti/Fornitori||| diff --git a/cg/f20.trr b/cg/f20.trr index 6802157bf..15f318d28 100755 --- a/cg/f20.trr +++ b/cg/f20.trr @@ -1,5 +1,6 @@ 20 -54 + +56 TIPOCF|1|1|0|Tipo ( liente ornitore CODCF|3|6|0|Codice RAGSOC|1|50|0|Ragione sociale @@ -32,7 +33,9 @@ PFAX|1|10|0|Prefisso del numero di FAX FAX|1|30|0|Numero di FAX PTELEX|1|10|0|Prefisso del numero di TELEX TELEX|1|30|0|Prefisso del numero di TELEX -MAIL|1|50|0|Indirizzo di posta elettronica +MAIL|1|50|0|Indirizzo di posta elettronica generico +BYMAIL|8|1|0|Consenso all' invio dei documenti per posta elettronica +DOCMAIL|1|50|0|Indirizzo di posta elettronica per i documenti DATANASC|5|8|0|Data di nascita STATONASC|2|3|0|Codice stato di nascita COMNASC|1|4|0|Codice comune di nascita diff --git a/cg/f25.dir b/cg/f25.dir index 10c8422d2..f3aba8ec4 100755 --- a/cg/f25.dir +++ b/cg/f25.dir @@ -1,3 +1,3 @@ 25 0 -$rmoviva|0|0|108|0|Righe movimento IVA|NMOV*2|| +$rmoviva|0|0|109|0|Righe movimento IVA|NMOV*2|| diff --git a/cg/f25.trr b/cg/f25.trr index 5923b60ee..46322eb8c 100755 --- a/cg/f25.trr +++ b/cg/f25.trr @@ -1,5 +1,5 @@ 25 -18 +19 ANNOES|2|4|0|Codice esercizio NUMREG|3|7|0|Numero operazione NUMRIG|2|3|0|Numero riga @@ -18,5 +18,6 @@ CONTO|2|3|0|Conto SOTTOCONTO|3|6|0|Sottoconto o codice cliente/fornitore CODCMS|1|20|0|Codice Commessa FASCMS|1|10|0|Fase Commessa +NAVP|8|1|0|Nota di variazione anni precedenti x Elenco CF 1 NUMREG+NUMRIG| diff --git a/cg/prassid.doc b/cg/prassid.doc deleted file mode 100755 index aa701a4cc..000000000 --- a/cg/prassid.doc +++ /dev/null @@ -1,83 +0,0 @@ -# prassid.doc - File configurazione ditte (commentato] -# una copia di questo file viene affibbiata a ogni nuova ditta -# NON MODIFICARE! Copiare prima in prassid.ini -[cg] -# Maschera -EdMask = cg5100a.msk -# Anno liquidazione IVA -AnLiIv = %yr% -# Anagrafica clienti/fornitori in comune -AnCfCm = -# Piano conti/tabella causali in comune -PcTcCm = -# Gestione libro cronologico -GsLbCn = -# Codice libro incassi pagamenti -CodLIC = -# Stampa totali fatture a fine registro -StTfFr = -# Stampa libro giornale e libro IVA unico -StLgiU = -# Gestione saldaconto -GesSal = -# Ricalcolo imposte degli acquisti destinati a rivendita -RicAcq = -# N. rif. allineato a destra per clienti e fornitori -NrCliDx = -NrForDx = -# Campo misterioso che segue il precedente -CmSgPc = -# Riferimenti partite -RifPar = -# Gestione valuta -GesVal = -# Codice lingua -CodLin = -# Credito IVA anno precedente -CrIvAp = -# Gestione liquidazione differita -GeLiDi = -# Codice causale chiusura -CoCaCh = -# Codice causale apertura -CoCaAp = -# Codici sottoconto Bilancio di Chiusura -CsBiChG = -CsBiChC = -CsBiChS = -# Codici sottoconto Profitti e perdite -CsPrPeG = -CsPrPeC = -CsPrPeS = -# Codici sottoconto Bilancio di Apertura -CsBiApG = -CsBiApC = -CsBiApS = -# Codici sottoconto Utile esercizio conto patrimoniale -CsUeCpG = -CsUeCpC = -CsUeCpS = -# Codici sottoconto Perdite esercizio conto patrimoniale -CsPeCpG = -CsPeCpC = -CsPeCpS = -# Codici sottoconto Utile esercizio conto economico -CsUeCeG = -CsUeCeC = -CsUeCeS = -# Codici sottoconto Perdite esercizio conto economico -CsPeCeG = -CsPeCeC = -CsPeCeS = -# Frequenza ratei/riscontri -RrFrAm = -# Mese commerciale ratei/riscontri -RrMeCo = -# Codice causale ratei -RrCcRa = -# Codice causale riscontri -RrCcRi = -# Gestione Vendite -GesVen = - -[EOF] diff --git a/cg/prassis.doc b/cg/prassis.doc deleted file mode 100755 index f7f88f5b7..000000000 --- a/cg/prassis.doc +++ /dev/null @@ -1,29 +0,0 @@ -# File configurazione contabilita' -# Versione commentata da NON usare direttamente -# Guy 16-9-94 -# Paragrafo Contabilita' -[cg] -# Maschera edit -EdMask = cg5000a.msk -#codice azienda banca -CodCAB = -#codice dipendenza -CodABI = -# Somma imposte non detraibiili agli acquisti/importazioni in mod. IVA 11 -Sind11 = -# Stampa intestazione su registri bollati -StiReg = -# Non stampa data registrazione su registi IVA -NoDtRg = -# Posizionamento cursore su data registrazione in immissione documenti -PoCuDr = -# Codice IVA per ricavi misti relativi ad agenzie di viaggio -CodAgv = -# Interessi liquid. trimestrali per i 4 trimestri -InTr(0) = 1.5 -InTr(1) = 1.5 -InTr(2) = 1.5 -InTr(3) = 1.5 -[EOF] - -