From ac4d0ed9e4b2d9ee95b17cd8e8948cdd75cd54ff Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 31 May 2002 10:35:40 +0000 Subject: [PATCH] Patch level : XX 272 Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione AGA 1.7 patch 272 sul main trunk git-svn-id: svn://10.65.10.50/trunk@10283 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ba/ba3200.h | 1 + ba/ba4300a.uml | 22 +- ba/baprassi.men | 10 - ba/batbpor.uml | 2 +- ce/ce3600.cpp | 4 +- cg/cg0500.cpp | 29 +- cg/cg0500.h | 5 +- cg/cg0500b.uml | 4 +- cg/cg1500a.uml | 3 +- cg/cg2100.cpp | 21 +- cg/cg2100.h | 2 +- cg/cg2102.cpp | 46 +-- cg/cg2102.h | 2 +- cg/cg2103.cpp | 2 + cg/cg3200.cpp | 68 ++-- cg/cg4305.cpp | 2 +- cg/cglib01.cpp | 5 +- cg/cglib02.cpp | 2 +- cg/cglib02.h | 2 +- cg/cglib04.cpp | 2 +- cg/cgprassi.men | 2 + in/bastint.uml | 9 +- in/bastird.uml | 62 +++- in/batbint.rpt | 2 - in/batbint.uml | 12 +- in/batbird.h | 16 +- in/batbird.rpt | 29 +- in/batbird.uml | 67 ++-- in/f134.trr | 2 +- in/f135.trr | 2 +- in/in0.cpp | 10 +- in/in0100.cpp | 86 ++++- in/in0200.cpp | 109 ++++-- in/in0200a.uml | 2 +- in/in0500.cpp | 56 ++- in/in0500a.uml | 20 +- in/in0600.cpp | 36 +- in/in0600a.uml | 3 +- in/in0700.cpp | 69 ++-- in/in0700a.h | 2 - in/in0700a.uml | 87 ++--- in/inlib01.cpp | 28 +- in/inlib01.h | 2 +- include/isam.cpp | 188 ++++++++-- include/isam.h | 6 +- include/mask.cpp | 57 ++- include/mask.h | 9 +- include/msksheet.cpp | 18 +- include/os_win16.cpp | 5 +- include/prefix.cpp | 2 +- include/relapp.cpp | 4 +- include/sheet.cpp | 58 +-- include/tabutil.cpp | 65 ---- include/tabutil.h | 3 +- include/validate.cpp | 11 +- m770/770100.cpp | 31 +- m770/770100a.uml | 4 +- m770/770200.cpp | 180 ++++------ m770/770200a.uml | 8 - m770/772400.cpp | 41 +-- m770/777200.cpp | 16 +- ve/batbprs.h | 12 +- ve/batbprs.uml | 133 +++++-- ve/batbtip.uml | 23 +- ve/f47.dir | 2 +- ve/f47.trr | 4 +- ve/ve0100.cpp | 4 +- ve/ve0100b.uml | 99 +++--- ve/ve0100b1.h | 66 ++-- ve/ve2400.cpp | 4 +- ve/ve2400.h | 12 +- ve/ve2400.uml | 107 ++++-- ve/ve7100.cpp | 102 +++++- ve/vearea.men | 2 + ve/velib.h | 10 +- ve/velib03.cpp | 19 +- ve/velib03a.cpp | 831 +++++++++++++++++++++++++++++++++++++++++++ ve/velib04.cpp | 12 +- ve/velib04a.cpp | 4 +- ve/velib04b.cpp | 123 ++++--- ve/velib06.cpp | 662 ++++++++++++++++++++++++---------- ve/velib06a.cpp | 17 +- ve/vepriv.h | 1 + 83 files changed, 2806 insertions(+), 1096 deletions(-) create mode 100755 ve/velib03a.cpp diff --git a/ba/ba3200.h b/ba/ba3200.h index b9ce525e8..4acaf723b 100755 --- a/ba/ba3200.h +++ b/ba/ba3200.h @@ -12,6 +12,7 @@ #define F_INIZIO8 108 #define F_INIZIO9 109 #define F_INIZIO10 110 +#define F_FINE0 200 #define F_FINE1 201 #define F_FINE2 202 #define F_FINE3 203 diff --git a/ba/ba4300a.uml b/ba/ba4300a.uml index d64e271cb..2b434ac3f 100755 --- a/ba/ba4300a.uml +++ b/ba/ba4300a.uml @@ -120,7 +120,7 @@ END GROUPBOX DLG_NULL 76 4 BEGIN - PROMPT 0 4 "Anagrafica" + PROMPT 0 4 "@bAnagrafica" END LIST FLD_GD1_TIPOA 11 @@ -170,7 +170,7 @@ END GROUPBOX DLG_NULL 76 4 BEGIN - PROMPT 0 8 "Attivita' prevalente" + PROMPT 0 8 "@bAttivitā prevalente" END STRING FLD_GD1_CODATTPREV 5 @@ -204,7 +204,7 @@ END GROUPBOX DLG_NULL 76 4 BEGIN - PROMPT 0 12 "Telefoni" + PROMPT 0 12 "@bTelefoni" END STRING FLD_GD1_PTEL 10 @@ -512,7 +512,7 @@ END GROUPBOX DLG_NULL 76 5 BEGIN - PROMPT 0 10 "Codici statistici" + PROMPT 0 10 "@bCodici statistici" END STRING FLD_GD2_CODSTAT1 7 @@ -793,7 +793,7 @@ END GROUPBOX DLG_NULL 76 7 BEGIN - PROMPT 1 4 "Soggetto Obbligato INTRA" + PROMPT 1 4 "@bSoggetto Obbligato INTRA" FLAGS "R" END @@ -829,19 +829,21 @@ END BOOLEAN CHK_IN_NONOBBSTAT BEGIN - PROMPT 2 9 "Soggetto non obbligato alla dei valori statistico, consegna e trasporto" + PROMPT 2 9 "Non obbligato a compilare: valore stat., modalitā consegna e trasporto" + + FIELD NONOBBSTAT END GROUPBOX DLG_NULL 76 4 BEGIN - PROMPT 1 11 "Soggetto Delegato INTRA" + PROMPT 1 11 "@bSoggetto Delegato INTRA" FLAGS "R" END LIST LST_IN_TIPOSOGDEL 1 10 BEGIN - PROMPT 1 12 "Tipo persona " + PROMPT 2 12 "Tipo persona " ITEM "F|Fisica" ITEM "G|Giuridica" FIELD TIPOSOGDEL @@ -865,7 +867,7 @@ END STRING FLD_IN_DESSOGDEL 50 BEGIN - PROMPT 1 13 "Denominazione " + PROMPT 2 13 "Denominazione " USE LF_ANAG KEY 2 INPUT TIPOA LST_IN_TIPOSOGDEL SELECT INPUT RAGSOC FLD_IN_DESSOGDEL @@ -879,4 +881,4 @@ END ENDPAGE -ENDMASK +ENDMASK \ No newline at end of file diff --git a/ba/baprassi.men b/ba/baprassi.men index 4bb183ce0..fc42fa47e 100755 --- a/ba/baprassi.men +++ b/ba/baprassi.men @@ -7,7 +7,6 @@ Item_01 = "Anagrafiche di base", [PRASSI_001] Item_02 = "Amministrazione", Item_03 = "Acquisti e vendite", Item_04 = "Magazzino e Produzione", -Item_11 = "Comunicazione", [PRASSI_019] Item_11 = "Manutenzione", [PRASSI_015] [PRASSI_001] @@ -98,15 +97,6 @@ Item_06 = "Creazione dischi di installazione", "ba1 -5", "" Item_07 = "Backup", "ba2 -1", "" Item_08 = "Conversione all'Euro", [PRASSI_883] -[PRASSI_019] -Caption = "Comunicazione" -Picture = -Module = 0 -Item_01 = "EasyDoc", "c:\EasyDoc\EasyDoc.exe", "" -Item_02 = "Gestione Fax", "bafax -s", "" -Item_03 = "Archivio fax spediti e ricevuti", disabled -Item_04 = "Archivio contatti telefonici", disabled - [PRASSI_883] Caption = "Conversione all'Euro" Picture = diff --git a/ba/batbpor.uml b/ba/batbpor.uml index 3fc1951c5..aad95da7d 100755 --- a/ba/batbpor.uml +++ b/ba/batbpor.uml @@ -6,7 +6,7 @@ TOOLBAR "" 0 20 0 2 ENDPAGE -PAGE "Tabella Modalita' di consegna" -1 -1 78 8 +PAGE "Modalitā di consegna" -1 -1 78 8 GROUPBOX DLG_NULL 75 7 BEGIN diff --git a/ce/ce3600.cpp b/ce/ce3600.cpp index 201fc5607..1aa7290f8 100755 --- a/ce/ce3600.cpp +++ b/ce/ce3600.cpp @@ -142,11 +142,11 @@ void TLM_app::main_loop() TDate fromdate = m.get(F_FROM_DATE), todate = m.get(F_TO_DATE); TString filter; if (fromdate.ok()) - filter << "(ANSI(" << MOVCE_DTMOV << ")>=" << fromdate.string(ANSI) << ')'; + filter << "(ANSI(" << MOVCE_DTMOV << ")>=\"" << fromdate.string(ANSI) << "\")"; if (todate.ok()) { if (filter.not_empty()) filter << "&&"; - filter << "(ANSI(" << MOVCE_DTMOV << ")<=" << todate.string(ANSI) << ')'; + filter << "(ANSI(" << MOVCE_DTMOV << ")<=\"" << todate.string(ANSI) << "\")"; } if (codmov.not_empty()) { diff --git a/cg/cg0500.cpp b/cg/cg0500.cpp index 9b2633ced..832cf8a94 100755 --- a/cg/cg0500.cpp +++ b/cg/cg0500.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include @@ -452,26 +451,22 @@ bool TCaus_app::cod_reg_hndl (TMask_field& f, KEY k) // controllo di consistenza tra codice (tipo) registro e tipo documento if (k == K_ENTER) { - // bool ok = TRUE; - const TString16 tpd = f.mask().get(F_TIPO_DOC); - const TString16 codreg = f.mask().get(F_COD_REG); - + const TMask& m = f.mask(); + const TString& tpd = m.get(F_TIPO_DOC); if (tpd.not_empty()) { - TipoIVA i = nessuna_iva; - TRegistro grog(codreg, app().anno_iva()); - TTable tabtpd("%TPD"); - tabtpd.put("CODTAB", tpd); - if (tabtpd.read() == NOERR) + const TRectype& tabtpd = cache().get("%TPD", tpd); + if (!tabtpd.empty()) { - i = (TipoIVA)tabtpd.get_int("I0"); // IVA acquisti, vendite, generica - const TipoIVA ri = grog.iva(); - if (i == iva_generica) i = ri; - if (i != ri) + const TipoIVA i = (TipoIVA)tabtpd.get_int("I0"); // IVA acquisti, vendite, generica + if (i != iva_generica) // iva_generica = 9 { - return f.warning_box("Tipo documento incompatibile con tipo registro"); - i = iva_errata; - } + const TString& codreg = m.get(F_COD_REG); + const TRegistro grog(codreg, app().anno_iva()); + const TipoIVA ri = grog.iva(); + if (i != ri) + return f.error_box("Tipo documento incompatibile con tipo registro"); + } } } } diff --git a/cg/cg0500.h b/cg/cg0500.h index 2047b2ea1..b2030ff26 100755 --- a/cg/cg0500.h +++ b/cg/cg0500.h @@ -31,8 +31,8 @@ #define F_DES_DOC 128 #define F_DES_REG 129 #define F_MOVIND 130 -#define F_SOLAIVA 131 - +#define F_SOLAIVA 131 + #define SS_SEZIONE 102 #define SS_TIPOCF 103 #define SS_GRUPPO 104 @@ -40,3 +40,4 @@ #define SS_SOTTOCONTO 106 #define SS_DESCAGG 108 #define SS_DESCRIPTION 109 +#define SS_AZZERA 200 diff --git a/cg/cg0500b.uml b/cg/cg0500b.uml index 091b262c2..08625b66f 100755 --- a/cg/cg0500b.uml +++ b/cg/cg0500b.uml @@ -249,9 +249,9 @@ BEGIN PROMPT -23 -1 "" END -BUTTON DLG_NULL 9 2 +BUTTON SS_AZZERA 9 2 BEGIN - PROMPT -33 -1 "Azzera" + PROMPT -33 -1 "A~zzera" MESSAGE RESET,1@ MESSAGE EXIT,K_ENTER END diff --git a/cg/cg1500a.uml b/cg/cg1500a.uml index 73ad2e309..a0492fca9 100755 --- a/cg/cg1500a.uml +++ b/cg/cg1500a.uml @@ -259,6 +259,7 @@ END RADIOBUTTON F_STAMPAC 36 BEGIN PROMPT 34 1 "@bTipo stampa" + ITEM "1|Conti movimentati" ITEM "2|Conti con saldo diverso da zero" END @@ -301,4 +302,4 @@ END ENDPAGE -ENDMASK +ENDMASK \ No newline at end of file diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 640483478..3e6caaeef 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -494,8 +494,7 @@ void TPrimanota_application::init_mask(TMask& m) } m.show(-1, clig); m.show(-2, forg); - if (corrisp) - m.hide(F_STATOPAIV); + if (corrisp) m.hide(F_STATOPAIV); // Show/Hide campi valuta: F_VALUTAINTRA, F_CAMBIOINTRA, F_CORRISPETTIVO, F_CORRVAL (GROUP 4) m.show(-4, causale().valintra()); @@ -1749,6 +1748,7 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action) str.format("%d", LF_INTRA); intro.set_paragraph(str); intro.set("NUMREG", m.get(F_NUMREG)); + intro.set("DATAREG", m.get(F_DATAREG)); if (m.field(F_CLIENTE).shown()) { @@ -1762,16 +1762,19 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action) intro.set("TIPOCF", "F"); intro.set("CODCF", m.get(F_FORNITORE)); } - - const TString& codval = m.get(F_VALUTAINTRA); - intro.set("CODVAL", codval); - intro.set("CAMBIO", m.get(F_CAMBIOINTRA)); - intro.set("DATAREG", m.get(F_DATAREG)); + + // Controlla flag sulla causale + const bool valintra = causale().valintra(); + if (valintra) + { + intro.set("CODVAL", m.get(F_VALUTAINTRA)); + intro.set("CAMBIO", m.get(F_CAMBIOINTRA)); + } // Inserisci il totale documento solo in inserimento! if (action == "Insert") { - real totdoc = m.get(codval.empty() ? F_IMPONIBILI : F_CORRISPETTIVO); + real totdoc = m.get(valintra ? F_CORRISPETTIVO : F_IMPONIBILI); if (test_swap(FALSE)) totdoc = -totdoc; intro.set("TOTDOC", totdoc.string()); diff --git a/cg/cg2100.h b/cg/cg2100.h index 87a79d2ef..d67e00cd8 100755 --- a/cg/cg2100.h +++ b/cg/cg2100.h @@ -1,4 +1,4 @@ -#ifndef __CG2100_H +#ifndef __CG2100_H #define __CG2100_H #define F_CODDITTA 101 diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index e1b47ab15..320111d6c 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -198,28 +198,22 @@ int TPrimanota_application::bill2pos(const TBill& conto, char tipo) int TPrimanota_application::clint2pos(const TClinton& conto, char tipo) { - int r = bill2pos(conto, tipo); - if (r >= 0 && conto.commessa().not_empty()) + TSheet_field& cg = app().cgs(); + FOR_EACH_SHEET_ROW(cg, i, s) { - TString_array& cg = app().cgs().rows_array(); - const int num_rows = cg.items(); - for (int i = r ; i < num_rows; i++) + const char t = row_type(*s); + if (t == tipo) { - TToken_string& s = cg.row(i); - const char t = row_type(s); - if (t == tipo) - { - const TClinton c(s, FALSE); - if (c == conto) - return i; - } + const TClinton c(*s, FALSE); + if (c == conto) + return i; } - r = -1; } - return r; + return -1; } + // Trova nelle righe contabili un conto di contropartita per il conto dato int TPrimanota_application::bill2contr(const TBill& conto, char sezione) const { @@ -704,6 +698,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k) if (errato && a._as400 && speso.is_zero()) errato = FALSE; + if (nota && errato && speso.is_zero()) { const int annorif = m.get_int(F_ANNORIF); @@ -715,6 +710,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k) errato = !a.crea_partita(bill, annorif, numrif, currig, importo); } } + if (errato) { @@ -741,7 +737,17 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k) { saldaconto += importo; if (in_valuta) - saldaconto_val += a.partite().importo_speso(numreg, i+1, TRUE, 0x1); + { + if (tipo == 'G') // Le spese non si trovano sul saldaconto + { + const TExchange cam(m.get(SK_VALUTA), m.get_real(SK_CAMBIO)); + TCurrency spe(importo.valore()); spe.change_value(cam); + const TImporto imp_spe(importo.sezione(), spe.get_num()); + saldaconto_val += imp_spe; + } else + if (tipo == 'K') + saldaconto_val += a.partite().importo_speso(numreg, i+1, TRUE, 0x1); + } } } } @@ -1840,6 +1846,7 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key) f.set_focusdirty(FALSE); return f.mask().stop_run(K_INS); // Entra in modo inserimento } */ + } else { @@ -2294,7 +2301,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key) cp.on_hit(); // lo ricopia eventualmente a pag.3 } } - if (cf == 'F') + if (cf == 'F' && app().causale().valintra()) { const TString16 valintra(clifo.get("VALINTRA")); if (!valintra.empty()) @@ -2341,7 +2348,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key) const bool occas = clifo.get_bool(CLI_OCCAS); m.show(F_OCCASEDIT, occas); // Bottone Dati anagrafici m.show(F_STATOPAIV, !occas); // Stato partita IVA - if (!occas) + if (!occas) m.set(F_STATOPAIV, clifo.get(CLI_STATOPAIV)); m.show(cf == 'C' ? F_PIVACLIENTE : F_PIVAFORNITORE, !occas); // Partita IVA m.show(cf == 'C' ? F_COFICLIENTE : F_COFIFORNITORE, !occas); // Codice Fiscale @@ -2849,4 +2856,3 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key) return TRUE; } - diff --git a/cg/cg2102.h b/cg/cg2102.h index e7cf72b6e..9428cd233 100755 --- a/cg/cg2102.h +++ b/cg/cg2102.h @@ -1,4 +1,4 @@ -#ifndef __CG2102_H +#ifndef __CG2102_H #define __CG2102_H #ifndef __RELAPP_H diff --git a/cg/cg2103.cpp b/cg/cg2103.cpp index 8bdff7c14..7cf1660a5 100755 --- a/cg/cg2103.cpp +++ b/cg/cg2103.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include diff --git a/cg/cg3200.cpp b/cg/cg3200.cpp index 90877c412..3ff4f5d97 100755 --- a/cg/cg3200.cpp +++ b/cg/cg3200.cpp @@ -135,6 +135,7 @@ class TMastrini_application : public TPrintapp TString _cdc; real _totale_commessa_dare, _totale_commessa_avere, _saldo_commessa; + TConfig* _collins; @@ -913,9 +914,7 @@ void TMastrini_application::fai_stampa132() set_row (_rw,"@11g$[b]#7ld$[n]", &_numreg); else if (_stampanum == 2) - { set_row (_rw,"@11g#7ld", &_numgio); - } set_row (_rw,"@19g#t", &_datadocs); set_row (_rw,"@30g#7t", &_numdoc); @@ -1005,14 +1004,28 @@ void TMastrini_application::fai_stampa198() set_row (_rw,"@42g#3t", &_codcaus); // Stampa saldo movimenti / Descrizione contropartita + const TRectype& rmov = current_cursor()->curr(LF_RMOV); + _gruppocontr = rmov.get_int(RMV_GRUPPOC); + _contocontr = rmov.get_int(RMV_CONTOC); + _sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC); + _g_contr = rmov.get(RMV_GRUPPOC); + _c_contr = rmov.get(RMV_CONTOC); + _s_contr = rmov.get(RMV_SOTTOCONTOC); if (_stampa_des_contro) - { - TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); - _descrcontr.cut(0); - _descrcontr << _g_contr << ' ' << _c_contr << ' ' << _s_contr << ' ' << tc.descrizione(); - _descrcontr.cut(47); - set_row (_rw,"@135g#t", &_descrcontr); + { + if (_sottocontocontr > 0) + { + TBill tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); + _descrcontr.cut(0); + _descrcontr << _g_contr << ' ' << _c_contr << ' ' << _s_contr << ' ' << tc.descrizione(); + _descrcontr.cut(47); + set_row (_rw,"@135g%-48s", (const char*)_descrcontr); + } + else + { + _descrcontr.cut(0); + } } else { @@ -1591,8 +1604,8 @@ bool TMastrini_application::preprocess_page(int file, int counter) _numreg = rmov.get_long(RMV_NUMREG); _numrig = rmov.get_int(RMV_NUMRIG); - _gruppocontr = rmov.get_int (RMV_GRUPPOC); - _contocontr = rmov.get_int (RMV_CONTOC); + _gruppocontr = rmov.get_int(RMV_GRUPPOC); + _contocontr = rmov.get_int(RMV_CONTOC); _sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC); _g_contr = rmov.get(RMV_GRUPPOC); _c_contr = rmov.get(RMV_CONTOC); @@ -1739,7 +1752,7 @@ bool TMastrini_application::preprocess_page(int file, int counter) } } else if (_descrizione == "") - if (_descrizionemov != "") + if (_descrizionemov.not_empty()) { //set_row (1,"@46g%.23s", (const char*) _descrcaus); //set_row (1,"@70g%.30s", (const char*) _descrizionemov); @@ -1749,19 +1762,18 @@ bool TMastrini_application::preprocess_page(int file, int counter) set_row (_rw,"@70g#a", _d30); } else - if (_descrizionemov == "") + { + conto(_gruppocontr,_contocontr,FALSE); + TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); + _descrcontr = tc.descrizione(); + *_d22 = (const char*) _descrcaus; + set_row (_rw,"@46g#a", _d22); + if (_descrcontr != "Sconosciuto") { - conto(_gruppocontr,_contocontr,FALSE); - TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); - _descrcontr = tc.descrizione(); - *_d22 = (const char*) _descrcaus; - set_row (_rw,"@46g#a", _d22); - if (_descrcontr != "Sconosciuto") - { - *_d30 = (const char*)_descrcontr; - set_row (_rw,"@70g#a", _d30); - } + *_d30 = (const char*)_descrcontr; + set_row (_rw,"@70g#a", _d30); } + } } } //if (_nummast == 1 || _nummast == 3) @@ -2028,6 +2040,7 @@ bool TMastrini_application::preprocess_page(int file, int counter) _riporto_parziale_dare += _importo; _totale_commessa_dare += _importo; + if (_numcarat == 1) // Stampa 132 caratteri set_row (_rw,"@83g%s", (const char*) _importo_str); else @@ -2044,6 +2057,7 @@ bool TMastrini_application::preprocess_page(int file, int counter) _riporto_parziale_avere += _importo; _totale_commessa_avere += _importo; + if (_numcarat == 1) // Stampa 132 caratteri set_row (_rw,"@100g%s", (const char*) _importo_str); else @@ -2202,8 +2216,9 @@ print_action TMastrini_application::postprocess_page(int file, int counter) reset_print(); if (_numcarat == 1) stampa_totali132(); - else + else if (_numcarat == 2) stampa_totali198(); + if (_stampatotiva) stampa_totaliiva(); } @@ -2227,9 +2242,10 @@ print_action TMastrini_application::postprocess_page(int file, int counter) { if (_numcarat == 1) stampa_totali132(); - else + else if (_numcarat == 2) stampa_totali198(); } + if (_stampatotiva) stampa_totaliiva(); } @@ -2306,7 +2322,7 @@ print_action TMastrini_application::postprocess_page(int file, int counter) print_action TMastrini_application::postprocess_print(int file, int counter) { - if (file == LF_SALDI) + if (file == LF_SALDI) { reset_print(); stampa_totali_commessa(); @@ -2314,6 +2330,7 @@ print_action TMastrini_application::postprocess_print(int file, int counter) _msk->reset(-9); } + return NEXT_PAGE; } // Stampa dei totali documenti iva se richiesta @@ -2571,6 +2588,7 @@ bool TMastrini_application::set_print(int) _cdc.cut(0); print(); } + } return FALSE; } diff --git a/cg/cg4305.cpp b/cg/cg4305.cpp index 7710f8fb7..9323ae096 100755 --- a/cg/cg4305.cpp +++ b/cg/cg4305.cpp @@ -447,7 +447,7 @@ bool TLiquidazione_app::recalc_acconto(real& inf, real& ina) real cre_pre = 0.0; real acq_intr = 0.0; const bool isdifferita = is_differita(); // MI3262... - bool error = FALSE; + int error = FALSE; TString16 tipo_acc; diff --git a/cg/cglib01.cpp b/cg/cglib01.cpp index 816cb24a6..e278c21b9 100755 --- a/cg/cglib01.cpp +++ b/cg/cglib01.cpp @@ -906,11 +906,8 @@ const TString& TBill::descrizione() const if (!myself.find()) myself.set_description("Sconosciuto"); } - if (_descrizione == NULL) -// myself._descrizione = new TString; - return EMPTY_STRING; - return *_descrizione; + return _descrizione ? *_descrizione : (const TString&) EMPTY_STRING; } int TBill::tipo_cr() const diff --git a/cg/cglib02.cpp b/cg/cglib02.cpp index 52918c13c..f43e2526f 100755 --- a/cg/cglib02.cpp +++ b/cg/cglib02.cpp @@ -6,6 +6,7 @@ ///////////////////////////////////////////////////////////////////////////// #include + #include #include #include @@ -840,4 +841,3 @@ void TSaldo_agg::registra() } } - diff --git a/cg/cglib02.h b/cg/cglib02.h index f42063ec9..bef14c75b 100755 --- a/cg/cglib02.h +++ b/cg/cglib02.h @@ -110,6 +110,7 @@ public: bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil,int prov); bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,int, const char* = NULL); + bool ricerca_progr_prec(int, int, int, long); real saldofin_esprec(int,int,int,long,bool saldo_chiusura = FALSE, bool provvisori = FALSE); @@ -194,4 +195,3 @@ public: }; #endif - diff --git a/cg/cglib04.cpp b/cg/cglib04.cpp index 3e3ed1274..56e3c55cd 100755 --- a/cg/cglib04.cpp +++ b/cg/cglib04.cpp @@ -649,7 +649,7 @@ long TTransfer_file::rec(int i) int TTransfer_file::num(char sigla) { - int items = _index.items(); + const int items = _index.items(); TString16 dep; for (int i = 0; i < items; i++) diff --git a/cg/cgprassi.men b/cg/cgprassi.men index 8ac526704..867136909 100755 --- a/cg/cgprassi.men +++ b/cg/cgprassi.men @@ -64,6 +64,8 @@ Item_05 = "Clienti/Fornitori", "cg0 -1", "F" Item_06 = "Agenti", "pr0 -4", "" Item_07 = "Cambi giornalieri", "ba3 -0 cam", "" Item_08 = "Esercizi", "cg0 -5 esc", "F" +Item_09 = "Commesse", "ba3 -0 cms", "" +Item_10 = "Fasi commesse", "ba3 -0 fsc", "" [PRASSICG_008] Caption = "Stampa tabelle ditta" diff --git a/in/bastint.uml b/in/bastint.uml index 802c9de05..89ba821be 100755 --- a/in/bastint.uml +++ b/in/bastint.uml @@ -2,9 +2,10 @@ PAGE "Stampa Natura Transazione" -1 -1 50 8 -NUMBER F_INIZIO1 1 +STRING F_INIZIO1 1 BEGIN PROMPT 4 1 "Da codice " + FLAGS "U" USE %INT INPUT CODTAB F_INIZIO1 DISPLAY "Codice" CODTAB @@ -14,13 +15,13 @@ BEGIN GROUP 1 END -NUMBER F_FINE1 1 +STRING F_FINE1 1 BEGIN PROMPT 4 3 "A codice " + FLAGS "U" COPY USE F_INIZIO1 INPUT CODTAB F_FINE1 - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 + COPY DISPLAY F_INIZIO1 OUTPUT F_FINE1 CODTAB FIELD CODTAB GROUP 2 diff --git a/in/bastird.uml b/in/bastird.uml index efbd5bd7c..fb7ad3bfb 100755 --- a/in/bastird.uml +++ b/in/bastird.uml @@ -2,51 +2,77 @@ PAGE "Stampa Dati Riassuntivi" -1 -1 60 8 +LIST F_INIZIO0 1 8 +BEGIN + PROMPT 4 1 "Tipo " + ITEM "A|Acquisti" + MESSAGE COPY,F_FINE0 + ITEM "C|Cessioni" + MESSAGE COPY,F_FINE0 + FIELD CODTAB[1,1] + GROUP 1 +END + NUMBER F_INIZIO1 4 BEGIN - PROMPT 4 1 "Da anno " + PROMPT 4 3 "Da anno " + FLAGS "AZ" USE IRD - INPUT CODTAB[1,4] F_INIZIO1 - INPUT CODTAB[5,6] F_INIZIO2 - DISPLAY "Anno@15" CODTAB[1,4] - DISPLAY "Mese@10" CODTAB[5,6] + INPUT CODTAB[1,1] F_INIZIO0 SELECT + INPUT CODTAB[2,5] F_INIZIO1 + INPUT CODTAB[6,7] F_INIZIO2 + DISPLAY "Tipo" CODTAB[1,1] + DISPLAY "Anno@15" CODTAB[2,5] + DISPLAY "Mese@10" CODTAB[6,7] DISPLAY "N.dischetto@10" I0 DISPLAY "Pagine@10" I1 DISPLAY "Righe@10" I2 DISPLAY "Ammontare compl.@18" R0 - OUTPUT F_INIZIO1 CODTAB[1,4] - OUTPUT F_INIZIO2 CODTAB[5,6] + OUTPUT F_INIZIO1 CODTAB[2,5] + OUTPUT F_INIZIO2 CODTAB[6,7] CHECKTYPE REQUIRED - FIELD CODTAB[1,4] + FIELD CODTAB[2,5] GROUP 1 END LIST F_INIZIO2 20 BEGIN - PROMPT 21 1 "Da mese " - FIELD CODTAB[5,6] + PROMPT 21 3 "Da mese " + FIELD CODTAB[6,7] FLAGS "MZ" GROUP 1 END +LIST F_FINE0 1 8 +BEGIN + PROMPT 4 4 "Tipo " + FLAGS "H" + ITEM "A|Acquisti" + ITEM "C|Cessioni" + FIELD CODTAB[1,1] + GROUP 2 +END + NUMBER F_FINE1 4 BEGIN - PROMPT 4 3 "A anno " + PROMPT 4 5 "Ad anno " + FLAGS "AZ" COPY USE F_INIZIO1 - INPUT CODTAB[1,4] F_FINE1 - INPUT CODTAB[5,6] F_FINE2 + INPUT CODTAB[1,1] F_FINE0 SELECT + INPUT CODTAB[2,5] F_FINE1 + INPUT CODTAB[6,7] F_FINE2 COPY DISPLAY F_INIZIO1 - OUTPUT F_FINE1 CODTAB[1,4] - OUTPUT F_FINE2 CODTAB[5,6] + OUTPUT F_FINE1 CODTAB[2,5] + OUTPUT F_FINE2 CODTAB[6,7] CHECKTYPE REQUIRED - FIELD CODTAB[1,4] + FIELD CODTAB[2,5] GROUP 2 END LIST F_FINE2 20 BEGIN - PROMPT 21 3 "A mese " - FIELD CODTAB[5,6] + PROMPT 21 5 "A mese " + FIELD CODTAB[6,7] FLAGS "MZ" GROUP 2 END diff --git a/in/batbint.rpt b/in/batbint.rpt index cfc914f8f..f68be4395 100755 --- a/in/batbint.rpt +++ b/in/batbint.rpt @@ -3,9 +3,7 @@ Tabella Natura Transazione 1|@3g%s|Codice 1|@10g%s|Denominazione -1|@62g%s|Op.Triangolari [Rows] 1|CODTAB|@3g@4,ls 1|S0|@10g@50,ls -1|S7|@62g@1,ls diff --git a/in/batbint.uml b/in/batbint.uml index 5ab6a2489..891322f90 100755 --- a/in/batbint.uml +++ b/in/batbint.uml @@ -13,9 +13,10 @@ BEGIN PROMPT 1 1 "@bNatura Transazione" END -NUMBER F_CODICE 1 +STRING F_CODICE 1 BEGIN PROMPT 2 3 "Codice " + FLAGS "U" USE %INT INPUT CODTAB F_CODICE DISPLAY "Codice" CODTAB @@ -33,20 +34,13 @@ BEGIN USE %INT KEY 2 INPUT S0 F_DESCR DISPLAY "Descrizione@70" S0 - DISPLAY "Codice@8" CODTAB + DISPLAY "Codice" CODTAB COPY OUTPUT F_CODICE CHECKTYPE REQUIRED FIELD S0 KEY 2 END -STRING F_TRIANG 1 -BEGIN - PROMPT 2 8 "Operazioni triangolari " - FLAGS "U" - FILED S7 -END - ENDPAGE ENDMASK diff --git a/in/batbird.h b/in/batbird.h index 399d3a088..15b3d27be 100755 --- a/in/batbird.h +++ b/in/batbird.h @@ -1,6 +1,10 @@ -#define F_ANNO 101 -#define F_MESE 102 -#define F_NDKT 103 -#define F_PAGINE 104 -#define F_RIGHE 105 -#define F_AMM_COMP 106 +#define F_TIPO 101 +#define F_ANNO 102 +#define F_MESE 103 +#define F_NDKT 104 +#define F_PAGINE 105 +#define F_RIGHE 106 +#define F_RETT 107 +#define F_AMM_COMP 108 +#define F_AMM_RETT 109 + diff --git a/in/batbird.rpt b/in/batbird.rpt index 82ff2fabd..d475b4a04 100755 --- a/in/batbird.rpt +++ b/in/batbird.rpt @@ -1,18 +1,21 @@ [Headers] 80 Tabella Dati Riassuntivi -1|@3g%s|Anno -1|@10g%s|Mese -1|@15g%s|N.ro Disc. -1|@28g%s|Pagine -1|@38g%s|Righe -1|@45g%s|Ammontare complessivo +1|@1g%s|Tipo +1|@8g%s|Anno +1|@13g%s|Mese +1|@18g%s|Disco +1|@24g%s|Righe riep. +1|@36g%s|Amm. riepil. +1|@49g%s|Righe rett. +1|@62g%s|Amm. rettif. [Rows] -1|CODTAB[1,4]|@3g@4,rs -1|CODTAB[5,6]|@10g@2,rs - -1|I0|@21g@4,rn -1|I1|@27g@7,rn -1|I2|@36g@7,rn -1|R0|@48g@18,rpn|.2 +1|CODTAB[1,1]|@4g@1,rs +1|CODTAB[2,5]|@8g@4,rs +1|CODTAB[6,7]|@13g@2,rs +1|I0|@19g@4,rn +1|I2|@30g@5,rn +1|R0|@36g@12,rpn|#########,@@ +1|I3|@55g@5,rn +1|R1|@62g@12,rpn|#########,@@ \ No newline at end of file diff --git a/in/batbird.uml b/in/batbird.uml index 10e034c4c..b55f0bbcb 100755 --- a/in/batbird.uml +++ b/in/batbird.uml @@ -13,30 +13,42 @@ BEGIN PROMPT 1 1 "@bDati Riassuntivi" END -LIST F_MESE 20 +LIST F_TIPO 1 8 BEGIN - PROMPT 2 2 "Mese " - FLAGS "MZ" - FIELD CODTAB[5,6] + PROMPT 2 2 "Tipo " + ITEM "A|Acquisti" + ITEM "C|Cessioni" + FIELD CODTAB[1,1] KEY 1 END NUMBER F_ANNO 4 BEGIN - PROMPT 46 2 "Anno " - USE IRD - INPUT CODTAB[1,4] F_ANNO - INPUT CODTAB[5,6] F_MESE - DISPLAY "Anno@15" CODTAB[1,4] - DISPLAY "Mese@10" CODTAB[5,6] + PROMPT 35 2 "Anno " + FLAGS "AZ" + USE IRD + INPUT CODTAB[1,1] F_TIPO SELECT + INPUT CODTAB[2,5] F_ANNO + INPUT CODTAB[6,7] F_MESE + DISPLAY "Tipo" CODTAB[1,1] + DISPLAY "Anno@15" CODTAB[2,5] + DISPLAY "Periodo@10" CODTAB[6,7] DISPLAY "N.dischetto@10" I0 - DISPLAY "Pagine@10" I1 - DISPLAY "Righe@10" I2 - DISPLAY "Ammontare compl.@18" R0 - OUTPUT F_ANNO CODTAB[1,4] - OUTPUT F_MESE CODTAB[5,6] + DISPLAY "Riepiloghi@10" I2 + DISPLAY "Rettifiche@10" I3 + OUTPUT F_ANNO CODTAB[2,5] + OUTPUT F_MESE CODTAB[6,7] CHECKTYPE REQUIRED - FIELD CODTAB[1,4] + FIELD CODTAB[2,5] + KEY 1 +END + +NUMBER F_MESE 2 +BEGIN + PROMPT 56 2 "Periodo " + FLAGS "Z" + COPY ALL F_ANNO + FIELD CODTAB[6,7] KEY 1 END @@ -46,24 +58,31 @@ BEGIN FIELD I0 END -NUMBER F_PAGINE 7 -BEGIN - PROMPT 2 6 "Pagine " - FIELD I1 -END - NUMBER F_RIGHE 7 BEGIN - PROMPT 2 8 "Righe " + PROMPT 2 6 "Righe riepilogo " FIELD I2 END +NUMBER F_RETT 7 +BEGIN + PROMPT 2 7 "Righe rettifica " + FIELD I3 +END + + CURRENCY F_AMM_COMP 18 BEGIN - PROMPT 2 10 "Ammontare Compl. " + PROMPT 36 6 "Ammontare Riepiloghi " FIELD R0 END +CURRENCY F_AMM_RETT 18 +BEGIN + PROMPT 36 7 "Ammontare Rettifiche " + FIELD R1 +END + ENDPAGE ENDMASK diff --git a/in/f134.trr b/in/f134.trr index a36e601f5..d6bfbfaa4 100755 --- a/in/f134.trr +++ b/in/f134.trr @@ -4,7 +4,7 @@ NUMREG|3|7|0|Numero registrazione NUMRIG|2|3|0|Numero di riga AMMLIRE|4|18|2|Ammontare in lire AMMVALUTA|4|18|2|Ammontare in valuta -NATURA|2|1|0|Natura della transazione +NATURA|1|1|0|Natura della transazione CONSEGNA|1|3|0|Condizioni di consegna TRASPORTO|6|1|0|Tipo di trasporto NOMENCL|1|8|0|Nomenclatura diff --git a/in/f135.trr b/in/f135.trr index e60adf8e9..924d8cad6 100755 --- a/in/f135.trr +++ b/in/f135.trr @@ -6,7 +6,7 @@ PERIODO|9|2|0|Periodo (Mese[1,12] / Trimestre[1,4] / Anno [1.,1]) NUMRIG|3|7|0|Numero riga STATO|1|2|0|Codice ISO dello Stato CEE PIVA|1|13|0|Partita IVA Cliente/Fornitore -NATURA|7|1|0|Natura della transazione +NATURA|1|1|0|Natura della transazione NOMENCL|1|8|0|Nomenclatura combinata CONSEGNA|1|3|0|Condizioni di consegna TRASPORTO|2|1|0|Tipo di trasporto [1,9] diff --git a/in/in0.cpp b/in/in0.cpp index e0a58c120..4ee291568 100755 --- a/in/in0.cpp +++ b/in/in0.cpp @@ -7,11 +7,11 @@ int main(int argc, char** argv) const int n = (argc > 1) ? (argv[1][1]-'0') : 0; switch (n) { - case 0 : in0100(argc, argv); break; // stampa - case 1 : in0200(argc, argv); break; // dischetti - case 5 : in0600(argc, argv); break; // riepiloghi - case 6 : in0700(argc, argv); break; // rettifiche - default: in0500(argc, argv); break; // movimenti + case 0 : in0100(argc, argv); break; // stampa riepiloghi + case 1 : in0200(argc, argv); break; // generazione dischetti + case 5 : in0600(argc, argv); break; // gestione riepiloghi + case 6 : in0700(argc, argv); break; // gestione rettifiche + default: in0500(argc, argv); break; // gestione movimenti } exit(0); return 0; diff --git a/in/in0100.cpp b/in/in0100.cpp index 13e4db376..ea77068d5 100755 --- a/in/in0100.cpp +++ b/in/in0100.cpp @@ -29,11 +29,15 @@ class TStampaIntra_form : public TForm real _riportoprec1, _riportoprec2; // Riporto pagina prec. per sezioni 1 e 2 real _totaleprog1, _totaleprog2; // Totale progressivo per pagina, sezioni 1 e 2 + int _decimals; + protected: void print_page(const pagetype p); const bool good() const; virtual bool validate(TForm_item& fld, TToken_string& val); + real amm_euro(const TRectype& rec) const; // Ammontare arrotondato + public: void print(); TStampaIntra_form (const char* name, char t, char f, int p, int a); @@ -46,10 +50,8 @@ bool TStampaIntra_form::validate(TForm_item& fld, TToken_string& val) if (code== "_IMP") { - real num(fld.get()); - const int ndec = TCurrency::get_firm_dec() > 0 ? 0 : -3; - - num.round(ndec); + real num = fld.get(); + num.round(_decimals); fld.set(num.string()); return TRUE; } @@ -58,7 +60,6 @@ bool TStampaIntra_form::validate(TForm_item& fld, TToken_string& val) { real num(fld.get()); const int ndec = val.get_int(); - num.round(ndec); fld.set(num.string()); return TRUE; @@ -82,6 +83,8 @@ TStampaIntra_form::TStampaIntra_form(const char* name, char t, char f, int p, in t++; dep.put("TIPO", t); _rettifiche = new TRecord_array(dep, "NUMRIG"); + + _decimals = is_euro_value(NULL) ? 0 : -3; // Arrotonda all'Euro o alle 1000 Lire } TStampaIntra_form::~TStampaIntra_form() @@ -97,6 +100,14 @@ const bool TStampaIntra_form::good() const return _index1 <= _riepiloghi->rows() || _index2 <= _rettifiche->rows(); } +// Ricava l'ammontare in Euro arrotondato da un record +real TStampaIntra_form::amm_euro(const TRectype& rec) const +{ + real amm = rec.get("AMMLIRE"); // Nome obsoleto + amm.round(_decimals); + return amm; +} + void TStampaIntra_form::print_page(const pagetype p) { TString16 ws; @@ -137,8 +148,11 @@ void TStampaIntra_form::print_page(const pagetype p) case 'H': // Testate... { if (p == first_page || (not_first && index <= max)) - { - ps->find_field(_frequenza == "M" ? 1 : 2).set(_periodo); + { + if (_frequenza[0] == 'M') + ps->find_field(1).set(_periodo); else + if (_frequenza[0] == 'T') + ps->find_field(2).set(_periodo); ps->find_field(3).set(_anno); if (p == first_page) ps->find_field(4).set(_frequenza); @@ -158,21 +172,41 @@ void TStampaIntra_form::print_page(const pagetype p) ps->find_field(4).set(ws); ws.format("%d", _totrow2); ps->find_field(5).set(ws); - ps->find_field(6).set(_tot2.string()); + ws = _tot2.string(); + ps->find_field(6).set(ws); + ps->update(); } else // Footers ODD/EVEN { - real & rrip = is_odd_page ? _riportoprec1 : _riportoprec2; - real & rtot = is_odd_page ? _totaleprog1 : _totaleprog2; + real& rrip = is_odd_page ? _riportoprec1 : _riportoprec2; + real& rtot = is_odd_page ? _totaleprog1 : _totaleprog2; int& pgn = is_odd_page ? _pageno1 : _pageno2; int& totpgn = is_odd_page ? _totpag1 : _totpag2; if (pgn <= totpgn) { + ws = rrip.string(); + if (!is_odd_page) // Gestione segno riporto rettifiche + { + const bool neg = ws[0] == '-'; + ps->find_field(4).set(rrip.is_zero() ? "" : (neg ? "-" : "+")); + if (neg) + ws.ltrim(1); + } + ps->find_field(1).set(ws); + + ws = rtot.string(); + if (!is_odd_page) // Gestione segno totale rettifiche + { + const bool neg = ws[0] == '-'; + ps->find_field(7).set(rtot.is_zero() ? "" : (neg ? "-" : "+")); + if (neg) + ws.ltrim(1); + } + ps->find_field(2).set(ws); + ws.format("%d", pgn); - ps->find_field(1).set(rrip.string()); - ps->find_field(2).set(rtot.string()); ps->find_field(3).set(ws); pgn++; ps->update(); @@ -189,9 +223,25 @@ void TStampaIntra_form::print_page(const pagetype p) if (index <= max) { const TRectype& rec = ra->row(index); - relation()->lfile(LF_RIEPRETT).curr() = rec; - real & rtot = is_odd_page ? _totaleprog1 : _totaleprog2; - rtot += rec.get_real("AMMLIRE"); + relation()->curr(LF_RIEPRETT) = rec; + + real ammontare = amm_euro(rec); + if (!is_odd_page) // Rettifiche + { + const TString8 mese = _frequenza[0] == 'M' ? rec.get("PERETT") : "0"; + const TString8 trim = _frequenza[0] == 'T' ? rec.get("PERETT") : "0"; + ps->find_field(2).set(mese); + ps->find_field(3).set(trim); + + // Controlla il segno delle rettifiche + if (rec.get_char("SEGNORETT") == '-') + ammontare = -ammontare; + } + + // Incrementa progressivi + real& rtot = is_odd_page ? _totaleprog1 : _totaleprog2; + rtot += ammontare; + index++; ps->update(); } @@ -237,15 +287,15 @@ void TStampaIntra_form::print() } for (int i = 1; i <= _totrow1; i++) - _tot1 += _riepiloghi->row(i).get_real("AMMLIRE"); + _tot1 += amm_euro(_riepiloghi->row(i)); for (i = 1; i <= _totrow2; i++) { const TRectype& rec = _rettifiche->row(i); if (rec.get_char("SEGNORETT") == '-') - _tot2 -= rec.get_real("AMMLIRE"); + _tot2 -= amm_euro(rec); else - _tot2 += rec.get_real("AMMLIRE"); + _tot2 += amm_euro(rec); } //Posiziona la relazione principale (ditta corrente) diff --git a/in/in0200.cpp b/in/in0200.cpp index 75281af13..f4fd8eab4 100755 --- a/in/in0200.cpp +++ b/in/in0200.cpp @@ -129,9 +129,8 @@ void TRecord_intra::reset(const TIntra_context& ic) spaces(); put("EUROA", 1, 5); const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm()); - TString16 cod; - cod << ditta.get_char(NDT_TIPOA) << '|'; - cod << ditta.get(NDT_CODANAGR); + TString16 cod; + cod.format("%c|%ld", ditta.get_char(NDT_TIPOA), ditta.get_long(NDT_CODANAGR)); const TRectype& anagr = cache().get(LF_ANAG, cod); put(anagr.get(ANA_PAIV), 6, 11); put(ic._progr, 17, 6); @@ -167,7 +166,7 @@ void TRecord_intra::genera_testata(const TIntra_context& ic) cod.cut(0); cod << ditta.get_char("TIPOSOGDEL") << '|'; cod << ditta.get("CODSOGDEL"); - if (cod.len() > 8) + if (cod.len() >= 3) { const TRectype& sogdel = cache().get(LF_ANAG, cod); put(sogdel.get(ANA_PAIV), 48, 11); @@ -197,7 +196,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic) put(rec.get_real("AMMLIRE"), 43, 13, _ndec); put(rec.get_real("AMMVALUTA"), 56, 13); put(rec.get_char("NATURA"), 69); - put(rec.get("NOMENCL"), 70, 8, "RZ"); + put(rec.get("NOMENCL"), 70, 8, "Z"); if (ic._freq == 'M') { put(rec.get_real("MASSAKG"), 78, 10, 0); @@ -230,7 +229,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic) put(rec.get_real("AMMLIRE"), 49, 13, _ndec); put(rec.get_real("AMMVALUTA"), 62, 13); put(rec.get_char("NATURA"), 75); - put(rec.get("NOMENCL"), 76, 8, "RZ"); + put(rec.get("NOMENCL"), 76, 8, "Z"); if (ic._freq == 'M') put(rec.get_real("VALSTAT"), 84, 13, _ndec); else @@ -243,7 +242,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic) put(rec.get("PIVA"), 31, 12); put(rec.get_real("AMMLIRE"), 43, 13, _ndec); put(rec.get_char("NATURA"), 56); - put(rec.get("NOMENCL"), 57, 8, "RZ"); + put(rec.get("NOMENCL"), 57, 8, "Z"); if (ic._freq == 'M') { put(rec.get_real("MASSAKG"), 65, 10); @@ -274,7 +273,7 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic) put(rec.get("SEGNORETT"), 48, 1); put(rec.get_real("AMMLIRE"), 49, 13, _ndec); put(rec.get("NATURA"), 62, 1); - put(rec.get("NOMENCL"), 63, 8, "RZ"); + put(rec.get("NOMENCL"), 63, 8, "Z"); if (ic._freq == 'M') put(rec.get_real("VALSTAT"), 71, 13, _ndec); else @@ -319,23 +318,28 @@ protected: void proponi_numero(); public: - void genera_dischetto(); + void genera_dischetto(char tip, int mode = 0); TDischetto_mask(); }; void TDischetto_mask::proponi_numero() { + const char tip = tipo(); int a = anno(), p = periodo(); long d = 0; TTable ird("IRD"); - if (ird.last() == NOERR) + int err = ird.last(); + while (err == NOERR) { - const TString& str = ird.get("CODTAB"); - a = atoi(str.mid(0,4)); - p = atoi(str.mid(4,2)); + const TString16 str = ird.get("CODTAB"); + a = atoi(str.mid(1,4)); + p = atoi(str.mid(5,2)); d = ird.get_long("I0"); + if (tip == 'T' || tip == str[0]) + break; + err = ird.prev(); } if (anno() > a || periodo() > p) @@ -351,8 +355,24 @@ bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jo { case F_ANNO: if (e == fe_init || e == fe_modify) - proponi_numero(); + { + const int anno = atoi(o.get()); + const char fa = frequenza(anno, 'A'); + const char fc = frequenza(anno, 'C'); + TList_field& list = (TList_field&)field(type_field()); + TToken_string codes = "A|C"; + TToken_string descr = "Acquisti|Cessioni"; + if (fa == fc) + { + codes.add("T"); + descr.add("Tutti"); + } + list.replace_items(codes, descr); + + proponi_numero(); + } break; + case F_TIPO: case F_PERIODO_M: case F_PERIODO_T: case F_PERIODO_A: @@ -360,8 +380,17 @@ bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jo proponi_numero(); break; case F_RIEPILOGHI: - if (e == fe_button) - ::genera_riepiloghi(tipo(), anno(), periodo()); + if (e == fe_button) + { + const char tip = tipo(); + if (tip == 'T') + { + ::genera_riepiloghi('A', anno(), periodo()); + ::genera_riepiloghi('C', anno(), periodo()); + } + else + ::genera_riepiloghi(tip, anno(), periodo()); + } break; default:break; } @@ -420,23 +449,29 @@ bool TDischetto_mask::write_record(ofstream& out, const TRecord_intra& rec, TInt return good; } -void TDischetto_mask::genera_dischetto() +// mode 0 = ask; 1 = append; 2 = remove +void TDischetto_mask::genera_dischetto(char tip, int mode) { TIntra_context ic; - ic._tipo = tipo(); + ic._tipo = tip; ic._anno = anno(); ic._freq = frequenza(ic._anno); ic._periodo = periodo(); ic._progr = get_long(F_NUMERO); - TString16 codtab; codtab.format("%04d%02d", ic._anno, ic._periodo); + TString16 codtab; codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo); TTable ird("IRD"); ird.put("CODTAB", codtab); const bool exist = ird.read() == NOERR; - if (exist && !yesno_box("Il periodo indicato č giā stato generato:\nsi desidera proseguire")) - return; + if (exist) + { + const char* ac = tip == 'A' ? "agli acquisti" : "alle cessioni"; + if (!yesno_box("Il dischetto relativo %s del periodo indicato č giā stato generato:\n" + "Si desidera proseguire ugualmente?", ac)) + return; + } TRelation rel(LF_RIEPRETT); TRectype filter(LF_RIEPRETT); @@ -459,8 +494,15 @@ void TDischetto_mask::genera_dischetto() if (name.exist()) { - if (yesno_box("Il file %s, esiste gia': si desiderla eliminarlo?", - (const char*)name)) + bool do_remove = (mode == 2); + if (mode == 0) + { + do_remove = yesno_box("Il file %s, esiste gia': si desiderla eliminarlo?\n" + "Rispondendo SI i dati sul dischetto verranno azzerati.\n" + "Rispondendo NO i dati verranno accodati a quelli giā presenti", + (const char*)name); + } + if (do_remove) ::remove(name); } @@ -500,13 +542,17 @@ void TDischetto_mask::genera_dischetto() return; } - codtab.format("%04d%02d", ic._anno, ic._periodo); + codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo); ird.put("CODTAB", codtab); ird.put("I0", ic._progr); // Numero progressivo dischetto // ird.put("I1", ??? ); - ird.put("I2", total); - ird.put("R0", ic._totale_riep + ic._totale_rett); + ird.put("I2", ic._righe_riep); + ird.put("I3", ic._righe_rett); + + ird.put("R0", ic._totale_riep); + ird.put("R1", ic._totale_rett); + if (exist) ird.rewrite(); else @@ -533,7 +579,16 @@ void TDischetto_app::main_loop() LF_INTRA, LF_RINTRA, LF_RIEPRETT, 0); TDischetto_mask m; while (m.run() == K_ENTER) - m.genera_dischetto(); + { + const char tip = m.tipo(); + if (tip == 'T') + { + m.genera_dischetto('A', 2); + m.genera_dischetto('C', 1); + } + else + m.genera_dischetto(tip); + } } int in0200(int argc, char* argv[]) diff --git a/in/in0200a.uml b/in/in0200a.uml index c14089974..a04f3677d 100755 --- a/in/in0200a.uml +++ b/in/in0200a.uml @@ -5,8 +5,8 @@ PAGE "Generazione Dischetti INTRA" -1 -1 40 9 LIST F_TIPO 1 10 BEGIN PROMPT 1 1 "Tipo riepilogo " - ITEM "C|Cessioni" ITEM "A|Acquisti" + ITEM "C|Cessioni" END NUMBER F_ANNO 4 diff --git a/in/in0500.cpp b/in/in0500.cpp index db4c0fbe2..670333a75 100755 --- a/in/in0500.cpp +++ b/in/in0500.cpp @@ -17,6 +17,9 @@ class TImmissione_mask : public TIntra_mask { +private: + bool _caus_valintra; + protected: virtual short type_field() const { return F_TIPO_MOV; } virtual int anno() const { return get_date(F_DATA_REG).year(); } @@ -26,6 +29,8 @@ protected: bool on_sheet_event(TSheet_field& s, TField_event e, int row); bool on_sheet_field_event(TOperable_field& o, TField_event e, long jolly); + void enable_valuta(); + public: TImmissione_mask(); virtual ~TImmissione_mask() { } @@ -57,6 +62,13 @@ TImmissione_intra& app() { return (TImmissione_intra&)main_app(); } // TImmissione_mask /////////////////////////////////////////////////////////// +void TImmissione_mask::enable_valuta() +{ + const bool gestval = _caus_valintra || tipo() == 'A'; + enable(F_VALUTA, gestval); + enable(F_CAMBIO, gestval); +} + bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { const short id = o.dlg(); @@ -64,7 +76,8 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j { case F_NUM_REG: if (e == fe_modify || e == fe_init) - { + { + _caus_valintra = TRUE; // Default value if (app().has_module(CGAUT, CHK_DONGLE)) { const TString& numreg = o.get(); @@ -86,12 +99,11 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j if (!c.intra()) return error_box("La causale %s del movimento contabile %s non e' intracomunitaria", (const char*)caus, (const char*)numreg); - const bool gestval = c.valintra(); - enable(F_VALUTA, gestval); - enable(F_CAMBIO, gestval); + _caus_valintra = c.valintra(); } } } + enable_valuta(); } break; case F_TIPO_MOV: @@ -103,18 +115,25 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j m.show(-GR_ACQUISTI, acq); // Mostra i gruppi di campi m.show(-GR_CESSIONI, !acq); // consoni al tipo movimento s.enable_column(F_PAESE_ORIG, acq); - s.set_column_header(F_PAESE, acq ? "Paese\nProv." : "Paese\nDest.") ; - s.set_column_header(F_PROV, acq ? "Provincia\nDest." : "Provincia\nOrig.") ; + s.set_column_header(F_PAESE, acq ? "Paese\nProv." : "Paese\nDest."); + s.set_column_header(F_PROV, acq ? "Provincia\nDest." : "Provincia\nOrig."); TString key ; key << main_app().get_firm(); const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT"); - const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL; + CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL; m.field(F_VALORE_STAT).check_type(chk); m.field(F_CONSEGNA).check_type(chk); m.field(F_TRASPORTO).check_type(chk); - + + chk = frequenza(anno()) == 'M' ? CHECK_REQUIRED : CHECK_NORMAL; + m.field(F_PAESE).check_type(chk); + m.field(F_PAESE_ORIG).check_type(chk); + m.field(F_PROV).check_type(chk); + s.force_update(); + if (e == fe_modify) + enable_valuta(); } break; case F_CLIFO: @@ -258,10 +277,13 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e, case F_NOMENCLATURA3: if (e == fe_close) { - TMask& m = o.mask(); - TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3); - if (key.empty()) - return error_box("La nomenclatura combinata e' obbligatoria"); + if (frequenza() != 'A') + { + TMask& m = o.mask(); + TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3); + if (key.empty()) + return error_box("La nomenclatura combinata e' obbligatoria"); + } } else if (e == fe_modify) @@ -279,9 +301,11 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e, { const char obb = nom.get_char("S4"); req = obb == 'E' || obb == tipo(); - } - m.field(F_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL); - m.field(F_MASSA_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL); + } + const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL; + m.field(F_MASSA_KG).check_type(chk); + m.field(F_UMS).check_type(chk); + m.field(F_MASSA_UMS).check_type(chk); } else { @@ -311,7 +335,7 @@ bool TImmissione_intra::protected_record(TRectype & rec) const int periodo = _msk->date2periodo(d); bool prot = is_riepilogo(tipo, d.year(), periodo) && - !yesno_box("Attenzione il movimento appartiene ad un riepilogo\nesistente, vuoi poterlo modificare ugualmente"); + !yesno_box("Attenzione: il movimento appartiene ad un riepilogo esistente,:\nSi desidera poterlo modificare ugualmente?"); _msk->enable(DLG_SAVEREC, !prot); return prot; } diff --git a/in/in0500a.uml b/in/in0500a.uml index 91982910f..3ce0e029d 100755 --- a/in/in0500a.uml +++ b/in/in0500a.uml @@ -141,9 +141,7 @@ BEGIN DISPLAY "Codice" CODCF DISPLAY "Ragione Sociale@50" RAGSOC COPY OUTPUT F_CLIFO -// VALIDATE PI_FUNC F_STATO CHECKTYPE REQUIRED -// WARNING "Lunghezza partita IVA errata" END CURRENCY F_TOT_DOC 18 @@ -225,14 +223,16 @@ BEGIN CHECKTYPE REQUIRED END -NUMBER F_NATURA_TRANS 1 +STRING F_NATURA_TRANS 1 BEGIN - PROMPT 1 3 "Natura transazione " + PROMPT 1 3 "Natura transazione " + FLAGS "U" USE %INT INPUT CODTAB F_NATURA_TRANS DISPLAY "Codice" CODTAB DISPLAY "Descrizione@70" S0 OUTPUT F_NATURA_TRANS CODTAB + CHECKTYPE NORMAL FIELD NATURA END @@ -363,8 +363,9 @@ BEGIN DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 OUTPUT F_PAESE CODTAB - CHECKTYPE REQUIRED - FIELD PAESE + CHECKTYPE NORMAL + FIELD PAESE + WARNING "Inserire il codice di un paese CEE valido" END STRING F_PAESE_ORIG 2 @@ -376,10 +377,11 @@ BEGIN DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 OUTPUT F_PAESE_ORIG CODTAB - CHECKTYPE REQUIRED + CHECKTYPE NORMAL FIELD PAESEORIG GROUP GR_ACQUISTI -END + WARNING "Inserire il codice di un paese CEE valido" +ENEND STRING F_PAESE_DUMMY 2 BEGIN @@ -404,7 +406,7 @@ STRING F_PROV 2 BEGIN PROMPT 64 7 "" FLAGS "U" - CHECKTYPE REQUIRED + CHECKTYPE NORMAL WARNING "Provincia assente" FIELD PROV END diff --git a/in/in0600.cpp b/in/in0600.cpp index b5e2850f7..4ac7fa1c0 100755 --- a/in/in0600.cpp +++ b/in/in0600.cpp @@ -30,15 +30,33 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j { switch (o.dlg()) { + case F_TIPO: + { + TString key ; key << main_app().get_firm(); + const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT"); + CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL; + + field(F_VALORE_STAT).check_type(chk); + field(F_CONSEGNA).check_type(chk); + field(F_TRASPORTO).check_type(chk); + + chk = frequenza() == 'M' ? CHECK_REQUIRED : CHECK_NORMAL; + field(F_PAESE).check_type(chk); + field(F_PAESE_ORIG).check_type(chk); + field(F_PROV).check_type(chk); + } + break; case F_NOMENCLATURA1: case F_NOMENCLATURA2: case F_NOMENCLATURA3: if (e == fe_close && !query_mode()) - { - TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3); - - if (key.empty()) - return error_box("La nomenclatura combinata e' obbligatoria"); + { + if (frequenza() != 'A') + { + TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3); + if (key.empty()) + return error_box("La nomenclatura combinata e' obbligatoria"); + } } else if (e == fe_init || e == fe_modify) @@ -46,7 +64,7 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3); const TRectype& nom = cache().get("%NOC", key); set(F_UMS, nom.get("S5")); - bool req = frequenza(anno()) == 'M'; + bool req = frequenza() == 'M'; if (req) // Solo la frequenza mensile puo' obbligare { const char obb = nom.get_char("S4"); @@ -58,7 +76,7 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j case F_VALORE_STAT: if (e == fe_init) { - bool req = frequenza(anno()) == 'M'; + bool req = frequenza() == 'M'; if (req) { TString16 key ; key << main_app().get_firm(); @@ -184,6 +202,7 @@ void TRiepiloghi_intra::init_insert_mode(TMask& m) void TRiepiloghi_intra::init_modify_mode(TMask& m) { check_existent_disk(m); + m.enable(F_VALUTA); } int TRiepiloghi_intra::write(const TMask& m) @@ -223,9 +242,10 @@ void TRiepiloghi_intra::check_existent_disk(const TMask& m) else if (m.field(F_PERIODO_A).shown()) periodo = m.get_int(F_PERIODO_A); + char tipo = m.get(F_TIPO)[0]; TString str; - str.format("%4d%02d",anno,periodo); + str.format("%c%4d%02d",tipo,anno,periodo); const TRectype& ird = cache().get("IRD",str); if (!ird.empty()) diff --git a/in/in0600a.uml b/in/in0600a.uml index 80ad9d18f..d1bcf5e91 100755 --- a/in/in0600a.uml +++ b/in/in0600a.uml @@ -190,9 +190,10 @@ BEGIN END -NUMBER F_NATURA_TRANS 1 +STRING F_NATURA_TRANS 1 BEGIN PROMPT 1 8 "Natura transazione " + FLAGS "U" USE %INT INPUT CODTAB F_NATURA_TRANS DISPLAY "Codice" CODTAB diff --git a/in/in0700.cpp b/in/in0700.cpp index 6baceb510..e71315130 100755 --- a/in/in0700.cpp +++ b/in/in0700.cpp @@ -31,32 +31,18 @@ void TRettifiche_mask::inventa_cambio_intra() const TString& codval = get(F_VALUTA); if (is_true_value(codval)) { - TTable cam("CAM"); - cam.put("CODTAB", codval); - const int err = cam.read(_isgteq); - bool yes = err != NOERR; - if (!yes) + TCurrency eur; get_currency(F_AMMONTARE, eur); + TCurrency val; get_currency(F_AMM_VALUTA, val); + if (eur.is_zero() && !val.is_zero()) { - TString16 v = cam.get("CODTAB"); - v.cut(3).rtrim(); - yes = v != codval; - } - if (yes) + val.change_to_firm_val(); + set(F_AMMONTARE, val); + } else + if (val.is_zero() && !eur.is_zero()) { - TCurrency eur; get_currency(F_AMMONTARE, eur); - TCurrency val; get_currency(F_AMM_VALUTA, val); - if (eur.is_zero()) - { - val.change_to_firm_val(); - set(F_AMMONTARE, val); - } - if (val.is_zero()) - { - const real cambio = cache().get("%VAL", codval, "S4"); - const TExchange exc(codval, cambio); - eur.change_value(exc); - set(F_AMM_VALUTA, eur); - } + const TExchange exc(codval); + eur.change_value(exc); + set(F_AMM_VALUTA, eur); } } } @@ -82,7 +68,6 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j TString key ; key << main_app().get_firm(); const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT"); const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL; - m.field(F_VALORE_STAT).check_type(chk); } break; @@ -93,24 +78,47 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j ef.check(); TCursor& cur = *ef.browse()->cursor(); bool ok = cur.ok(); - enable(-GR_ORIGINAL, !ok); if (e == fe_modify && insert_mode()) { for (short dlg = O_STATO; dlg <= O_NOMENCLATURA3; dlg++) { - const int pos = id2pos(dlg); - if (pos >= 0) - set(dlg + F_STATO - O_STATO, fld(pos).get()); + switch (dlg) + { + case O_NUM_RIG: // Non riportare il nmumero riga! + break; + default: + const int pos = id2pos(dlg); + if (pos >= 0) + set(dlg + F_STATO - O_STATO, fld(pos).get()); + break; + } } } } break; + case O_AMM_VALUTA: + if (e == fe_close && o.empty()) + { + const TString& codval = get(O_VALUTA); + if (is_true_value(codval)) + return error_box("Inserire l'ammontare in valuta %s", (const char*)codval); + } + break; case F_AMMONTARE: if (e == fe_modify && !o.empty() && field(F_AMM_VALUTA).empty()) inventa_cambio_intra(); break; + case F_VALUTA: + if (e == fe_init || e == fe_modify) + { + const bool tv = is_true_value(o.get()); + if (!tv) + reset(F_AMM_VALUTA); + enable(F_AMM_VALUTA, tv); + } + break; case F_AMM_VALUTA: - if (e == fe_modify && !o.empty() && field(F_AMMONTARE).empty()) + if (e == fe_modify && !field(F_VALUTA).empty() && field(F_AMMONTARE).empty()) inventa_cambio_intra(); break; default: @@ -175,7 +183,6 @@ void TRettifiche_intra::init_mask(TMask& m, bool keyon) m.enable(O_PERIODO_T, keyon); m.enable(O_PERIODO_A, keyon); m.enable(O_NUM_RIG, keyon); - m.enable(-GR_ORIGINAL, keyon); } void TRettifiche_intra::init_query_mode(TMask& m) diff --git a/in/in0700a.h b/in/in0700a.h index 3e13f34b0..c6da75caa 100755 --- a/in/in0700a.h +++ b/in/in0700a.h @@ -40,5 +40,3 @@ #define F_VALORE_STAT 226 #define F_NOMENCLATURA2 227 #define F_NOMENCLATURA3 228 - -#define GR_ORIGINAL 3 \ No newline at end of file diff --git a/in/in0700a.uml b/in/in0700a.uml index 872ebec22..5f9f09a5d 100755 --- a/in/in0700a.uml +++ b/in/in0700a.uml @@ -67,13 +67,9 @@ LIST O_PERIODO_T 2 16 BEGIN PROMPT 33 4 "Periodo " ITEM "01|Gennaio-Marzo" - MESSAGE COPY,O_PERIODO_M ITEM "02|Aprile-Giugno" - MESSAGE COPY,O_PERIODO_M ITEM "03|Luglio-Settembre" - MESSAGE COPY,O_PERIODO_M ITEM "04|Ottobre-Dicembre" - MESSAGE COPY,O_PERIODO_M FIELD PERETT NUM_EXPR (#O_ANNO<#F_ANNO)||((#O_ANNO=#F_ANNO)&&(#O_PERIODO_T<#F_PERIODO_T)) WARINIG "Si possono rettificare solo i periodi precedenti" @@ -83,7 +79,6 @@ LIST O_PERIODO_A 2 16 BEGIN PROMPT 33 4 "Periodo " ITEM "01|Annuale" - MESSAGE COPY,O_PERIODO_M END NUBER O_NUM_RIG 7 @@ -121,19 +116,13 @@ BEGIN OUTPUT O_VALORE_STAT VALSTAT CHECKTYPE SEARCH FIELD NUMRETT + ADD RUN IN0 -5 END STRING O_STATO 2 BEGIN PROMPT 2 5 "Stato CEE " - FLAGS "U" - USE %SCE - INPUT CODTAB O_STATO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT O_STATO CODTAB - CHECKTYPE NORMAL - GROUP GR_ORIGINAL + FLAGS "DU" END LIST O_TIPO_CF 1 10 @@ -147,6 +136,7 @@ END STRING O_PARTITA_IVA 12 BEGIN PROMPT 51 5 "Partita IVA " + FLAGS "D" USE LF_CLIFO KEY 5 INPUT TIPOCF O_TIPO_CF SELECT INPUT STATOPAIV O_STATO @@ -158,10 +148,8 @@ BEGIN OUTPUT O_STATO STATOPAIV OUTPUT O_PARTITA_IVA PAIV OUTPUT O_PARTITA_DESC RAGSOC -// VALIDATE PI_FUNC O_STATO CHECKTYPE REQUIRED WARNING "Lunghezza partita IVA errata" - GROUP GR_ORIGINAL END STRING O_PARTITA_DESC 50 @@ -170,85 +158,53 @@ BEGIN FLAGS "D" END -NUMBER O_NATURA_TRANS 1 +STRING O_NATURA_TRANS 1 BEGIN PROMPT 2 7 "Natura transazione " - USE %INT - INPUT CODTAB O_NATURA_TRANS - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@70" S0 - OUTPUT O_NATURA_TRANS CODTAB - GROUP GR_ORIGINAL + FLAGS "DU" END NUMBER O_NOMENCLATURA1 4 BEGIN PROMPT 28 7 "Nomenclatura combinata " - FLAGS "Z" - USE %NOC - INPUT CODTAB[1,4] O_NOMENCLATURA1 - INPUT CODTAB[5,6] O_NOMENCLATURA2 - INPUT CODTAB[7,8] O_NOMENCLATURA3 - DISPLAY "Codice" CODTAB[1,4] - DISPLAY "@3" CODTAB[5,6] - DISPLAY "@3" CODTAB[7,8] - DISPLAY "Descrizione@50" S0 - OUTPUT O_NOMENCLATURA1 CODTAB[1,4] - OUTPUT O_NOMENCLATURA2 CODTAB[5,6] - OUTPUT O_NOMENCLATURA3 CODTAB[7,8] - MESSAGE DIRTY,O_NOMENCLATURA3 - VALIDATE REQIF_FUNC 1 O_NOMENCLATURA2 - GROUP GR_ORIGINAL - WARNING "Nomenclatura combinata assente" + FLAGS "DZ" END NUMBER O_NOMENCLATURA2 2 BEGIN PROMPT 58 7 "" - FLAGS "Z" - COPY ALL O_NOMENCLATURA1 - MESSAGE DIRTY,O_NOMENCLATURA3 - VALIDATE REQIF_FUNC 1 O_NOMENCLATURA3 - GROUP GR_ORIGINAL - WARNING "Nomenclatura combinata assente" + FLAGS "DZ" END NUMBER O_NOMENCLATURA3 2 BEGIN PROMPT 63 7 "" - FLAGS "Z" - COPY ALL O_NOMENCLATURA1 - CHECKTYPE NORMAL - GROUP GR_ORIGINAL - WARNING "Nomenclatura combinata assente" + FLAGS "DZ" END CURRENCY O_AMMONTARE 18 BEGIN PROMPT 2 8 "Ammontare " - CHECKTYPE REQUIRED - GROUP GR_ORIGINAL + FLAGS "D" END STRING O_VALUTA 3 BEGIN PROMPT 43 8 "in valuta " FLAGS "D" - FIELD CODVAL END CURRENCY O_AMM_VALUTA 18 BEGIN PROMPT 59 8 "" DRIVENBY O_VALUTA - CHECKTYPE REQUIRED - GROUP GR_ORIGINAL + FLAGS "D" END CURRENCY O_VALORE_STAT 18 BEGIN PROMPT 2 9 "Valore statistico " - GROUP GR_ORIGINAL + FLAGS "D" END GROUPBOX DLG_NULL 78 8 @@ -278,7 +234,7 @@ END LIST F_PERIODO_M 2 16 BEGIN PROMPT 33 12 "Periodo " - FLAGS "AM" + FLAGS "M" FIELD PERIODO KEY 1 END @@ -287,13 +243,9 @@ LIST F_PERIODO_T 2 16 BEGIN PROMPT 33 12 "Periodo " ITEM "01|Gennaio-Marzo" - MESSAGE COPY,O_PERIODO_M ITEM "02|Aprile-Giugno" - MESSAGE COPY,O_PERIODO_M ITEM "03|Luglio-Settembre" - MESSAGE COPY,O_PERIODO_M ITEM "04|Ottobre-Dicembre" - MESSAGE COPY,O_PERIODO_M FIELD PERIODO END @@ -301,7 +253,6 @@ LIST F_PERIODO_A 2 16 BEGIN PROMPT 33 12 "Periodo " ITEM "01|Annuale" - MESSAGE COPY,O_PERIODO_M END NUBER F_NUM_RIG 7 @@ -320,7 +271,6 @@ BEGIN DISPLAY "Periodo rett." PERETT DISPLAY "Numero rett." NUMRETT OUTPUT F_PERIODO_M PERIODO - OUTPUT F_PERIODO_T PERIODO OUTPUT F_NUM_RIG NUMRIG CHECKTYPE REQUIRED FIELD NUMRIG @@ -374,9 +324,10 @@ BEGIN FLAGS "D" END -NUMBER F_NATURA_TRANS 1 +STRING F_NATURA_TRANS 1 BEGIN PROMPT 2 15 "Natura transazione " + FLAGS "U" USE %INT INPUT CODTAB F_NATURA_TRANS DISPLAY "Codice" CODTAB @@ -444,7 +395,13 @@ END STRING F_VALUTA 3 BEGIN PROMPT 43 16 "in valuta " - FLAGS "D" + FLAGS "U" + USE %VAL + INPUT CODTAB F_VALUTA + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_VALUTA CODTAB + CHECKTYPE NORMAL FIELD CODVAL END @@ -463,4 +420,4 @@ END ENDPAGE -ENDMASK +ENDMASK \ No newline at end of file diff --git a/in/inlib01.cpp b/in/inlib01.cpp index c76def9ad..d6a091c5e 100755 --- a/in/inlib01.cpp +++ b/in/inlib01.cpp @@ -41,18 +41,32 @@ char TIntra_mask::tipo() const return t; } -char TIntra_mask::frequenza(const int anno) const +char TIntra_mask::frequenza(int a, char t) const { - const char t = tipo(); - TDate d(TODAY); - if (anno < d.year()) + const TDate d(TODAY); + + if (a <= 0) + { + a = anno(); + if (a <= 0) + a = d.year(); + } + + switch (t) + { + case 'B': t = 'A'; break; // Rettifiche su Acquisti + case 'D': t = 'C'; break; // Rettifiche su Cessioni + default : t = tipo(); break; + } + + if (a < d.year()) { TLocalisamfile riep(LF_RIEPRETT); riep.put("TIPO", (char)t); - riep.put("ANNO", anno); + riep.put("ANNO", a); if (riep.read(_isgteq) == NOERR) { - if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == anno) + if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == a) { const char freq = riep.get_char("FREQUENZA"); @@ -62,7 +76,7 @@ char TIntra_mask::frequenza(const int anno) const } } - return (t == 'A' || t == 'B') ? _freq_acq : _freq_ces; + return (t == 'A') ? _freq_acq : _freq_ces; } int TIntra_mask::date2periodo(const TDate & d) diff --git a/in/inlib01.h b/in/inlib01.h index 322a467e7..f0e667801 100755 --- a/in/inlib01.h +++ b/in/inlib01.h @@ -20,7 +20,7 @@ protected: public: int date2periodo(const TDate & d); char tipo() const; - char frequenza(const int anno) const; + char frequenza(int anno = 0, char tipo = '\0') const; int periodo() const; const char* periodo_str() const; diff --git a/include/isam.cpp b/include/isam.cpp index a2efc02e7..ef186d570 100755 --- a/include/isam.cpp +++ b/include/isam.cpp @@ -23,6 +23,8 @@ #include #include #include +#include + #ifdef DBG #define JOURNAL @@ -284,6 +286,97 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout) } } +struct TCallbackFileinfo +{ + TString16 _var; + TFilename _app; +}; + +HIDDEN int find_relapp(TConfig& cfg, void* jolly) +{ + TCallbackFileinfo& info = *((TCallbackFileinfo*)jolly); + if (cfg.exist(info._var)) + { + info._app = cfg.get(info._var); + return info._app.not_empty(); + } + return FALSE; +} + +bool get_relapp(int logicnum, TString& app) +{ + TConfig ini("install.ini"); + TCallbackFileinfo fi; + fi._var.format("Edit_%d", logicnum); + ini.for_each_paragraph(find_relapp, &fi); + if (fi._app.not_empty()) + app = fi._app; + return fi._app.not_empty(); +} + +struct TCallbackTableinfo +{ + TString16 _var1, _var2, _var3; + TString4 _module; + TFilename _tabapp, _relapp; +}; + +HIDDEN int find_tabapp(TConfig& cfg, void* jolly) +{ + TCallbackTableinfo& info = *((TCallbackTableinfo*)jolly); + + if (cfg.exist(info._var1)) + { + info._tabapp = cfg.get(info._var1); + if (info._tabapp.not_empty()) + return 1; + } + if (cfg.get_paragraph().compare(info._module, 2, TRUE) == 0) + { + if (cfg.exist(info._var2)) + { + info._relapp = cfg.get(info._var2); + if (info._relapp.not_empty()) + return 2; + } + if (cfg.exist(info._var3)) + { + info._relapp = cfg.get(info._var3); + if (info._relapp.not_empty()) + return 3; + } + } + return 0; +} + +bool get_tabapp(const char * tabname, TString& app) +{ + TConfig ini("install.ini"); + TCallbackTableinfo fi; + TTable t(tabname); + fi._var1.format("Edit_%s", t.name()); + fi._var2.format("Edit_%d", t.num()); + fi._var2.format("Edit_%d", t.num() == LF_TABCOM ? LF_TAB : LF_TABCOM); + fi._module = t.module(); + ini.for_each_paragraph(find_tabapp, &fi); + + app = fi._tabapp; + if (app.empty()) + app = fi._relapp; + if (app.empty()) + { + app = "ba3 -0"; + if (fi._module.compare("ba", 2, TRUE) != 0) + { + TConfig c(CONFIG_STUDIO, fi._module); + if (c.exist("TabPrg")) + app = c.get("TabPrg"); + } + } + app << ' ' << tabname; + return tabname && *tabname > ' '; +} + //////////////////////////////////////////////////////////////////////////////////////////////////// // Funzioni implementate per la gestione file dati tramite Codebase //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1302,32 +1395,9 @@ int TBaseisamfile::is_valid() return err; } -struct TCallbackFileinfo -{ - TString16 _var; - TFilename _app; -}; - -HIDDEN int find_relapp(TConfig& cfg, void* jolly) -{ - TCallbackFileinfo& info = *((TCallbackFileinfo*)jolly); - if (cfg.exist(info._var)) - { - info._app = cfg.get(info._var); - return info._app.not_empty(); - } - return FALSE; -} - bool TBaseisamfile::get_relapp(TString& app) const { - TConfig ini("install.ini"); - TCallbackFileinfo fi; - fi._var.format("Edit_%d", num()); - ini.for_each_paragraph(find_relapp, &fi); - if (fi._app.not_empty()) - app = fi._app; - return app.not_empty(); + return curr().get_relapp(app); } @@ -3391,6 +3461,74 @@ bool TRectype::send_mail(const char* action) const return ok; } +bool TRectype::get_relapp(TString& app) const +{ + if (*_tab) + { + TString8 cod(_tab); + if (num() == LF_TABCOM) + cod.insert("%"); + else + if (num() == LF_TABGEN) + cod.insert("#"); + return ::get_tabapp(cod, app); + } + else + return ::get_relapp(num(), app); +} + +void TRectype::edit(int logicnum, const char * alternate_key_fields) const +{ + if (logicnum <= 0) + logicnum = num(); + + TToken_string key_labels; + + TRectype r(logicnum); + + if (*_tab) + r.settab(_tab); + + const RecDes* recd = r.rec_des(); // Descrizione del record della testata + const KeyDes& kd = recd->Ky[0]; // Elenco dei campi della chiave 1 + for (int i = 0; i < kd.NkFields; i++) + { + const int nf = kd.FieldSeq[i] % MaxFields; + const RecFieldDes& rf = recd->Fd[nf]; + key_labels.add(rf.Name); + } + + TToken_string key_fields(alternate_key_fields); + + if (key_fields.empty_items()) + key_fields = key_labels; + + TFilename ininame; ininame.temp(); + { + TConfig ini(ininame, "Transaction"); + ini.set("Action", "MODIFY"); + TString16 p; p << logicnum; + ini.set_paragraph(p); + + FOR_EACH_TOKEN(key_labels, tok) + { + const TString16 name(tok); + const TString& value = get(key_fields.get()); + ini.set(name, value); + } + } + + TString app; + + if (r.get_relapp(app)) + { + app << " -i" << ininame; + TExternal_app a(app); + + a.run(); + } +} + /////////////////////////////////////////////////////////// // TRecfield (campo/sottocampo di un record) /////////////////////////////////////////////////////////// @@ -3576,4 +3714,4 @@ TRecnotype TRecfield::ptr() const while(wp-- > (unsigned char*) _p) r = (r << 8) + *wp; return n ? -r : r; -} +} \ No newline at end of file diff --git a/include/isam.h b/include/isam.h index 263f451f8..054979a95 100755 --- a/include/isam.h +++ b/include/isam.h @@ -265,7 +265,11 @@ public: // Gestione posta elettronica virtual void fill_transaction(TConfig& cfg, int row = 0) const; bool send_mail(const char* action = "MODIFY") const; - + + // @cmember Ritorna la relapp che gestisce il file + virtual bool get_relapp(TString& app) const; + virtual void edit(int logicnum = 0, const char * alternate_key_fields = NULL) const; + // @cmember Inizializza un record staccato da un file. void init(int logicnum); // @cmember Costruttore Costruisce un record staccato da un file. diff --git a/include/mask.cpp b/include/mask.cpp index 7ac80f729..85cede188 100755 --- a/include/mask.cpp +++ b/include/mask.cpp @@ -1130,6 +1130,23 @@ const TString& TMask::get(short fld_id) const return s; } +const TString& TMask::get(const char * fld_id) const +{ + const TString * s = &EMPTY_STRING; + for (int i = 0 ; i < fields(); i++) + { + TMask_field& f = fld(i); + const TFieldref * campo = f.field(); + if (campo != NULL && campo->name() == fld_id) + { + s= &f.get(); + if (f.active()) + break; + } + } + return *s; +} + long TMask::get_long(short fld_id) const { // const TString& s = field(fld_id).get(); @@ -1196,6 +1213,25 @@ void TMask::set( } } +void TMask::set( + const char * fld_id, // @parm FIELD del campo da settare + const char* str, // @parm Stringa da assegnare al campo + bool hit) // @parm Indica se occorre rifare i controlli una volta settato il campo + // con il nuovo valore (default FALSE) + // @parm long | n | Numero da asegnare al campo + + // @syntax set(short fld_id, const char *s, bool hit); + // @syntax set(short fld_id, long n, bool hit); +{ + for (int i = 0 ; i < fields(); i++) + { + TMask_field& f = fld(i); + const TFieldref * campo = f.field(); + if (campo != NULL && campo->name() == fld_id) + set(f.dlg(), str, hit); + } +} + void TMask::set(short fld_id, long n, bool hit) { char s[16]; @@ -2040,7 +2076,7 @@ int TMask::save_profile(int num, const char* desc) const return num; } -int TMask::load_profile(int num) +int TMask::load_profile(int num, bool reset) { TFilename prof; make_profile_name(prof); @@ -2060,16 +2096,19 @@ int TMask::load_profile(int num) if (f.is_loadable() && f.get_default().empty()) { name.format("F_%d", f.dlg()); - if (f.is_sheet()) + if (reset || var.objptr(name) != NULL) { - TSheet_field& sf = (TSheet_field&)f; - sf.destroy(); - for (int r = 0; ini.exist(name,r); r++) - sf.row(r) = ini.get(name, NULL, r); - sf.force_update(); + if (f.is_sheet()) + { + TSheet_field& sf = (TSheet_field&)f; + sf.destroy(); + for (int r = 0; ini.exist(name,r); r++) + sf.row(r) = ini.get(name, NULL, r); + sf.force_update(); + } + else + f.set(ini.get(name)); } - else - f.set(ini.get(name)); } } diff --git a/include/mask.h b/include/mask.h index e07b7dc34..6835325ac 100755 --- a/include/mask.h +++ b/include/mask.h @@ -274,7 +274,10 @@ public: void set(short fld_id, long num, bool hit=FALSE); // @cmember Setta il campo con un currency void set(short fld_id, const TCurrency& num, bool hit=FALSE); + // @cmember Setta una tutti i campi che hanno come FIELD

+ void set(const char * fld_id, const char * str, bool hit=FALSE); // @cmember Ritorna il contenuto del campo

sotto forma di stringa + virtual const TString& get(short fld_id) const; // @cmember Ritorna il contenuto del campo

sotto forma di long long get_long(short fld_id) const; @@ -291,6 +294,8 @@ public: // @cmember Ritorna il contenuto del campo

sotto forma di currency TCurrency& get_currency(short fld_id, TCurrency& curr) const; + // @cmember Ritorna il contenuto del primo campo attivo campo che ha come FIELD

+ const TString& get(const char * fld_id) const; // @cmember Indica quale campo deve ricevere per primo il focus nella maschera int first_focus(short id); @@ -353,6 +358,8 @@ public: // @cmember Azzera il campo void reset(short fld_id = 0); + // @cmember Azzera il campo + void reset(const char * fld_id) {set(fld_id, "");} // @cmember Legge, dalla relazione

, i valori del campo con specifica FIELD void autoload(const TRelation& r); @@ -380,7 +387,7 @@ public: // @cmember Salva il profilo

int save_profile(int num = 0, const char* desc = NULL) const; // @cmember Carica il profilo

- int load_profile(int num = 0); + int load_profile(int num = 0, bool reset = TRUE); // @cmember Ritorna il primo campo dirty short dirty() const; diff --git a/include/msksheet.cpp b/include/msksheet.cpp index a0aaf32e6..3f8dca0a9 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -1166,19 +1166,22 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev) break; const int oldrec = _cur_rec; - const int record = set_pos(xiev->v.select.xi_obj->v.row, 1); + const int record = set_pos(xiev->v.select.xi_obj->v.row, _cur_col); if (oldrec != _cur_rec) { _row_dirty = _cell_dirty = FALSE; str2mask(_cur_rec); on_idle(); // Forces update delayed by str2mask _cur_rec = record; // Forces correct record (may be changed by on_idle!) + notify(_cur_rec, K_TAB); + set_pos(xiev->v.select.xi_obj->v.row, find_enabled_column(_cur_rec, 1, +1)); } if (xiev->v.select.column > 0) { TOperable_field* f = col2field(xiev->v.select.column); if (f && f->active()) + { notify_change(); if (f->get().empty()) @@ -1188,14 +1191,15 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev) f->on_key(K_SPACE); mask2str(_cur_rec); on_idle(); + } } else { - const int button_pos = sheet_mask().id2pos(FIRST_FIELD-1); + TMask & sm = owner().sheet_mask(); + const int button_pos = sm.id2pos(FIRST_FIELD-1); if (button_pos >= 0) { - TMask & sm = owner().sheet_mask(); TMask_field& button = sm.fld(button_pos); if (button.active()) { @@ -1892,14 +1896,7 @@ void TSpreadsheet::set_back_and_fore_color(COLOR back, COLOR fore, int row, int { TRow_property* prop = get_property(r, crea); if (prop) - { -//qui 01 prop->set(col, back, fore); -/* if (back != COLOR_INVALID) - prop->_back = back; - if (fore != COLOR_INVALID) - prop->_fore = fore; */ - } } } } @@ -3111,4 +3108,3 @@ void TSheet_field::set_userput(SHEET_USERGETPUT handler) { _userput = handler; } - diff --git a/include/os_win16.cpp b/include/os_win16.cpp index 8f7ba258f..3e7a6c995 100755 --- a/include/os_win16.cpp +++ b/include/os_win16.cpp @@ -682,11 +682,10 @@ bool os_test_network_version() { const char* VREDIRNAME = "vredir.vxd"; DWORD handle; - BYTE infoBuffer[512]; - - DWORD dwSize = GetFileVersionInfoSize(VREDIRNAME,&handle); + const DWORD dwSize = GetFileVersionInfoSize(VREDIRNAME,&handle); if (dwSize) { + BYTE infoBuffer[512]; GetFileVersionInfo(VREDIRNAME,handle,dwSize,infoBuffer); long *language; void * lpBuffer; diff --git a/include/prefix.cpp b/include/prefix.cpp index 6619bb9c1..1b2cbb826 100755 --- a/include/prefix.cpp +++ b/include/prefix.cpp @@ -923,6 +923,7 @@ void TPrefix::set( return; if (!force && !test(name)) return; + if (_prefix != ".") { _manager.close_all(); @@ -1266,4 +1267,3 @@ bool TPrefix::build_firm_data(long codditta, bool flagcom) return TRUE; } - diff --git a/include/relapp.cpp b/include/relapp.cpp index ea8b5b291..0a7377287 100755 --- a/include/relapp.cpp +++ b/include/relapp.cpp @@ -480,7 +480,9 @@ void TRelation_application::insert_mode() // ....possibilmente spostare questa chiamata ..... if (_curr_transaction == TRANSACTION_INSERT) - ini2insert_mask(); + ini2insert_mask(); + + _mask->load_profile(0, FALSE); } bool TRelation_application::modify_mode() diff --git a/include/sheet.cpp b/include/sheet.cpp index 17139f03c..79baf01d9 100755 --- a/include/sheet.cpp +++ b/include/sheet.cpp @@ -153,6 +153,10 @@ TSheet_control::TSheet_control( } if (wi.find('R') >= 0) _type[i] = 'R'; else + if (wi.find('V') >= 0) + _type[i] = 'V'; else + if (wi.find('P') >= 0) + _type[i] = 'P'; else if (wi.find('M') >= 0) _type[i] = 'M'; else if (wi.find('C') >= 0) @@ -233,7 +237,7 @@ TSheet_control::TSheet_control( long attr = XI_ATR_VISIBLE | XI_ATR_ENABLED | XI_ATR_AUTOSCROLL | XI_ATR_READONLY; if (_type[i] == 'C') attr |= XI_ATR_SELECTABLE; - if (_type[i] == 'R') + if (_type[i] == 'R' || _type[i] == 'V' || _type[i] == 'P') // Right, Currency, Price attr |= XI_ATR_RJUST; coldef = xi_add_column_def(listdef, FIRST_FIELD+i+1000, attr, i+1, v_width[i] * XI_FU_MULTIPLE, m_width[i], (char*)h); @@ -743,6 +747,20 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev) case 'M': // Set value for "roman" cell src = itor(atoi(row(rec).get(col))); break; + case 'V': // Set value for "value" cell + { + const real r = row(rec).get(col); + TCurrency c(r); + src = c.string(TRUE); + } + break; + case 'P': // Set value for "price" cell + { + const real r = row(rec).get(col); + TPrice c(r); + src = c.string(TRUE); + } + break; default: // Set value for "normal" cell src = row(rec).get(col); break; @@ -1132,25 +1150,25 @@ bool TSheet::on_key(KEY key) stop_run(K_ENTER); break; default: - key -= K_CTRL; - if (key >= 'A' && key <= 'Z') - { - for (int i = fields()-1; i >= 0; i--) - { - TMask_field& f = fld(i); - if (f.active() && f.is_kind_of(CLASS_BUTTON_FIELD)) - { - TButton_field& b = (TButton_field&)f; - if (b.virtual_key() == key) - { - f.on_key(K_SPACE); - if (b.exit_key() > 0) - stop_run(b.exit_key()); - return TRUE; - } - } - } - } + key -= K_CTRL; + if (key >= 'A' && key <= 'Z') + { + for (int i = fields()-1; i >= 0; i--) + { + TMask_field& f = fld(i); + if (f.active() && f.is_kind_of(CLASS_BUTTON_FIELD)) + { + TButton_field& b = (TButton_field&)f; + if (b.virtual_key() == key) + { + f.on_key(K_SPACE); + if (b.exit_key() > 0) + stop_run(b.exit_key()); + return TRUE; + } + } + } + } break; } diff --git a/include/tabutil.cpp b/include/tabutil.cpp index c9ffb5304..7cb5b1cf9 100755 --- a/include/tabutil.cpp +++ b/include/tabutil.cpp @@ -205,68 +205,3 @@ const char* TTable::description() return _description; } -struct TCallbackTableinfo -{ - TString16 _var1, _var2, _var3; - TString4 _module; - TFilename _tabapp, _relapp; -}; - -HIDDEN int find_relapp(TConfig& cfg, void* jolly) -{ - TCallbackTableinfo& info = *((TCallbackTableinfo*)jolly); - - if (cfg.exist(info._var1)) - { - info._tabapp = cfg.get(info._var1); - if (info._tabapp.not_empty()) - return 1; - } - if (cfg.get_paragraph().compare(info._module, 2, TRUE) == 0) - { - if (cfg.exist(info._var2)) - { - info._relapp = cfg.get(info._var2); - if (info._relapp.not_empty()) - return 2; - } - if (cfg.exist(info._var3)) - { - info._relapp = cfg.get(info._var3); - if (info._relapp.not_empty()) - return 3; - } - } - return 0; -} - -bool TTable::get_relapp(TString& app) const -{ - TConfig ini("install.ini"); - TCallbackTableinfo fi; - fi._var1.format("Edit_%s", (const char*)_tabname); - fi._var2.format("Edit_%d", num()); - fi._var3.format("Edit_%d", num() == LF_TAB ? LF_TABCOM : LF_TAB); - fi._module = ((TTable*)this)->module(); - ini.for_each_paragraph(find_relapp, &fi); - - app = fi._tabapp; - if (app.empty()) - app = fi._relapp; - if (app.empty()) - { - app = "ba3 -0"; - if (fi._module.compare("ba", 2, TRUE) != 0) - { - TConfig c(CONFIG_STUDIO, fi._module); - if (c.exist("TabPrg")) - app = c.get("TabPrg"); - } - } - app << ' '; - if (num() == LF_TABCOM) - app << '%'; - app << _tabname; - return app.not_empty(); -} - diff --git a/include/tabutil.h b/include/tabutil.h index edd933676..fb6054e61 100755 --- a/include/tabutil.h +++ b/include/tabutil.h @@ -55,9 +55,10 @@ public: // @cmember Ritorna la relapp che gestisce la tabella virtual bool get_relapp(TString& app) const; + // @cmember Ritorna il numero logico della tabella

static int name2log(const char* tabname); }; -#endif // __TABUTIL_H +#endif // __TABUTIL_H \ No newline at end of file diff --git a/include/validate.cpp b/include/validate.cpp index cf1c6b630..e09840cbe 100755 --- a/include/validate.cpp +++ b/include/validate.cpp @@ -159,19 +159,16 @@ HIDDEN bool _pi_val(TMask_field& f, KEY) const TString& stato = m.get(atoi(get_val_param(0))); const TString& pi = f.get(); - bool ok = pi_check (stato, pi); + bool ok = pi_check(stato, pi); if (!ok) { if (f.dirty()) { - bool len_error = TRUE; - if (stato.blank() || stato == "IT") - len_error = pi.len() != 11; - const char* msg = len_error ? "Lunghezza p" : "P"; - ok = f.yesno_box("%sartita IVA errata, la accetto ugualmente?", msg); + ok = f.yesno_box("Partita IVA errata, la accetto ugualmente?"); if (ok) f.set_dirty(FALSE); } - else ok = TRUE; // Era gia' errata e la ho accettata + else + ok = TRUE; // Era gia' errata e la ho accettata } return ok; } diff --git a/m770/770100.cpp b/m770/770100.cpp index 0ce17702b..fc5c307bb 100755 --- a/m770/770100.cpp +++ b/m770/770100.cpp @@ -782,8 +782,6 @@ bool TSchedaPercipienti::check_competenza(TMask_field& f, KEY k) // bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k) { - const int fdec = TCurrency::get_firm_dec(); - if (k == K_ENTER) { TMask& m = f.mask(); @@ -828,11 +826,13 @@ bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k) for (i = 0; i < rver.items(); i++) { TToken_string& row = (TToken_string&)rver[i]; - if (app().my_empty_items(row, TRUE)) continue; - real versato (row.get(7)); + if (app().my_empty_items(row, TRUE)) + continue; + real versato (row.get(7)); app()._tot_vers += versato; } + const int fdec = TCurrency::get_firm_dec(); app()._tot_rit.round(fdec); app()._tot_vers.round(fdec); @@ -840,17 +840,21 @@ bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k) m.set(F_RITOPE, app()._tot_rit); m.set(F_RITVER, app()._tot_vers); - const real THRESOLD = 500.00; - const real diff = app()._tot_vers - app()._tot_rit; + const real diff = abs(app()._tot_vers - app()._tot_rit); if (app()._tot_vers != ZERO && diff > ZERO) - if (diff > THRESOLD) + { + const bool in_euro = is_euro_value(""); + const real THRESOLD = in_euro ? 0.50 : 500.0; + const bool war = in_euro ? (diff >= THRESOLD) : (diff > THRESOLD); + if (war) { - f.warning_box ("La differenza tra il totale dei versamenti " - "e il totale delle ritenute non puo' superare " - "le %s lire", THRESOLD.string()); + f.warning_box("La differenza tra il totale dei versamenti " + "ed il totale delle ritenute non puo' superare %s %s", + THRESOLD.string(), in_euro ? "Euro" : "Lire"); return forzatura; } + } } return TRUE; } @@ -889,7 +893,6 @@ void TSchedaPercipienti::mask2rel(const TMask& m) _rel->destroy_rows(); // Destroy all records pag_pack(); // Destroy all null rows - // salva pagamenti TArray& rows = pags().rows_array(); for (int i = 0; i < rows.items(); i++) @@ -984,10 +987,10 @@ void TSchedaPercipienti::mask2rel(const TMask& m) const char luogo = row.get_char(2); const char tipo = row.get_char(3); - TString16 serie(row.get(4)); - TString numero(row.get(5)); + const TString16 serie(row.get(4)); + const TString16 numero(row.get(5)); const long ProgBanca(row.get_long(6)); - real ritenuta (row.get(7)); + const real ritenuta (row.get(7)); const int numvers (row.get_int(8)); r.put("VERS1015",vers1015); diff --git a/m770/770100a.uml b/m770/770100a.uml index 0185dd558..46697aa65 100755 --- a/m770/770100a.uml +++ b/m770/770100a.uml @@ -143,8 +143,8 @@ BEGIN DISPLAY "N°docum." NUMDOC DISPLAY "Quadro" %CA7->S1 DISPLAY "Caus." CAUSQUA - DISPLAY "Rit.operate@15r" RITOPE - DISPLAY "Rit.versate@15r" RITVER + DISPLAY "Rit.operate@15V" RITOPE + DISPLAY "Rit.versate@15V" RITVER OUTPUT F_TIPOA TIPOA OUTPUT F_CODANAGR CODANAGR OUTPUT F_NPROG NPROG diff --git a/m770/770200.cpp b/m770/770200.cpp index e27287fc0..1cee3a979 100755 --- a/m770/770200.cpp +++ b/m770/770200.cpp @@ -13,7 +13,7 @@ #include "77lib.h" #include "770200a.h" -class TVersa_rit : public TApplication +class TVersa_rit : public TSkeleton_application { private: TLink770 _coll; @@ -44,7 +44,7 @@ class TVersa_rit : public TApplication protected: virtual bool create(); virtual bool destroy(); - virtual bool menu(MENU_TAG m); + virtual void main_loop(); int split_rpag(const long codditta,char tipoa, const long codanagr, const int nprog, @@ -54,10 +54,10 @@ class TVersa_rit : public TApplication const long codanagr, const int nprog, const int nriga, const long new_vers); long add_new_vers(const long codditta, char tipoa, - const long codanagr, const int nprog, - real& versato); + const long codanagr, const int nprog, + const real& versato); - void attach_pag_vers(TToken_string& r, real& versato, const bool last=FALSE); + void attach_pag_vers(TToken_string& r, real& versato, bool last); real ritenuta_versata(const long codditta,const long numvers); bool ha_pagamenti_non_versati(const long codditta, @@ -84,8 +84,6 @@ TCursor* TVersa_rit::meik_curs(TRelation* rel) bool TVersa_rit::create() { - TApplication::create(); - // simulo una chiamata da contabilitā // (lo lascio per eventuali prove) // real totdocla = ZERO; @@ -115,10 +113,10 @@ bool TVersa_rit::create() TMessage* msg = m.next_s("LINK770"); // Questo programma si richiama solo dalla contabilita' - if (!msg) return FALSE; + if (!msg) + return FALSE; if ( !_coll.read(msg->body()) ) return warning_box("Errore nei parametri passati"); - _perc = new TLocalisamfile(LF_PERC); _scperc = new TLocalisamfile(LF_SCPERC); _rpag = new TLocalisamfile(LF_RPAG); @@ -147,11 +145,11 @@ bool TVersa_rit::create() "@1|T|Codice|Scheda n.|Data@10|Ragione@50"); _pagam = new TArray_sheet(3, 3, -3, -3, "Selezione ritenute da versare", - "@1|T|Codice|Scheda n.|Riga n.|Ritenuta@18R"); + "@1|T|Codice|Scheda n.|Riga n.|Ritenuta@18V"); _apags.destroy(); - dispatch_e_menu (BAR_ITEM(1)); - return TRUE; + + return TSkeleton_application::create(); } bool TVersa_rit::destroy() @@ -232,15 +230,15 @@ bool TVersa_rit::abicab_hndl(TMask_field& f, KEY k) { if (f.to_check(k)) { - TString16 park(f.get()); - TMask& m = f.mask(); - char tipo = m.get(F_TIPO)[0]; + TMask& m = f.mask(); + const char tipo = m.get(F_TIPO)[0]; // ABI/CAB solo se tipo e' B if (tipo != 'B') return TRUE; - for (int i=0; iget_int()) != 0 ) // le righe partono da 1 { const real da_versare = tpag->get(); // leggo importo rimasto da versare - const TCurrency k(da_versare); TToken_string rr(100); rr.add(" "); // Spazio per selezionare rr.add(tipoa); rr.add(codanagr); -// rr.add(ragsoc); rr.add(nprog); rr.add(nriga); - rr.add(k.string(TRUE)); + rr.add(da_versare.string()); // Importo senza punti e virgole !!!!!!!!!!!!! _pagam->add(rr); } } @@ -424,11 +421,11 @@ void TVersa_rit::build_schede_sheet(const long codditta) bool TVersa_rit::do_all() { - KEY kp; + long items = 0L; // esecuzione prima maschera: richiesta estremi versamento - kp = _msk->run(); + KEY kp = _msk->run(); if (kp != K_ENTER) return FALSE; @@ -463,15 +460,15 @@ bool TVersa_rit::do_all() } kp = _sheet_perc->run(); - - if (kp == K_ENTER) + if (kp == K_ENTER) + { if (!_sheet_perc->one_checked()) { warning_box("Nessun percipiente selezionato"); continue; } - - if (kp == K_ESC) + } + else return FALSE; const long selected = _sheet_perc->selected(); @@ -488,15 +485,15 @@ bool TVersa_rit::do_all() } kp = _schede->run(); - - if (kp == K_ENTER) + if (kp == K_ENTER) + { if (!_schede->one_checked()) { warning_box("Nessuna scheda selezionata"); continue; } - - if (kp == K_ESC) + } + else continue; build_pagam_sheet(codditta); @@ -518,75 +515,43 @@ bool TVersa_rit::do_all() // Distribuisce _versato sui pagamenti selezionati creando la riga di // versamento se occorre - long chk = 0L; - for (int i=0; i < _pagam->items(); i++) - if (_pagam->checked(i)) + const long totchk = _pagam->checked(); + if (totchk > 0) + { + long chk = 0L; + for (int i=0; i < _pagam->items() && _versato > ZERO; i++) if (_pagam->checked(i)) { chk++; - if (_versato == ZERO) break; -// Sull'ultimo pagamento metto tutto il versamento rimasto - const bool last_checked = chk == _pagam->checked(); - + const bool is_last_checked = (chk == totchk); TToken_string& r = _pagam->row(i); - real da_versare(r.get(5)); - - attach_pag_vers(r, _versato, last_checked); - - if (da_versare > _versato) - _versato = ZERO; - else - _versato -= da_versare; + attach_pag_vers(r, _versato, is_last_checked); } - return warning_box("Creazione versamenti terminata"); + return warning_box("Creazione di %d versamenti terminata", chk); + } } // while (TRUE) return TRUE; } -void TVersa_rit::attach_pag_vers(TToken_string& r, real& versato, const bool last) +void TVersa_rit::attach_pag_vers(TToken_string& r, real& disponibile, bool is_last) { - char tipoa = r.get_char(1); + const long codditta = get_firm(); + const char tipoa = r.get_char(1); const long codanagr = r.get_long(2); const int nprog = r.get_int(3); const int nriga = r.get_int(4); - const long codditta = get_firm(); - real da_versare(r.get(5)); // importo ancora "scoperto" in questo pag. + const real da_versare = r.get(5); // importo ancora "scoperto" in questo pag. -/************************************************************************* - TLocalisamfile rpag(LF_RPAG); - rpag.setkey(1); - rpag.zero(); - rpag.put("CODDITTA", (long)codditta); - rpag.put("TIPOA", tipoa); - rpag.put("CODANAGR", (long)codanagr); - rpag.put("NPROG", nprog); - rpag.put("NRIGA", nriga); - if (rpag.read() != NOERR) return; // Non dovrebbe succedere mai -// Decido l'importo da attribuire al nuovo versamento - real ritenuta = rpag.get_real("RITENUTA"); -*************************************************************************/ - - real vers_corr = ZERO; - -// Se e' l'ultimo pagamento metto tutto l'importo del versamento - if (last) - vers_corr = versato; + real vers_corr; + // Se e' l'ultimo pagamento metto tutto l'importo del versamento + if (is_last) + vers_corr = disponibile; else - vers_corr = versato > da_versare ? da_versare : versato; + vers_corr = (disponibile > da_versare) ? da_versare : disponibile; + disponibile -= vers_corr; // Scalo versamento corrente -// const long numvers = rpag.get_long("NUMVERS"); const long new_vers = add_new_vers(codditta,tipoa,codanagr,nprog,vers_corr); - -// Se il pagamento era gia' collegato ad un versamento lo divido in due -// pagamenti: uno lo lascio collegato al precedente versamento, l'altro -// collegato al nuovo. -// Ogni pagamento puo' essere collegato A UNO E UNO SOLO versamento -/****** - if (numvers > 0) - split_rpag(codditta,tipoa,codanagr,nprog,nriga,versato,da_versare,new_vers); - else -*****/ - attach_rpag(codditta,tipoa,codanagr,nprog,nriga,new_vers); + attach_rpag(codditta,tipoa,codanagr,nprog,nriga,new_vers); } int TVersa_rit::split_rpag(const long codditta,char tipoa, @@ -638,7 +603,7 @@ int TVersa_rit::split_rpag(const long codditta,char tipoa, // Leggo ritenuta del vecchio record e il suo versamento eventuale // La parte che era stata gia' versata resta con il vecchio record // La parte versata ora viene registrata nel nuovo. - real ritenuta = rpag.get_real("RITENUTA"); + real ritenuta = rpag.get("RITENUTA"); real parte_versata = ritenuta - da_versare; TRectype salvo(rpag.curr()); @@ -673,25 +638,25 @@ int TVersa_rit::attach_rpag(const long codditta, char tipoa, const int nriga, const long new_vers) { TLocalisamfile rpag(LF_RPAG); - int ret_code = 0; - rpag.zero(); - rpag.put("CODDITTA", (long)codditta); + rpag.put("CODDITTA", codditta); rpag.put("TIPOA", tipoa); - rpag.put("CODANAGR", (long)codanagr); + rpag.put("CODANAGR", codanagr); rpag.put("NPROG", nprog); rpag.put("NRIGA", nriga); - if ((ret_code = rpag.read()) != NOERR) + int ret_code = rpag.read(); + if (ret_code != NOERR) { - warning_box("Pagamento non trovato. Codice %d", ret_code); + error_box("Pagamento non trovato. Errore %d", ret_code); return ret_code; } - rpag.put("NUMVERS", (long)new_vers); + rpag.put("NUMVERS", new_vers); - if ((ret_code = rpag.rewrite()) != NOERR) + ret_code = rpag.rewrite(); + if (ret_code != NOERR) { - warning_box("Pagamento non modificato. Codice %d", ret_code); + error_box("Pagamento non modificato. Errore %d", ret_code); return ret_code; } @@ -700,7 +665,7 @@ int TVersa_rit::attach_rpag(const long codditta, char tipoa, long TVersa_rit::add_new_vers(const long codditta, char tipoa, const long codanagr, const int nprog, - real& versata) + const real& versata) { TLocalisamfile rver(LF_RVER); int nriga = 0; @@ -723,9 +688,9 @@ long TVersa_rit::add_new_vers(const long codditta, char tipoa, // Scrivo il nuovo record rver.zero(); - rver.put("CODDITTA", (long)codditta); + rver.put("CODDITTA", codditta); rver.put("TIPOA", tipoa); - rver.put("CODANAGR", (long)codanagr); + rver.put("CODANAGR", codanagr); rver.put("NPROG", nprog); rver.put("NRIGA", nriga); // rver.put("NUMVERS", (long)nriga); @@ -738,23 +703,32 @@ long TVersa_rit::add_new_vers(const long codditta, char tipoa, if (rver.write() != NOERR) { - warning_box("Fallita creazione versamento. Codice %d", rver.status()); + error_box("Fallita creazione versamento. Errore %d", rver.status()); return 0L; } + TLocalisamfile scperc(LF_SCPERC); + scperc.zero(); + scperc.put("CODDITTA", codditta); + scperc.put("TIPOA", tipoa); + scperc.put("CODANAGR", codanagr); + scperc.put("NPROG", nprog); + if (scperc.read() == NOERR) + { + real ritver = scperc.get("RITVER"); + ritver += versata; + scperc.put("RITVER", ritver); + scperc.rewrite(); + } + return nriga; } - -bool TVersa_rit::menu(MENU_TAG m) +void TVersa_rit::main_loop() { - if (m == BAR_ITEM(1)) - return do_all(); - - return FALSE; + do_all(); } - int collega_vers_rit(int argc, char* argv[]) { TVersa_rit a; diff --git a/m770/770200a.uml b/m770/770200a.uml index a01d851a2..31f226812 100755 --- a/m770/770200a.uml +++ b/m770/770200a.uml @@ -44,14 +44,12 @@ BEGIN PROMPT 2 5 "Data " CHECKTYPE REQUIRED WARNING "Inserire la data del versamento" - HELP "Inserire la data del versamento" GROUP 1 END STRING F_LUOGO 1 BEGIN PROMPT 21 5 "Luogo " - HELP "Indicare il luogo del versamento" SHEET "Cod.|Descrizione@30" INPUT F_LUOGO ITEM " |Nessuno" @@ -61,7 +59,6 @@ BEGIN OUTPUT 71 FLAGS "U" WARNING "Manca il luogo del versamento" - HELP "Inserire il luogo del versamento" VALIDATE NOT_EMPTY_FUNC GROUP 1 END @@ -114,7 +111,6 @@ BEGIN OUTPUT F_TIPO OUTPUT 70 GROUP 1 - HELP "Inserire il tipo di versamento" WARNING "Manca il tipo di versamento" FLAGS "U" VALIDATE NOT_EMPTY_FUNC @@ -148,7 +144,6 @@ BEGIN CHECKTYPE REQUIRED FLAGS "G" WARNING "Inserire il numero di serie" - HELP "Inserire la serie" GROUP 1 2 4 END @@ -157,7 +152,6 @@ BEGIN PROMPT 39 7 "" VALIDATE REQIF_FUNC 2 103 104 WARNING "Inserire il numero/quietanza" - HELP "Inserire il numero" FLAGS "G" GROUP 1 2 3 4 5 END @@ -165,8 +159,6 @@ END CURRENCY F_VERSATO 15 BEGIN PROMPT 2 10 "Importo versato " - PICTURE "." - HELP "Inserire l'importo versato" WARNING "Manca l'importo versato" CHECKTYPE REQUIRED END diff --git a/m770/772400.cpp b/m770/772400.cpp index 03b98ec28..3abce7360 100755 --- a/m770/772400.cpp +++ b/m770/772400.cpp @@ -70,9 +70,9 @@ protected: virtual void postclose_print(); public: - TRectype& look_causali(int); - TRectype& look_schperc(long,char,long,int); - TDate look_vers(TSchedaP& sch, long numvers); + const TRectype& look_causali(int); + const TRectype& look_schperc(long,char,long,int); + TDate look_vers(const TSchedaP& sch, long numvers); void crea_sort(); void init_sort(); void leggi_sort(); @@ -89,12 +89,12 @@ public: HIDDEN inline TSt_vers& app() { return (TSt_vers&)main_app(); } const real& round_mille_lire(real& n) -{ +{ + // Arrotonda alle mille lire se siamo in lire, altrimenti non arrotondare! const int dec = TCurrency::get_firm_dec(); if (dec == 0) n.round(-3); // 1000 Lire - else - n.round(0); // Un Euro + return n; } @@ -115,25 +115,22 @@ bool TSt_vers::codditta_hnd(TMask_field& f, KEY k) bool filter_func (const TRelation* rel) { - long codditta = rel->lfile(LF_RPAG).get_long(PAG_CODDITTA); - - //const TRectype& rec = rel->lfile(LF_RVER).curr(); - + const TRectype& rpag = rel->curr(LF_RPAG); + const long codditta = rpag.get_long(PAG_CODDITTA); if (codditta != app()._codditta) return FALSE; - TDate datapag = rel->lfile(LF_RPAG).get(PAG_DATAPAG); + const TDate datapag = rpag.get(PAG_DATAPAG); if (datapag.ok() && datapag <= app()._datamsk) { - long numvers = rel->lfile(LF_RPAG).get_long(PAG_NUMVERS); + const long numvers = rpag.get_long(PAG_NUMVERS); if (numvers <= 0) return TRUE; - const long codanagr = rel->lfile(LF_RPAG).get_long(PAG_CODANAGR); - const char tipoa = rel->lfile(LF_RPAG).get_char(PAG_TIPOA); - const int nprog = rel->lfile(LF_RPAG).get_int(PAG_NPROG); + const long codanagr = rpag.get_long(PAG_CODANAGR); + const char tipoa = rpag.get_char(PAG_TIPOA); + const int nprog = rpag.get_int(PAG_NPROG); TSchedaP sch(codditta, tipoa, codanagr, nprog); - //TDate datavers = rel->lfile(LF_RVER).get(VER_DATAVERS); TDate datavers = app().look_vers(sch, numvers); if (!datavers.ok()) return TRUE; @@ -141,7 +138,7 @@ bool filter_func (const TRelation* rel) return FALSE; } -TDate TSt_vers::look_vers(TSchedaP& scheda, long num) +TDate TSt_vers::look_vers(const TSchedaP& scheda, long num) { TLocalisamfile vers(LF_RVER); vers.zero(); @@ -157,9 +154,9 @@ TDate TSt_vers::look_vers(TSchedaP& scheda, long num) return vers.get_date(VER_DATAVERS); } -TRectype& TSt_vers::look_schperc (long cod, char t, long codan, int np) +const TRectype& TSt_vers::look_schperc (long cod, char t, long codan, int np) { - TLocalisamfile schede(LF_SCPERC); + TLocalisamfile& schede = *_scperc; schede.zero(); schede.put(SPR_CODDITTA, cod); schede.put(SPR_TIPOA, t); @@ -172,7 +169,7 @@ TRectype& TSt_vers::look_schperc (long cod, char t, long codan, int np) return schede.curr(); } -TRectype& TSt_vers::look_causali(int cod) +const TRectype& TSt_vers::look_causali(int cod) { TString16 dep; @@ -221,12 +218,12 @@ void TSt_vers::crea_sort() mese = datapag.month(); anno = datapag.year(); - TRectype dep = look_schperc(_codditta, tipoa, codan, nprog); + const TRectype dep = look_schperc(_codditta, tipoa, codan, nprog); codc = dep.get_int(SPR_CODCAUS); datadoc = dep.get_date(SPR_DATADOC); numdoc = dep.get(SPR_NUMDOC); - TRectype cau = look_causali(codc); + const TRectype& cau = look_causali(codc); TString descr = cau.get("S0"); int codtrib = cau.get_int("I0"); diff --git a/m770/777200.cpp b/m770/777200.cpp index c529b0b36..1f5f54fd0 100755 --- a/m770/777200.cpp +++ b/m770/777200.cpp @@ -120,7 +120,9 @@ class TTrasferimentoDylog : public TObject TFilename _name; ifstream* _in_stream; ofstream* _out_stream; - + + TString16 _defname; + public: bool open(const char* path = "", char mode = 'r'); bool close(); @@ -130,7 +132,7 @@ public: virtual bool ok() const; - const char* default_name() const { return "TRA701"; } + const TString& default_name(); TTrasferimentoDylog& operator<<(const TRecordDylog& rec) { write(rec); return *this; } @@ -530,6 +532,16 @@ TRecordDylog::~TRecordDylog() // TTrasferimentoDylog /////////////////////////////////////////////////////////// +const TString& TTrasferimentoDylog::default_name() +{ + if (_defname.empty()) + { + const TDate today(TODAY); + _defname.format("TRA7%02d", today.year() % 100); + } + return _defname; +} + bool TTrasferimentoDylog::open(const char* path, char mode) { CHECK(mode == 'r' || mode == 'w', "Invalid open mode"); diff --git a/ve/batbprs.h b/ve/batbprs.h index dc2d889b1..364dbfa99 100755 --- a/ve/batbprs.h +++ b/ve/batbprs.h @@ -19,7 +19,11 @@ #define F_DESCRCONTOA 119 #define F_CAMPI 120 #define F_QTA 121 -#define F_GRUPPOPCI 122 -#define F_CONTOPCI 123 -#define F_SOTTOPCI 124 -#define F_DESCRCONTOPCI 125 +#define F_GRUPPOPCIA 122 +#define F_CONTOPCIA 123 +#define F_SOTTOPCIA 124 +#define F_DESCRCONTOPCIA 125 +#define F_GRUPPOPCIV 126 +#define F_CONTOPCIV 127 +#define F_SOTTOPCIV 128 +#define F_DESCRCONTOPCIV 129 diff --git a/ve/batbprs.uml b/ve/batbprs.uml index a238a72d8..48fecf4aa 100755 --- a/ve/batbprs.uml +++ b/ve/batbprs.uml @@ -96,7 +96,7 @@ END LISTBOX F_CAMPI 15 BEGIN - PROMPT 2 10 "Campo default " + PROMPT 2 9 "Campo default " FIELD S6 ITEM "Q|Qta prezzo " MESSAGE SHOW,1@|ENABLE,2@|HIDE,3@|RESET,3@ @@ -108,7 +108,7 @@ END CURRENCY F_PREZZO 15 BEGIN - PROMPT 2 12 "Prezzo " + PROMPT 2 10 "Prezzo " FIELD R0 FLAGS "U" GROUP 1 @@ -116,14 +116,14 @@ END NUMBER F_QTA 13 5 BEGIN - PROMPT 35 12 "Quantita' " + PROMPT 35 10 "Quantita' " FIELD R1 GROUP 1 2 END STRING F_UM 2 BEGIN - PROMPT 63 12 "U.M. " + PROMPT 63 10 "U.M. " FIELD S7 FLAGS "U" USE %UMS @@ -137,14 +137,14 @@ END NUMBER F_PERCENTUALE 5 2 BEGIN - PROMPT 2 11 "Percentuale " + PROMPT 49 9 "Percentuale " FIELD R2 GROUP 3 END STRING F_NCAMPOCAL 10 BEGIN - PROMPT 2 12 "Formula Doc. " + PROMPT 2 10 "Formula Doc. " FIELD S5 FLAG "U" USE %FRD @@ -159,7 +159,7 @@ END STRING F_NCAMPOCAL1 50 BEGIN - PROMPT 17 13 "" + PROMPT 17 10 "" USE %FRD KEY 2 INPUT S0 F_NCAMPOCAL1 DISPLAY "Descrizione@50" S0 @@ -172,14 +172,14 @@ END NUMBER F_GRUPPOV 3 BEGIN - PROMPT 2 14 "Conto vendita " + PROMPT 2 11 "Conto vendita " FIELD I0 CHECKTYPE NORMAL END NUMBER F_CONTOV 3 BEGIN - PROMPT 22 14 "" + PROMPT 22 11 "" FIELD I1 USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO=="") INPUT GRUPPO F_GRUPPOV @@ -196,7 +196,7 @@ BEGIN NUMBER F_SOTTOV 6 BEGIN - PROMPT 30 14 "" + PROMPT 30 11 "" FIELD I2 USE LF_PCON SELECT SOTTOCONTO!="" JOIN LF_PCON ALIAS 500 INTO GRUPPO==GRUPPO CONTO==CONTO @@ -218,7 +218,7 @@ END STRING F_DESCRCONTOV 50 BEGIN - PROMPT 17 15 "" + PROMPT 17 12 "" FLAG "U" USE LF_PCON KEY 2 SELECT (SOTTOCONTO!="") JOIN LF_PCON ALIAS 500 INTO GRUPPO==GRUPPO CONTO==CONTO @@ -235,14 +235,14 @@ END NUMBER F_GRUPPOA 3 BEGIN - PROMPT 2 16 "Conto acquisti " + PROMPT 2 13 "Conto acquisti " FIELD I3 CHECKTYPE NORMAL END NUMBER F_CONTOA 3 BEGIN - PROMPT 22 16 "" + PROMPT 22 13 "" FIELD I4 COPY USE F_CONTOV INPUT GRUPPO F_GRUPPOA @@ -259,7 +259,7 @@ BEGIN NUMBER F_SOTTOA 6 BEGIN - PROMPT 30 16 "" + PROMPT 30 13 "" FIELD I5 COPY USE F_SOTTOV INPUT GRUPPO F_GRUPPOA @@ -277,7 +277,7 @@ END STRING F_DESCRCONTOA 50 BEGIN - PROMPT 17 17 "" + PROMPT 17 14 "" FLAG "U" COPY USE F_DESCRCONTOV INPUT DESCR F_DESCRCONTOA @@ -288,64 +288,119 @@ BEGIN ADD RUN CG0 -0 END -NUMBER F_GRUPPOPCI 3 +NUMBER F_GRUPPOPCIA 3 BEGIN - PROMPT 2 18 "Conto industr. " + PROMPT 2 15 "Conto industr. " FIELD I6 CHECKTYPE NORMAL END -NUMBER F_CONTOPCI 3 +NUMBER F_CONTOPCIA 3 BEGIN - PROMPT 22 18 "" + PROMPT 22 15 "" FIELD I7 USE PCI SELECT (CODTAB[4,6]!="") && (CODTAB[7,12]=="") - INPUT CODTAB[1,3] F_GRUPPOPCI - INPUT CODTAB[4,6] F_CONTOPCI + INPUT CODTAB[1,3] F_GRUPPOPCIA + INPUT CODTAB[4,6] F_CONTOPCIA DISPLAY "Gruppo" CODTAB[1,3] DISPLAY "Conto" CODTAB[4,6] DISPLAY "Descrizione@50" S0 - OUTPUT F_GRUPPOPCI CODTAB[1,3] - OUTPUT F_CONTOPCI CODTAB[4,6] + OUTPUT F_GRUPPOPCIA CODTAB[1,3] + OUTPUT F_CONTOPCIA CODTAB[4,6] CHECKTYPE NORMAL ADD RUN BA3 -0 PCI - WARNING "Codice piano dei conti industriale assente" END -NUMBER F_SOTTOPCI 6 +NUMBER F_SOTTOPCIA 6 BEGIN - PROMPT 30 18 "" + PROMPT 30 15 "" FIELD I8 USE PCI SELECT CODTAB[7,12]!="" - INPUT CODTAB[1,3] F_GRUPPOPCI - INPUT CODTAB[4,6] F_CONTOPCI - INPUT CODTAB[7,12] F_SOTTOPCI + INPUT CODTAB[1,3] F_GRUPPOPCIA + INPUT CODTAB[4,6] F_CONTOPCIA + INPUT CODTAB[7,12] F_SOTTOPCIA DISPLAY "Gruppo" CODTAB[1,3] DISPLAY "Conto" CODTAB[4,6] DISPLAY "Sottoconto" CODTAB[7,12] DISPLAY "Descrizione@50" S0 - OUTPUT F_GRUPPOPCI CODTAB[1,3] - OUTPUT F_CONTOPCI CODTAB[4,6] - OUTPUT F_SOTTOPCI CODTAB[7,12] - OUTPUT F_DESCRCONTOPCI S0 + OUTPUT F_GRUPPOPCIA CODTAB[1,3] + OUTPUT F_CONTOPCIA CODTAB[4,6] + OUTPUT F_SOTTOPCIA CODTAB[7,12] + OUTPUT F_DESCRCONTOPCIA S0 CHECKTYPE NORMAL - WARNING "Sottoconto errato" ADD RUN BA3 -0 PCI END -STRING F_DESCRCONTOPCI 50 +STRING F_DESCRCONTOPCIA 50 BEGIN - PROMPT 17 19 "" + PROMPT 2 16 "acquisti " FLAG "U" USE PCI KEY 2 SELECT (CODTAB[7,12]!="") - INPUT S0 F_DESCRCONTOPCI + INPUT S0 F_DESCRCONTOPCIA DISPLAY "Descrizione@50" S0 DISPLAY "Gruppo" CODTAB[1,3] DISPLAY "Conto" CODTAB[4,6] DISPLAY "Sottoconto" CODTAB[7,12] - COPY OUTPUT F_SOTTOPCI + COPY OUTPUT F_SOTTOPCIA + CHECKTYPE NORMAL + ADD RUN BA0 -3 PCI +END + +NUMBER F_GRUPPOPCIV 3 +BEGIN + PROMPT 2 17 "Conto industr. " + FIELD I9 + CHECKTYPE NORMAL + END + +NUMBER F_CONTOPCIV 3 +BEGIN + PROMPT 22 17 "" + FIELD I10 + USE PCI SELECT (CODTAB[4,6]!="") && (CODTAB[7,12]=="") + INPUT CODTAB[1,3] F_GRUPPOPCIV + INPUT CODTAB[4,6] F_CONTOPCIV + DISPLAY "Gruppo" CODTAB[1,3] + DISPLAY "Conto" CODTAB[4,6] + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRUPPOPCIV CODTAB[1,3] + OUTPUT F_CONTOPCIV CODTAB[4,6] + CHECKTYPE NORMAL + ADD RUN BA3 -0 PCI + END + +NUMBER F_SOTTOPCIV 6 +BEGIN + PROMPT 30 17 "" + FIELD I11 + USE PCI SELECT CODTAB[7,12]!="" + INPUT CODTAB[1,3] F_GRUPPOPCIV + INPUT CODTAB[4,6] F_CONTOPCIV + INPUT CODTAB[7,12] F_SOTTOPCIV + DISPLAY "Gruppo" CODTAB[1,3] + DISPLAY "Conto" CODTAB[4,6] + DISPLAY "Sottoconto" CODTAB[7,12] + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRUPPOPCIV CODTAB[1,3] + OUTPUT F_CONTOPCIV CODTAB[4,6] + OUTPUT F_SOTTOPCIV CODTAB[7,12] + OUTPUT F_DESCRCONTOPCIV S0 + CHECKTYPE NORMAL + ADD RUN BA3 -0 PCI +END + +STRING F_DESCRCONTOPCIV 50 +BEGIN + PROMPT 2 18 "vendita " + FLAG "U" + USE PCI KEY 2 SELECT (CODTAB[7,12]!="") + INPUT S0 F_DESCRCONTOPCIV + DISPLAY "Descrizione@50" S0 + DISPLAY "Gruppo" CODTAB[1,3] + DISPLAY "Conto" CODTAB[4,6] + DISPLAY "Sottoconto" CODTAB[7,12] + COPY OUTPUT F_SOTTOPCIV CHECKTYPE NORMAL - WARNING "Codice piano conti industriale assente" ADD RUN BA0 -3 PCI END diff --git a/ve/batbtip.uml b/ve/batbtip.uml index a84efa7ec..52546e5ee 100755 --- a/ve/batbtip.uml +++ b/ve/batbtip.uml @@ -281,23 +281,16 @@ BEGIN FIELD B6 END -NUMBER F_NATURA 1 +STRING F_NATURA 1 BEGIN PROMPT 44 18 "Natura transazione " - SHEET "Cod.|Descrizione@66" - INPUT F_NATURA - ITEM "|" - ITEM "1|Acquisto o vendita (compreso il baratto)" - ITEM "2|Restituzione o sostituzione di merci" - ITEM "3|Aiuti gernativi, privati o finanziati dalla comunita' europea" - ITEM "4|Operazione in vista di una lavorazione per conto terzi o di una riparazione" - ITEM "5|Operazione successiva ad una lavorazione per conto terzi o di una riparazione" - ITEM "6|Movimento di merci senza trasferimento di proprieta' (per noleggio, leasing operativo, ecc.)" - ITEM "7|Operazione a titolo di un programma comune di difesa o di un altro programma intergovernativo di fabbricazione coordinata" - ITEM "8|Fornitura di materiali e macchinari nel quadro di un contratto generale di costruzione o di genio civile" - ITEM "9|Altre transazioni" - OUTPUT F_NATURA - FIELD I2 + FLAGS "U" + USE %INT + INPUT CODTAB F_NATURA + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_NATURA CODTAB + FIELD S3[4,4] END ENDPAGE diff --git a/ve/f47.dir b/ve/f47.dir index 1dcd3b753..a849fca78 100755 --- a/ve/f47.dir +++ b/ve/f47.dir @@ -1,3 +1,3 @@ 47 0 -$anamag|0|0|757|0|Anagrafica di magazzino|NART|| +$anamag|0|0|775|0|Anagrafica di magazzino|NART|| diff --git a/ve/f47.trr b/ve/f47.trr index ad9901521..d83ccd765 100755 --- a/ve/f47.trr +++ b/ve/f47.trr @@ -55,8 +55,8 @@ CONCAR|4|15|5|Peso Carta (Kg) per CONAI CONPLA|4|15|5|Peso Plastica (Kg) per CONAI CONLEG|4|15|5|Peso Legno (Kg) per CONAI CONVET|4|15|5|Peso Vetro (Kg) per CONAI -COLLTYPE|1|1|0|Tipo di collegamento per movimenti con distinta <> Nessuno, dalla riga ovimento della causale collegata, dal ornitore, dall'rticolo -CODMAG|1|5|0|Codice magazzino alternativo per movimenti con distinta +CONTOINDA|1|12|0|Codice piano dei conti industriale (GrCoSo) Acquisti +CONTOINDV|1|12|0|Codice piano dei conti industriale (GrCoSo) Vendite USER1|1|20|0|Campo libero 1 USER2|1|20|0|Campo libero 2 USER3|1|20|0|Campo libero 3 diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index 2c011f9aa..f3788cb41 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -363,7 +363,6 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query) else { TSheet_field& f = msk.sfield(F_SHEET); - f.destroy(); TTipo_riga_documento tr; @@ -374,7 +373,10 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query) for (int i = 1; ini.set_paragraph(format("%d,%d", LF_RIGHEDOC, i)); i++) { if (i == 1) // Se trovo almeno una riga allora cancello tutto, poi aggiungo le righe + { + f.destroy(); doc().destroy_rows(); + } // Considera solo i tipi riga validi const TString16 tipo = ini.get(RDOC_TIPORIGA); diff --git a/ve/ve0100b.uml b/ve/ve0100b.uml index c6cb0d52f..c7d34034d 100755 --- a/ve/ve0100b.uml +++ b/ve/ve0100b.uml @@ -1,32 +1,50 @@ #include "ve0100b1.h" -PAGE "Elaborazioni " -1 -1 78 17 +TOOLBAR "" 0 -2 0 2 + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "Elaborazioni " -1 -1 78 19 + BOOLEAN F_TYPE BEGIN - PROMPT 2 1 "Aggiungi al documento attuale" - MESSAGE FALSE SHOW,F_GROUP_D|HIDE,F_GROUP_S - MESSAGE TRUE SHOW,F_GROUP_S|HIDE,F_GROUP_D + PROMPT 1 0 "Aggiungere al doc. attuale" + MESSAGE FALSE SHOW,F_GROUP_D|HIDE,F_GROUP_S|CLEAR,F_UPDATE_HEADER + MESSAGE TRUE SHOW,F_GROUP_S|HIDE,F_GROUP_D|ENABLE,F_UPDATE_HEADER + END -LISTBOX F_ELAB 3 50 +LISTBOX F_ELAB 50 30 BEGIN - PROMPT 2 3 "Elaborazione " + PROMPT 31 0 "@bElaborazione " END -GROUPBOX F_GROUP_D 77 11 +GROUPBOX F_GROUP_D 77 9 + BEGIN - PROMPT 1 4 "Destinazione" + PROMPT 1 1 "@bDestinazione" END -GROUPBOX F_GROUP_S 77 11 +GROUPBOX F_GROUP_S 77 9 + BEGIN - PROMPT 1 4 "Sorgente" + PROMPT 1 1 "@bSorgente" END STRING F_TIPODOC_ELAB 4 BEGIN - PROMPT 2 5 "Tipo documento " + PROMPT 2 2 "Tipo documento " HELP "Codice tipo documento" USE %TIP INPUT CODTAB F_TIPODOC_ELAB @@ -41,7 +59,7 @@ END STRING F_DESTIPODOC_ELAB 50 BEGIN - PROMPT 24 5 "" + PROMPT 24 2 "" HELP "Descrizione tipo documento" USE %TIP KEY 2 INPUT S0 F_DESTIPODOC_ELAB @@ -54,7 +72,7 @@ END STRING F_STATODOC_ELAB 1 BEGIN - PROMPT 2 7 "Stato " + PROMPT 2 3 "Stato " USE %STD CHECKTYPE NORMAL INPUT CODTAB F_STATODOC_ELAB @@ -68,7 +86,7 @@ END STRING F_DESSTATODOC_ELAB 50 BEGIN - PROMPT 24 7 "" + PROMPT 24 3 "" HELP "Descrizione stato documento" USE %STD KEY 2 INPUT S0 F_DESSTATODOC_ELAB @@ -81,7 +99,7 @@ END STRING F_CODNUM_ELAB 4 BEGIN - PROMPT 2 9 "Cod. num. " + PROMPT 2 4 "Cod. num. " HELP "Codice numerazione" USE %NUM INPUT CODTAB F_CODNUM_ELAB @@ -97,7 +115,7 @@ END STRING F_DESNUM_ELAB 50 BEGIN - PROMPT 24 9 "" + PROMPT 24 4 "" HELP "Descrizione numerazione" USE %NUM KEY 2 INPUT S0 F_DESNUM_ELAB @@ -109,13 +127,13 @@ END NUMBER F_ANNO_ELAB 4 BEGIN - PROMPT 2 11 "Esercizio " + PROMPT 2 5 "Esercizio " CHECKTYPE REQUIRED END LIST F_TIPOCF_ELAB 1 11 BEGIN - PROMPT 2 15 "" + PROMPT 2 9 "" FLAGS "H" HELP "Indicare se cliente oppure fornitore" ITEM "C|Clienti" @@ -124,10 +142,11 @@ END NUMBER F_CODCF_ELAB 6 BEGIN - PROMPT 10 15 "" + PROMPT 10 9 "" FLAGS "HR" END -STRING F_CODVAL_ELAB 4 + +STRING F_CODVAL_ELAB 3 BEGIN PROMPT 10 25 "" FLAGS "HR" @@ -135,11 +154,14 @@ END NUMBER F_NDOC_ELAB 6 BEGIN - PROMPT 24 11 "Numero doc. " - USE LF_DOC + PROMPT 24 5 "Numero doc. " + USE LF_DOC KEY 2 JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF + INPUT TIPOCF F_TIPOCF_ELAB SELECT + INPUT CODCF F_CODCF_ELAB SELECT INPUT PROVV F_PROVV_ELAB SELECT - INPUT ANNO F_ANNO_ELAB SELECT + INPUT ANNO F_ANNO_ELAB SELECT + INPUT DATADOC F_DATADOC_ELAB INPUT CODNUM F_CODNUM_ELAB INPUT NDOC F_NDOC_ELAB DISPLAY "Num." CODNUM @@ -147,14 +169,15 @@ BEGIN DISPLAY "Provv" PROVV DISPLAY "Tipo" TIPODOC DISPLAY "N.Doc. " NDOC + DISPLAY "Stato" STATO DISPLAY "Data\ndocumento" DATADOC DISPLAY "C/F" TIPOCF DISPLAY "Codice" CODCF DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC - OUTPUT F_NDOC_ELAB NDOC + OUTPUT F_DATADOC_ELAB DATADOC OUTPUT F_CODNUM_ELAB CODNUM + OUTPUT F_NDOC_ELAB NDOC CHECKTYPE NORMAL - FLAG "R" WARNING "Documento inesistente o incompatibile" ADD RUN ve0 -1 MESSAGE EMPTY SHOW,F_DATADOC_ELAB @@ -163,33 +186,33 @@ END LISTBOX F_PROVV_ELAB 14 BEGIN - PROMPT 46 11 "Tipo " + PROMPT 52 5 "Tipo " ITEM "D|Definitiva " ITEM "P|Provvisoria" KEY 1 FLAGS "P" END -STRING F_NUMDOCRIF 7 +STRING F_NUMDOCRIF_ELAB 7 BEGIN - PROMPT 2 12 "Documento di riferimento " + PROMPT 2 6 "Documento di riferimento " FLAGS "B" END DATE F_DATADOC_ELAB BEGIN - PROMPT 2 13 "Data documento " + PROMPT 2 7 "Data documento " FLAGS "A" END BOOLEAN F_UPDATE_HEADER BEGIN - PROMPT 41 13 "Aggiorna testata" + PROMPT 41 7 "Aggiorna testata" END STRING F_CODART 20 BEGIN - PROMPT 2 15 "Articolo " + PROMPT 2 8 "Articolo " USE LF_ANAMAG INPUT CODART F_CODART DISPLAY "Codice@20" CODART @@ -203,7 +226,7 @@ END STRING F_UMQTA 2 BEGIN - PROMPT 41 15 "U.M. " + PROMPT 41 8 "U.M. " USE LF_UMART KEY 2 JOIN %UMS INTO CODTAB=UM INPUT CODART F_CODART SELECT @@ -220,19 +243,15 @@ END NUMBER F_QTA 13 5 BEGIN - PROMPT 51 15 "Qta' " + PROMPT 51 8 "Qta' " GROUP GRP_ART END -BUTTON DLG_OK 9 2 +TREE F_ROWS -3 -1 BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_CANCEL 9 2 -BEGIN - PROMPT -22 -1 "" + PROMPT 0 10 "" END ENDPAGE + ENDMASK diff --git a/ve/ve0100b1.h b/ve/ve0100b1.h index e57928d71..4c83af83e 100755 --- a/ve/ve0100b1.h +++ b/ve/ve0100b1.h @@ -1,24 +1,44 @@ -#define F_TYPE 101 -#define F_ELAB 102 -#define F_TIPODOC_ELAB 103 -#define F_STATODOC_ELAB 104 -#define F_DESTIPODOC_ELAB 105 -#define F_DESSTATODOC_ELAB 106 -#define F_GROUP_D 107 -#define F_GROUP_S 108 -#define F_CODNUM_ELAB 109 -#define F_DESNUM_ELAB 110 -#define F_ANNO_ELAB 111 -#define F_NDOC_ELAB 112 -#define F_PROVV_ELAB 113 -#define F_TIPOCF_ELAB 114 -#define F_CODCF_ELAB 115 -#define F_DATADOC_ELAB 116 -#define F_UPDATE_HEADER 117 -#define F_CODART 118 -#define F_UMQTA 119 -#define F_QTA 120 -#define F_NUMDOCRIF 127 -#define F_CODVAL_ELAB 128 +#define F_TYPE 201 +#define F_ELAB 202 +#define F_TIPODOC_ELAB 203 +#define F_STATODOC_ELAB 204 +#define F_DESTIPODOC_ELAB 205 +#define F_DESSTATODOC_ELAB 206 +#define F_GROUP_D 207 +#define F_GROUP_S 208 +#define F_CODNUM_ELAB 209 +#define F_DESNUM_ELAB 210 +#define F_ANNO_ELAB 211 +#define F_NDOC_ELAB 212 +#define F_PROVV_ELAB 213 +#define F_TIPOCF_ELAB 214 +#define F_CODCF_ELAB 215 +#define F_DATADOC_ELAB 216 +#define F_UPDATE_HEADER 217 +#define F_CODART 218 +#define F_UMQTA 219 +#define F_QTA 220 +#define F_NUMDOCRIF_ELAB 227 +#define F_CODVAL_ELAB 228 +#define F_ROWS 229 -#define GRP_ART 2 \ No newline at end of file +#define GRP_ART 2 + +#define S_RIGACONSEGNATA 101 +#define S_QTARESIDUA 102 +#define S_QTADAEVADERE 103 +#define S_RIGAEVASA 104 +#define S_CODMAG 105 +#define S_CODDEP 106 +#define S_CODART 107 +#define S_LIVGIAC1 108 +#define S_LIVGIAC2 109 +#define S_LIVGIAC3 110 +#define S_LIVGIAC4 111 +#define S_DATACONS 112 +#define S_PREZZO 113 +#define S_DESCR 114 +#define S_TIPORIGA 115 +#define S_NUMRIGA 116 + + \ No newline at end of file diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index b182ca097..a5fd1d38b 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -1462,7 +1462,9 @@ bool TAnagrafica_magazzino::handle_copia(TMask_field &fld, KEY k) m.sfield(F_SHEETGIAC).destroy(); m.sfield(F_SHEETSTOMAG).destroy(); - + + m.load_profile(0, FALSE); + m.set_mode(MODE_INS); xvt_statbar_set("Inserimento", TRUE); } diff --git a/ve/ve2400.h b/ve/ve2400.h index e51b5e9c0..e15e0084c 100755 --- a/ve/ve2400.h +++ b/ve/ve2400.h @@ -26,10 +26,14 @@ #define F_CONTOV 136 #define F_SOTTOCV 137 #define F_DESCRV 138 -#define F_GRUPPOPCI 110 -#define F_CONTOPCI 111 -#define F_SOTTOPCI 112 -#define F_DESCRCONTOPCI 113 +#define F_GRUPPOPCIA 110 +#define F_CONTOPCIA 111 +#define F_SOTTOPCIA 112 +#define F_DESCRCONTOPCIA 113 +#define F_GRUPPOPCIV 114 +#define F_CONTOPCIV 115 +#define F_SOTTOPCIV 116 +#define F_DESCRCONTOPCIV 117 #define F_UMP 139 #define F_PESO 140 #define F_CLASSDOG1 141 diff --git a/ve/ve2400.uml b/ve/ve2400.uml index fea869927..09b3ea8af 100755 --- a/ve/ve2400.uml +++ b/ve/ve2400.uml @@ -479,70 +479,111 @@ BEGIN WARNING "Conto assente" END -NUMBER F_GRUPPOPCI 3 +NUMBER F_GRUPPOPCIA 3 BEGIN - PROMPT 1 12 "Conto industr. " - FIELD I6 + PROMPT 1 12 "C. ind. acquisti " + FIELD LF_ANAMAG->CONTOINDA[1,3] CHECKTYPE NORMAL END -NUMBER F_CONTOPCI 3 +NUMBER F_CONTOPCIA 3 BEGIN PROMPT 22 12 "" - FIELD I7 - //USE PCI SELECT (CODTAB[4,6]!="") && (CODTAB[7,12]=="") - //INPUT CODTAB[1,3] F_GRUPPOPCI - //INPUT CODTAB[4,6] F_CONTOPCI - //DISPLAY "Gruppo" CODTAB[1,3] - //DISPLAY "Conto" CODTAB[4,6] - //DISPLAY "Descrizione@50" S0 - //OUTPUT F_GRUPPOPCI CODTAB[1,3] - //OUTPUT F_CONTOPCI CODTAB[4,6] + FIELD LF_ANAMAG->CONTOINDA[4,6] CHECKTYPE NORMAL - ADD RUN BA3 -0 PCI - WARNING "Codice piano dei conti industriale assente" END -NUMBER F_SOTTOPCI 6 +NUMBER F_SOTTOPCIA 6 BEGIN PROMPT 26 12 "" - FIELD I8 + FIELD LF_ANAMAG->CONTOINDA[7,12] USE PCI SELECT CODTAB[7,12]!="" - INPUT CODTAB[1,3] F_GRUPPOPCI - INPUT CODTAB[4,6] F_CONTOPCI - INPUT CODTAB[7,12] F_SOTTOPCI + INPUT CODTAB[1,3] F_GRUPPOPCIA + INPUT CODTAB[4,6] F_CONTOPCIA + INPUT CODTAB[7,12] F_SOTTOPCIA DISPLAY "Gruppo" CODTAB[1,3] DISPLAY "Conto" CODTAB[4,6] DISPLAY "Sottoconto" CODTAB[7,12] DISPLAY "Descrizione@50" S0 - OUTPUT F_GRUPPOPCI CODTAB[1,3] - OUTPUT F_CONTOPCI CODTAB[4,6] - OUTPUT F_SOTTOPCI CODTAB[7,12] - OUTPUT F_DESCRCONTOPCI S0 + OUTPUT F_GRUPPOPCIA CODTAB[1,3] + OUTPUT F_CONTOPCIA CODTAB[4,6] + OUTPUT F_SOTTOPCIA CODTAB[7,12] + OUTPUT F_DESCRCONTOPCIA S0 CHECKTYPE NORMAL WARNING "Sottoconto errato" ADD RUN BA3 -0 PCI END -STRING F_DESCRCONTOPCI 50 +STRING F_DESCRCONTOPCIA 50 BEGIN PROMPT 36 12 "" FLAG "U" USE PCI KEY 2 SELECT (CODTAB[7,12]!="") - INPUT S0 F_DESCRCONTOPCI + INPUT S0 F_DESCRCONTOPCIA DISPLAY "Descrizione@50" S0 DISPLAY "Gruppo" CODTAB[1,3] DISPLAY "Conto" CODTAB[4,6] DISPLAY "Sottoconto" CODTAB[7,12] - COPY OUTPUT F_SOTTOPCI + COPY OUTPUT F_SOTTOPCIA CHECKTYPE NORMAL WARNING "Codice piano conti industriale assente" ADD RUN BA0 -3 PCI END +NUMBER F_GRUPPOPCIV 3 +BEGIN + PROMPT 1 13 "C. ind. vendite " + FIELD LF_ANAMAG->CONTOINDV[1,3] + CHECKTYPE NORMAL + END + +NUMBER F_CONTOPCIV 3 +BEGIN + PROMPT 22 13 "" + FIELD LF_ANAMAG->CONTOINDV[4,6] + CHECKTYPE NORMAL + END + +NUMBER F_SOTTOPCIV 6 +BEGIN + PROMPT 26 13 "" + FIELD LF_ANAMAG->CONTOINDV[7,12] + USE PCI SELECT CODTAB[7,12]!="" + INPUT CODTAB[1,3] F_GRUPPOPCIV + INPUT CODTAB[4,6] F_CONTOPCIV + INPUT CODTAB[7,12] F_SOTTOPCIV + DISPLAY "Gruppo" CODTAB[1,3] + DISPLAY "Conto" CODTAB[4,6] + DISPLAY "Sottoconto" CODTAB[7,12] + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRUPPOPCIV CODTAB[1,3] + OUTPUT F_CONTOPCIV CODTAB[4,6] + OUTPUT F_SOTTOPCIV CODTAB[7,12] + OUTPUT F_DESCRCONTOPCIV S0 + CHECKTYPE NORMAL + WARNING "Sottoconto errato" + ADD RUN BA3 -0 PCI +END + +STRING F_DESCRCONTOPCIV 50 +BEGIN + PROMPT 36 13 "" + FLAG "U" + USE PCI KEY 2 SELECT (CODTAB[7,12]!="") + INPUT S0 F_DESCRCONTOPCIV + DISPLAY "Descrizione@50" S0 + DISPLAY "Gruppo" CODTAB[1,3] + DISPLAY "Conto" CODTAB[4,6] + DISPLAY "Sottoconto" CODTAB[7,12] + COPY OUTPUT F_SOTTOPCIV + CHECKTYPE NORMAL + WARNING "Codice piano conti industriale assente" + ADD RUN BA0 -3 PCI +END + BOOLEAN F_ARTFIS BEGIN - PROMPT 1 13 "Articolo fiscale" + PROMPT 1 14 "Articolo fiscale" FIELD LF_ANAMAG->ARTFIS MESSAGE TRUE ENABLE,G_RAGGFISC@ MESSAGE FALSE DISABLE,G_RAGGFISC@ @@ -550,7 +591,7 @@ END STRING F_RAGGFIS 5 BEGIN - PROMPT 1 14 "Raggrupp. fiscale " + PROMPT 1 15 "Raggrupp. fiscale " FIELD LF_ANAMAG->RAGGFIS FLAGS "UD" USE RFA @@ -567,13 +608,13 @@ END STRING F_RAGGFIS1 40 BEGIN - PROMPT 31 14 "" + PROMPT 31 15 "" FLAG "D" END STRING H_CLASSEFIS 2 BEGIN - PROMPT 1 15 "" + PROMPT 1 16 "" FLAG "HG" MESSAGE DISABLE,F_CLASSEFIS|COPY,F_CLASSEFIS MESSAGE EMPTY ENABLE,F_CLASSEFIS @@ -581,7 +622,7 @@ END STRING F_CLASSEFIS 2 BEGIN - PROMPT 1 15 "Classe fiscale " + PROMPT 1 16 "Classe fiscale " FIELD LF_ANAMAG->CLASSEFIS FLAGS "UD" USE %ASF @@ -597,7 +638,7 @@ END STRING F_CLASSEFISD 40 BEGIN - PROMPT 31 15 "" + PROMPT 31 16 "" FLAG "D" END diff --git a/ve/ve7100.cpp b/ve/ve7100.cpp index 76b4af888..291878d35 100755 --- a/ve/ve7100.cpp +++ b/ve/ve7100.cpp @@ -273,8 +273,106 @@ error_type TContabil_tsys::write_all(TDocumento& doc, TMovimentoPN_VE & moviment row << work; format_num(ZERO, 2, work); row << work; - } + check_len("Filler", row, 46); + } + if (row.len() != 4248) + { + error_box("Documento %s - lunghezza record %d errata", (const char *)doc.get(DOC_NDOC), row.len()); + return generic_error; + } + else + *_output_file << ((const char *) row); + format_num(real(_conf->get("CodDitta")), 5, row); + row << "11" ; + check_len("Dati intra", row, 7, TRUE); + format_signed(ZERO, 14, work); + row << zeros.sleft(7) << spaces.sleft(3) << work; + check_len("Dati intra", row, 24); + for (i = 0 ; i < 20 ; i++) + { + row << spaces.sleft(8); + format_signed(ZERO, 12, work); + row << work << work << spaces.sleft(1) << work << work << work; + check_len("Dati intra", row, 69); + row << spaces.sleft(2) << zeros.sleft(9) << spaces.sleft(4) ; + check_len("Dati intra", row, 15); + } + + row << zeros.sleft(12) << zeros.sleft(3) << zeros.sleft(22) << zeros.sleft(4) << spaces.sleft(8) << zeros.sleft(24); + check_len("770", row, 73); + row << spaces.sleft(28) << zeros.sleft(10); + check_len("770", row, 38); + int len = row.len(); + TRectype cp = cache().get("%CPG", doc.get("CODPAG")); + TString16 codpag(cp.get("I9")); + + if (codpag.empty()) + codpag = doc.get("CODPAG"); + + codpag = codpag.sleft(3).lpad(3); + row << codpag; + work = doc.get("CODABIA").sleft(5).rpad(5); + work << doc.get("CODCABA").sleft(5).rpad(5); + const TRectype & ban = cache().get("BAN", work); + row << work << ban.get("S0").sleft(30).rpad(30) << zeros.sleft(6); + check_len("Riba", row, 49); + TPagamento & pag = doc.pagamento(); + const int nrate = pag.n_rate(); + format_num(nrate, 2, work); + row << work; + format_signed(head.get_real(MOV_TOTDOC) * molt, 12, work); + row << work; + check_len("Riba", row, 14); + + TDate data_inizio = doc.get_date(DOC_DATAINSC); + if (!data_inizio.ok()) + data_inizio = doc.get_date(DOC_DATADOC); + + pag.set_inizio(data_inizio); + pag.set_total(head.get_real(MOV_TOTDOC), ZERO, ZERO); + + + for (i = 0 ; i < 12 ; i++) + { + if (i < nrate) + { + format_num(i, 2, work); + row << work; + TDate dsc = pag.data_rata(i); + work = dsc.string(brief); + row << work.left(2); + row << work.mid(3, 2); + row << work.mid(6); + const int tipo = pag.tipo_rata(i); + row << rata_types[tipo]; + check_len("Riba", row, 9); + real imprata = pag.importo_rata(i); + format_signed(imprata * molt, 12, work); + if (work[11] == '-') + work[11] == '+'; + row << work; + format_signed(doc.bolli(imprata, AUTO_DECIMALS, _netto) * molt, 12, work); + if (work[11] == '-') + work[11] == '+'; + row << work; + check_len("Riba", row, 24); + static char tipocf = doc.get_char(DOC_TIPOCF); + bool avere = (tipocf == 'C' && imprata >= ZERO) || (tipocf == 'F' && imprata < ZERO); + row << (avere ? "A" : "D") << "0"; + check_len("Riba", row, 2); + } + else + { + row << "000000000"; + format_signed(ZERO, 12, work); + row << work << work << " 0"; + check_len("Riba", row, 35); + } + } + len = row.len(); + row << spaces.left(1943); + if (row.len() != 4248) { error_box("Documento %s - lunghezza record %d errata", (const char *)doc.get(DOC_NDOC), row.len()); @@ -626,4 +724,4 @@ int ve7100 (int argc, char **argv) TContabil_tsys_app a; a.run(argc,argv,"Trasferimento documenti a Team System"); return TRUE; -} +} \ No newline at end of file diff --git a/ve/vearea.men b/ve/vearea.men index b8aec208a..7a9391048 100755 --- a/ve/vearea.men +++ b/ve/vearea.men @@ -68,6 +68,8 @@ Item_09 = "Lingue", "ba3 -0 %LNG", "" Item_10 = "Divise", "ba3 -0 %VAL", "" Item_11 = "Cambi giornalieri", "ba3 -0 CAM", "F" Item_12 = "Esercizi", "cg0 -5 esc", "F" +Item_13 = "Commesse", "ba3 -0 cms", "F" +Item_14 = "Fasi commesse", "ba3 -0 fsc", "F" [ACQVEN_006] Caption = "Tabelle magazzino" diff --git a/ve/velib.h b/ve/velib.h index 0a4d8b44a..d09c32ad2 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -281,7 +281,7 @@ public: const char * field_prezzo() const { return _field_prezzo; } const TString & descrizione() const { return get("S0"); } - const TString & riferimento() const { return get("S1"); } + const TString & riferimento(const TDocumento & doc) const ; const TString & imponibile() const { return _imponibile;} const TString & imposta() const { return _imposta;} const TString & totale_doc() const { return _totale;} @@ -607,7 +607,8 @@ public: TCli_for & clifor() const; TOccasionale & occas() const; const TAgente & agente() const; - + const TString & riferimento() const { return tipo().riferimento(*this); } + virtual TRecord_array& body(int logicnum = 0) const; virtual TDocumento & operator =(const TDocumento & d) {return copy(d);} virtual TRectype & operator =(const TRectype & r); @@ -787,6 +788,7 @@ public: const TString& stdmag() const { return _std_mag; } const TString& stddep() const { return _std_dep; } + TSheet_field& sheet() const { return *_sheet; } TCodgiac_livelli& livelli() const { return *_livelli_giac; } static bool num_handler( TMask_field& f, KEY key ); @@ -1129,9 +1131,9 @@ class TContabilizzazione : public TElaborazione // velib04b *_cco; // tabella categorie contabili TRelation *_clifo; // relazione dei clienti e fornitori + cfven TViswin* _viswin; // Visualizzazione log di elaborazione - TBill _conto_errato; + TBill _conto_errato; // Conto da visualizzare in messaggio d'errore bool _check_prev_cont; // Controllare se il documento precedente e' stato contabilizzato - + protected: // Carica i parametri dalla configurazione bool load_parameters(); diff --git a/ve/velib03.cpp b/ve/velib03.cpp index 2e4f0c284..075c197d0 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -15,7 +15,6 @@ #include "../mg/mglib.h" #include "../mg/movmag.h" #include "../pr/prlib.h" -#include "sconti.h" #include "../sv/svlib01.h" #include "../db/dblib.h" @@ -395,6 +394,7 @@ bool TTipo_documento::scarica_residuo() const return get_bool("B4"); } + ///////////////////////////////////////////////////////////// // TRiepilogo IVA ///////////////////////////////////////////////////////////// @@ -444,6 +444,7 @@ public: HIDDEN TAgenti_cache _agenti; +/* /////////////////////////////////////////////////////////// // Espressione documento /////////////////////////////////////////////////////////// @@ -878,6 +879,7 @@ TFormula_documento::TFormula_documento(const TRectype& rec) _expr = new TExpr_documento(expr_string(), et); } + TFormula_documento::~TFormula_documento() { if (_expr) delete _expr; @@ -919,6 +921,7 @@ int TFormula_documento::read(const char* codice, const char * expr, bool numexpr } return err; } +*/ /////////////////////////////////////////////////////////// // Documento per vendite @@ -1804,6 +1807,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const r.put(RDOC_CODCMS, codcms); if (r.get(RDOC_FASCMS).empty()) r.put(RDOC_FASCMS, fascms); + } if (is_ordine()) ((TDocumento *)this)->put(DOC_DOCEVASO, docevaso); // Tutte le righe evase -> doc evaso @@ -1944,7 +1948,7 @@ TProvvigioni_agente& TDocumento::calc_provvigioni(const bool generata) TDate datadoc(data()); while (_provv_agente->read(agente, anno,codnum,ndoc) == _islocked) // Legge le provvigioni per questo documento - if (!yesno_box("Dati agente %s in uso da un altro utente. Riprovo?", (const char*) agente)) + if (!yesno_box("Dati agente %s in uso da un altro utente. Riprovare?", (const char*) agente)) return *_provv_agente; const TString16 codval(TDocumento::valuta()); @@ -2115,16 +2119,13 @@ TProvvigioni_agente& TDocumento::calc_provvigioni(const bool generata) bool TDocumento::in_valuta() const { const TString& val = valuta(); - - if (val.empty()) - return FALSE; - - return val != TCurrency::get_firm_val(); + return is_true_value(val); } TCodgiac_livelli & TDocumento::livelli() const { - if (_livelli == NULL) _livelli = new TCodgiac_livelli(); + if (_livelli == NULL) + _livelli = new TCodgiac_livelli(); return *_livelli; } @@ -3151,4 +3152,4 @@ const TRiga_documento* TDocumento::get_row_id(long id) const return &row; } return NULL; -} +} \ No newline at end of file diff --git a/ve/velib03a.cpp b/ve/velib03a.cpp new file mode 100755 index 000000000..e2ac6d491 --- /dev/null +++ b/ve/velib03a.cpp @@ -0,0 +1,831 @@ +#include + +#include "velib.h" +#include "vepriv.h" + +/////////////////////////////////////////////////////////// +// Tipo documento +/////////////////////////////////////////////////////////// + +TAssoc_array TTipo_documento::_formule_documento; + +TTipo_documento::TTipo_documento(const char* tipodoc) + : TRectype(LF_TABCOM), _tipocf('\0') +{ + settab("TIP"); + if (tipodoc && *tipodoc) + read(tipodoc); +} + +TTipo_documento::TTipo_documento(const TRectype& rec) + : TRectype(rec), _tipocf('\0') +{ + read_formule(); +} + +TTipo_documento::~TTipo_documento() +{ +} + +int TTipo_documento::read(const char* tipodoc) +{ + *this = cache().get("%TIP", tipodoc); + int err = empty() ? _iskeynotfound : NOERR; + + _formule.cut(0); + + if (err == NOERR) + read_formule(); + else + yesnofatal_box("Tipo documento errato: %s", tipodoc); + return err; +} + +const char TTipo_documento::tipocf() +{ + if (_tipocf == '\0') + { + TFilename pn = profile_name(); + pn.ext("ini"); + TConfig prof(pn); + _tipocf = prof.get_char("TIPOCF", "MAIN"); + } + return _tipocf; +} + +const TString & TTipo_documento::riferimento(const TDocumento & doc) const +{ + static TString __rif; + __rif = get("S1"); + int p = __rif.find('['); + + + while (p >= 0) + { + const int last = __rif.find(']'); + const TString16 field_name(__rif.sub(p + 1, last)); + const TFieldref field(field_name, LF_DOC); + if (last < 0) + __rif.cut(p); + else + { + const int len = __rif.len() - last; + for (int i = 0; i <= len; i++) + __rif[p + i] = __rif[last + i + 1]; + } + + if (field.file() == LF_DOC) + __rif.insert(field.read(doc), p); + else + { + TString16 key(doc.get(DOC_TIPOCF)); + key << "|" << doc.get(DOC_CODCF); + + const TRectype rec = cache().get(field.file(), key); + + __rif.insert(field.read(rec), p); + } + + p = __rif.find('['); + } + return __rif; +} + +const TString_array& TTipo_documento::keys_descrs() +{ + if (_keys_descrs.items() == 0) + { + TString16 var, tiporiga; + TFilename pn(profile_name()); + pn.ext("ini"); + TConfig prof(pn); + const int numtr = prof.get_int( "NTIPIRIGA", "RIGHE" ); + TTipo_riga_documento tr; + _keys_descrs.add(""); + _keys_descrs.add(""); + TToken_string& k = (TToken_string&)_keys_descrs[0]; + TToken_string& d = (TToken_string&)_keys_descrs[1]; + + if (numtr > 0) + { + for ( int i = 1; i <= numtr; i ++ ) + { + var.format("%d", i); + tiporiga = prof.get(var, "RIGHE"); + tr.read(tiporiga); + k.add(tr.codice()); + d.add(tr.descrizione()); + } + } + else + { + TTable tri("%TRI"); + + for (int err = tri.first(); err == NOERR; err = tri.next()) + { + k.add(tri.get("CODTAB")); + d.add(tri.get("S0")); + } + } + } + + return _keys_descrs; +} + +const TString_array& TTipo_documento::sheet_columns() +{ + if (_sheet_columns.items() == 0) + { + TString16 col; + TFilename pn(profile_name()); + pn.ext("ini"); + TConfig prof(pn, "SHEET"); + int ncols = prof.get_int( "NCOLS", "SHEET" ); + for (int i = 1; i <= ncols; i++) + { + col.format( "%d", i ); + _sheet_columns.add(prof.get(col, "SHEET")); + } + } + + return _sheet_columns; +} + +const TString_array& TTipo_documento::handlers() +{ + if (_handlers.items() == 0) + { + TString16 chiave; + TFilename pn = profile_name(); + pn.ext("ini"); + TConfig prof(pn); + + int numhandler = prof.get_int( "NHANDLER", "HANDLERS" ); // prof + + for (int i = 1; i <= numhandler; i ++ ) + { + chiave.format("%d", i); + _handlers.add(prof.get(chiave, "HANDLERS")); + } + } + return _handlers; +} + +void TTipo_documento::set_defaults(TMask& m) +{ + const int items = _defaults.items(); + + if (items == 0) // Carica lo string_array con i defaults + { + TString16 chiave; + TFilename pn(profile_name()); + pn.ext("ini"); + TConfig prof(pn, "DEFAULT"); + const int ndefaults = prof.get_int("NDEFAULTS"); + for(int i = 1; i <= ndefaults; i++) + { + chiave.format("%d", i); + _defaults.add(prof.get(chiave)); + } + } + + for (int i = 0; i < items; i++) // Setta i campi della maschera + { + TToken_string& tt = (TToken_string&)_defaults[i]; + const int ncampo = tt.get_int(0); + m.set(ncampo, tt.get(1), TRUE ); + } +} + +void TTipo_documento::read_formule() +{ + TFilename profile(profile_name()); + profile.ext("ini"); + TConfig prof(profile, "MAIN"); + prof.write_protect(); // Altrimenti non si distrugge!!! + + _formule = prof.get("CAMPICALC", "MAIN"); + const TString & calcoli = prof.get("CALCOLI", "MAIN"); + + if (calcoli == "*") + { + TTable frd("%FRD"); + + for (int err = frd.first(); err == NOERR; err = frd.next()) + { + const TString & formula = frd.get("CODTAB"); + if (_formule.find(formula) < 0) + _formule.add(formula); + } + } + else + _formule.add(calcoli); + _totale = prof.get("TOTALE", "MAIN"); + if (_totale.empty()) + _totale = "TOTDOC"; + const TRectype& for_tot = cache().get("%FRD", _totale); + if (for_tot.empty()) + _formule_documento.add(_totale, new TFormula_documento(_documento, _totale, "IMPONIBILI()+IMPOSTE()"), TRUE); + + if (_formule.find(_totale) < 0) + _formule.add(_totale); + _totale_netto = "_"; + _totale_netto << _totale; + + _basesconto = prof.get("BASESCONTO"); + if (_basesconto.empty()) + _basesconto = "BASESCONTO"; + + const TRectype& for_bas = cache().get("%FRD", _basesconto); + if (for_bas.empty()) + _formule_documento.add(_basesconto, new TFormula_documento(_documento, _basesconto, "SOMMA(\"IMPONIBILE()\", \"(TIPO() != 'S') && (TIPO() != 'C')\")"), TRUE); + + if (_formule.find(_basesconto) < 0) + _formule.add(_basesconto); + + _spese = prof.get("SPESE"); + if (_spese.empty()) + _spese = "SPESE"; + + const TRectype& for_spe = cache().get("%FRD", _spese); + if (for_spe.empty()) + _formule_documento.add(_spese, new TFormula_documento(_documento, _spese, "SOMMA(\"IMPONIBILE()\", \"TIPO() == 'S'\")"), TRUE); + + if (_formule.find(_spese) < 0) + _formule.add(_spese); + + _totvalres = prof.get("TOTVALRES"); + if (_totvalres.empty()) + _totvalres = "TOTVALRES"; + + _totvalore = prof.get("TOTVALORE"); + if (_totvalore.empty()) + _totvalore = "TOTVALORE"; + + const TRectype& for_tvr = cache().get("%FRD", _totvalres); + if (for_tvr.empty()) + _formule_documento.add(_totvalres, new TFormula_documento(_documento, _totvalres, "VALDOC(0)"), TRUE); + + if (_formule.find(_totvalres) < 0) + _formule.add(_totvalres); + + const TRectype& for_tva = cache().get("%FRD", _totvalore); + if (for_tva.empty()) + _formule_documento.add(_totvalore, new TFormula_documento(_documento, _totvalore, "VALDOC(1)"), TRUE); + + if (_formule.find(_totvalore) < 0) + _formule.add(_totvalore); + + if (provvigioni()) + { + TString80 campo(prof.get("TOTPROVV")); + if (campo.empty()) + campo = "TOTPROVV"; + const TRectype& frd = cache().get("%FRD", campo); + + _totprovv = "_"; + _totprovv << campo; + + TString80 expr(frd.get("S1")); + if (expr.empty()) + expr = "SOMMA(\"PROVV()\")"; + _formule_documento.add(_totprovv, new TFormula_documento(_documento, _totprovv, expr, TRUE)); + if (_formule.find(campo) < 0) + _formule.add(campo); + _formule.add(_totprovv); + _formule_documento.add(campo, new TFormula_documento(_documento, campo, "TOTPROVV()"), TRUE); + } + _totale_cont = prof.get("TOTALECONT", "MAIN"); + _cnt_prezzi = prof.get_bool("CONTROLLO_PREZZI", "MAIN"); + _field_prezzo = prof.get("PREZZO", "MAIN"); +} + +bool TTipo_documento::stato_with_mov_mag(const char stato) const +{ + if (!mov_mag()) + return FALSE; + const char stato_finale(stato_mov_finale()); + if (stato_finale > ' ' && stato > stato_finale) + return FALSE; + const char stato_iniziale(stato_mov_iniziale()); + return stato >= stato_iniziale; +} + +TFormula_documento * TTipo_documento::succ_formula(bool restart) +{ + if (restart) + _formule.restart(); + + TString formula = _formule.get(); + while (formula.not_empty()) + { + if (formula.blank()) + formula = _formule.get(); + else + break; + } + + if (formula.not_empty()) + { + char *expr = NULL; + const int p = formula.find('='); + if (p > 0) + { + expr = (char *) (const char *) formula + p; + *expr = '\0'; expr++; + } + TFormula_documento * o = (TFormula_documento*)_formule_documento.objptr(formula); + if (o == NULL) + { + o = new TFormula_documento(_documento, formula, expr); + _formule_documento.add(formula, o); + } + return o; + } + + return NULL; +} + +bool TTipo_documento::scarica_residuo() const +{ + if (is_ordine() && !riporta_ordinato()) + return TRUE; + return get_bool("B4"); +} + +/////////////////////////////////////////////////////////// +// Espressione documento +/////////////////////////////////////////////////////////// + +TExpr_documento::TExpr_documento(const char* expression, TTypeexp type, + TDocumento * doc, TRiga_documento * row) + : TExpression(type), _doc(doc), _row(row) +{ + if (!set(expression, type)) + error_box("Wrong expression : '%s'", expression); +} + +int TExpr_documento::parse_user_func(const char * name, int nparms) const +{ + if (strcmp(name, "SOMMA") == 0) + return nparms > 0 || nparms < 3 ? _somma : -1; + if (strcmp(name, "BOLLI") == 0) + return nparms > 0 || nparms < 4 ? _bolli : -1; + if (strcmp(name, "_BOLLI") == 0) + return nparms > 0 || nparms < 3 ? _bolli_int : -1; + if (strcmp(name, "SPESEINC") == 0) + return nparms > 0 || nparms < 4 ? _spinc : -1; + if (strcmp(name, "PREZZO") == 0) + return nparms < 4 ? _prezzo : -1; + if (strcmp(name, "IMPORTO") == 0) + return nparms < 4 ? _importo : -1; + if (strcmp(name, "SCONTO") == 0) + return nparms < 2 ? _sconto : -1; + if (strcmp(name, "IMPONIBILE") == 0) + return nparms == 0 ? _imponibile : -1; + if (strcmp(name, "IVA") == 0) + return nparms == 0 ? _iva : -1; + if (strcmp(name, "PROVV") == 0) + return nparms < 2 ? _provv : -1; + if (strcmp(name, "QTARES") == 0) + return nparms < 2 ? _qtares : -1; + if (strcmp(name, "VALDOC") == 0) + return nparms < 3 ? _valdoc : -1; + if (strcmp(name, "TIPO") == 0) + return nparms == 0 ? _tipo : -1; + if (strcmp(name, "IMPONIBILI") == 0) + return nparms < 3 ? _imponibili : -1; + if (strcmp(name, "IMPOSTE") == 0) + return nparms < 3 ? _imposte : -1; + if (strcmp(name, "TOTPROVV") == 0) + return nparms < 3 ? _totprovv : -1; + if (strcmp(name, "PSCONTOT") == 0) + return nparms < 1 ? _pscontot : -1; + if (strcmp(name, "RITENUTA") == 0) + return nparms < 3 ? _ritenuta : -1; + if (strcmp(name, "TIPORIT") == 0) + return nparms < 1 ? _tipo_ritenuta : -1; + return -1; +} + +void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & stack, TTypeexp type) const +{ + switch (index) + { + case _somma: + { + const TString cond(nparms == 2 ? stack.pop_string() : "STR(1)"); + const TString & field = stack.pop_string(); + real somma; + + if (_doc != NULL) + { + TExpr_documento cond_expr(cond, _strexpr, _doc); + const int cond_nvars = cond_expr.numvar(); + TExpr_documento expr(field, _numexpr, _doc); + const int nvars = expr.numvar(); + const int nrows = _doc->rows(); + + for (int i = nrows; i > 0; i--) + { + TRiga_documento & riga = (TRiga_documento &) (*_doc)[i]; + + for (int j = cond_nvars - 1; j >= 0; j--) + { + const char* s = cond_expr.varname(j); + TFieldref f(s,0); + cond_expr.setvar(j, f.read(riga)); + } + cond_expr.set_row(&riga); + if ((bool)cond_expr) + { + for (j = nvars - 1; j >= 0; j--) + { + const char* s = expr.varname(j); + TFieldref f(s,0); + expr.setvar(j, f.read(riga)); + } + expr.set_row(&riga); + somma += expr.as_real(); + } + } + } + stack.push(somma); + } + break; + case _spinc: + { + int ndec = AUTO_DECIMALS; + bool netto = FALSE; + + if (nparms > 2) + ndec = (int) stack.pop_real().integer(); + if (nparms > 1) + netto = !stack.pop_real().is_zero(); + + real & r = stack.peek_real(); + + if (_doc) + r = _doc->spese_incasso(r, ndec, netto ? _netto : _lordo); + else + r = ZERO; + } + break; + case _bolli: + { + int ndec = AUTO_DECIMALS; + bool netto = FALSE; + + if (nparms > 2) + ndec = (int) stack.pop_real().integer(); + if (nparms > 1) + netto = !stack.pop_real().is_zero(); + + real & r = stack.peek_real(); + + if (_doc) + { + r += _doc->spese_incasso(r, ndec); + r = _doc->bolli(r, ndec, netto ? _netto : _lordo); + } + else + r = ZERO; + } + break; + case _bolli_int: + { + int ndec = AUTO_DECIMALS; + + if (nparms > 2) + ndec = (int) stack.pop_real().integer(); + + real & r = stack.peek_real(); + + if (_doc) + { + real r1 = _doc->spese_incasso(r, ndec); + r += r1; + r1 += _doc->bolli(r, ndec); + r = r1; + } + else + r = ZERO; + } + break; + case _prezzo: + { + int ndec = AUTO_DECIMALS; + bool lordo = FALSE; + bool scontato = FALSE; + + if (nparms > 2) + ndec = (int) stack.pop_real().integer(); + if (nparms > 1) + lordo = !stack.pop_real().is_zero(); + if (nparms > 0) + scontato = !stack.peek_real().is_zero(); + else + stack.push(ZERO); + + real & val = stack.peek_real(); + if (_row) + val = _row->prezzo(scontato, lordo, ndec); + else + val = ZERO; + + } + break; + case _importo: + { + int ndec = AUTO_DECIMALS; + bool lordo = FALSE; + bool scontato = FALSE; + + if (nparms > 2) + ndec = (int) stack.pop_real().integer(); + if (nparms > 1) + lordo = !stack.pop_real().is_zero(); + if (nparms > 0) + scontato = !stack.peek_real().is_zero(); + else + stack.push(ZERO); + + real & val = stack.peek_real(); + if (_row) + val = _row->importo(scontato, lordo, ndec); + else + val = ZERO; + } + break; + case _imponibile: + { + real r; + + if (_row) + r = _row->imponibile(); + stack.push(r); + } + break; + case _sconto: + { + int ndec = AUTO_DECIMALS; + + if (nparms > 0) + ndec = (int) stack.peek_real().integer(); + else + stack.push(ZERO); + + real & val = stack.peek_real(); + if (_row) + { + if (_row->is_sconto()) + val = -_row->importo(FALSE, FALSE, ndec); + else + val = _row->importo(FALSE, FALSE, ndec) - _row->importo(TRUE, FALSE, ndec); + } + else + val = ZERO; + } + break; + case _iva: + { + real r; + + if (_row) + r = _row->imposta(); + stack.push(r); + } + break; + case _provv: + { + int ndec = AUTO_DECIMALS; + + if (nparms > 0) + ndec = (int) stack.peek_real().integer(); + else + stack.push(ZERO); + + real & val = stack.peek_real(); + + if (_row) + val = _row->provvigione(ndec); + else + val = ZERO; + } + break; + case _qtares: + { + int ndec = AUTO_DECIMALS; + + if (nparms > 0) + ndec = (int) stack.peek_real().integer(); + else + stack.push(ZERO); + real & val = stack.peek_real(); + + if (_row) + val = _row->qtaresidua(); + else + val = ZERO; + } + break; + case _valdoc: + { + int ndec = AUTO_DECIMALS; + bool totale = TRUE; // Totale o residuo per documento + + if (nparms > 1) + ndec = (int)stack.pop_real().integer(); + if (nparms > 0) + totale = !stack.peek_real().is_zero(); + else + stack.push(ZERO); + + real & r = stack.peek_real(); + + if (_doc) + r = _doc->valore(totale, ndec); + else + r = ZERO; + } + break; + case _tipo: + { + TString s; + if (_row) + s << _row->tipo().tipo(); + stack.push(s); + } + break; + case _imponibili: + { + int ndec = AUTO_DECIMALS; + bool spese = FALSE; + + if (nparms > 1) + ndec = (int) stack.pop_real().integer(); + if (nparms > 0) + spese = !stack.peek_real().is_zero(); + else + stack.push(ZERO); + real & val = stack.peek_real(); + val = _doc->imponibile(spese, ndec); + } + break; + case _imposte: + { + int ndec = AUTO_DECIMALS; + bool spese = FALSE; + + if (nparms > 1) + ndec = (int) stack.pop_real().integer(); + if (nparms > 0) + spese = !stack.peek_real().is_zero(); + else + stack.push(ZERO); + real & val = stack.peek_real(); + val = _doc->imposta(spese, ndec); + } + break; + case _totprovv: + { + int ndec = AUTO_DECIMALS; + + if (nparms > 0) + ndec = (int) stack.peek_real().integer(); + else + stack.push(ZERO); + real & val = stack.peek_real(); + + val = _doc->provvigione(ndec); + } + break; + case _pscontot: + { + real val; + TString80 s; + + if (_doc && scontoexpr2perc(_doc->get(DOC_SCONTOPERC), FALSE, s, val) && val != ZERO) + val = 1 - val; + stack.push(val); + } + break; + case _ritenuta: + { + int ndec = AUTO_DECIMALS; + bool lordo = FALSE; + + if (nparms > 1) + ndec = (int) stack.pop_real().integer(); + if (nparms > 0) + lordo = !stack.peek_real().is_zero(); + else + stack.push(ZERO); + real & val = stack.peek_real(); + + const bool spesa = _row->tipo().tipo() == 'S'; + + if (spesa) + { + const bool tipo_rit = _row->spesa().tipo_ritenuta(); + + if (tipo_rit != '\0') + { + ((TSpesa_prest &)_row->spesa()).zero("S9"); + _row->dirty_fields(); + val = _row->importo(TRUE, lordo, ndec); + _row->dirty_fields(); + ((TSpesa_prest &)_row->spesa()).put("S9", (char)tipo_rit); + } + else + val = ZERO; + } + else + val = ZERO; + } + break; + case _tipo_ritenuta: + { + TString s; + if (_row && _row->tipo().tipo() == 'S') + s << _row->spesa().tipo_ritenuta(); + stack.push(s); + } + break; + default: + TExpression::evaluate_user_func(index, nparms, stack, type); + break; + } +} + +TObject* TExpr_documento::dup() const +{ + TExpr_documento* o = new TExpr_documento(*this); + return o; +} + +/////////////////////////////////////////////////////////// +// Formula documento +/////////////////////////////////////////////////////////// + +TFormula_documento::TFormula_documento(TTipo_formula tipo, const char* codice, const char * expr, bool numexpr) + : TRectype(LF_TABCOM), _expr(NULL) +{ + _tab = tipo == _documento ? "FRD" : "FRR"; + settab(_tab); + _tab.insert("%"); + if (codice && *codice) + read(codice, expr, numexpr); +} + +TFormula_documento::TFormula_documento(const TRectype& rec) + : TRectype(rec), _expr(NULL) +{ + _tab = "%"; + _tab << rec.get("COD"); + const TTypeexp et = expr_type(); + _expr = new TExpr_documento(expr_string(), et); +} + +TFormula_documento::~TFormula_documento() +{ + if (_expr) delete _expr; +} + +int TFormula_documento::read(const char* codice, const char * expr, bool numexpr) +{ + if (_expr != NULL) + { + delete _expr; + _expr = NULL; + } + + put("CODTAB", codice); + + int err = NOERR; + + if (expr && *expr) + { + put("S1", expr); + put("B0", numexpr ? "X" : ""); + } + else + { + TTable t(_tab); + err = TRectype::read(t); + } + + if (err == NOERR) + { + const TTypeexp et = expr_type(); + const TString e = expr_string(); // Copio espressione proveniente da record + _expr = new TExpr_documento(e, et); + } + else + { + zero(); + put("CODTAB", codice); + } + return err; +} + diff --git a/ve/velib04.cpp b/ve/velib04.cpp index f6c254cab..f0ac0fa49 100755 --- a/ve/velib04.cpp +++ b/ve/velib04.cpp @@ -1,15 +1,9 @@ -#include "velib.h" -#include - -#ifndef __EXECP_H #include -#endif - -#ifndef __TABUTIL_H #include -#endif +#include "velib.h" +#include /////////////////////////////////////////////////////////// // Lista di documenti @@ -568,4 +562,4 @@ TLista_elaborazioni::~TLista_elaborazioni() { if (_elab) delete _elab; -} +} \ No newline at end of file diff --git a/ve/velib04a.cpp b/ve/velib04a.cpp index ed10d2388..5f4c7a8a9 100755 --- a/ve/velib04a.cpp +++ b/ve/velib04a.cpp @@ -71,7 +71,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out) // Costruisce la stringa di riferimento TString riferimento(80); - riferimento = doc_in.tipo().riferimento(); + riferimento = doc_in.riferimento(); if (riferimento.empty()) riferimento = doc_in.tipo().descrizione(); if (usa_doc_rif() && doc_in.get(DOC_NUMDOCRIF).not_empty()) @@ -277,4 +277,4 @@ bool TFatturazione_bolle::elabora(TLista_documenti& doc_in, TLista_documenti& do return ok; } - \ No newline at end of file + diff --git a/ve/velib04b.cpp b/ve/velib04b.cpp index 6d5142493..02fac200e 100755 --- a/ve/velib04b.cpp +++ b/ve/velib04b.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -363,8 +364,7 @@ bool TMovimentoPN_VE::movement_ok() tot_imp.valore() = 0.0; if (_caus != NULL && _caus->intra()) { - real totdoc = curr().get(MOV_TOTDOC); - + const TString& totdoc = curr().get(MOV_TOTDOC); curr().put(MOV_CORRLIRE, totdoc); } } @@ -587,6 +587,17 @@ error_type TIVA_array::add(const TRiga_documento & r, const TBill& conto, const { detr = t.detraibilita(); pind = t.perc_indetraibilita(); + + if (codcms.not_empty()) + { + const TRectype & rec = cache().get("CMS", codcms); + + if (rec.get("S7") == "NR") + { + detr = 9; + pind = 100.0; + } + } } real impres = (impon * pind) / 100.0; @@ -678,6 +689,7 @@ error_type TIVA_array::add(const TRiga_documento & r, const TBill& conto, const return no_error; } + TContabilizzazione::TContabilizzazione(const char* cod) : TElaborazione(cod), _auto_data(FALSE), _nump_iva(2) { @@ -710,6 +722,7 @@ TContabilizzazione::TContabilizzazione(const char* cod) _clifo->add(LF_CFVEN,"TIPOCF=TIPOCF|CODCF=CODCF"); _righe_iva = new TIVA_array; + _can_write = TRUE; _error = no_error; @@ -967,7 +980,7 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc) // per reperire il tipo documento ed il tipo movimento // reperisce la descrizione dal tipo documento e la completa con la data documento ed il // numero documento - TString80 descr(tipo.riferimento()); + TString80 descr(doc.riferimento()); if (descr.empty()) descr = tipo.descrizione(); const TString16 rif = doc.get(DOC_NUMDOCRIF); @@ -2671,14 +2684,14 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) const real cambioi = rm.get_real(MOV_CAMBIOI); const TRectype& por_rec = cchh.get("%POR", doc.get(DOC_CODPORTO)); const TString16 consegna(por_rec.get("S3")); // condizioni di consegna - const int trasporto = por_rec.get_int("I0"); // tipo di trasporto... - const int natura = doc.tipo().get_int("I2"); // natura della transazione, valida per tutte le righe del documento - const long numreg = rm.get_long(MOV_NUMREG); - TString16 nomenclatura, paeseorig, provincia, paese, codmag, commag; - real totale_righe; + const int trasporto = por_rec.get_int("I0"); // tipo di trasporto... + const char natura = doc.tipo().get("S3")[3]; // natura della transazione, valida per tutte le righe del documento + const long numreg = rm.get_long(MOV_NUMREG); + TString16 nomenclatura, ums, paeseorig, provincia, paese, codmag, commag; + real totale_righe, massanun, unsuppun; const real cambio = doc.cambio(); const bool is_val = doc.in_valuta(); - const bool is_cessione = rm.get(MOV_TIPO)=="C"; + const bool is_cessione = rm.get_char(MOV_TIPO)=='C'; paese = _clifo->lfile().get(CLI_STATOPAIV); // Paese del cliente/fornitore... @@ -2692,17 +2705,28 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) const TRiga_documento& rr = doc[i]; if (rr.is_articolo()) { - key = ""; codmag = rr.get(RDOC_CODMAG); const TRectype& rec_anamag = cchh.get(LF_ANAMAG, rr.get(RDOC_CODARTMAG)); commag = cchh.get("MAG", codmag, "S5"); // Comune del magazzino nomenclatura = rec_anamag.get(ANAMAG_CLASSDOG); + ums = cchh.get("%NOC", nomenclatura, "S5"); + massanun = rec_anamag.get_real(ANAMAG_MASSANUN); // Massa KG + unsuppun = rec_anamag.get_real(ANAMAG_UNSUPPUN); // Massa UMS paeseorig = !is_cessione ? rec_anamag.get(ANAMAG_PAESE) : EMPTY_STRING; // Campo solo per Acquisti - provincia = is_cessione ? rec_anamag.get(ANAMAG_PROV) : cchh.get(LF_COMUNI, commag, "PROVCOM"); + provincia = is_cessione ? rec_anamag.get(ANAMAG_PROV) : cchh.get(LF_COMUNI, commag, COM_PROVCOM); + + if (nomenclatura.blank() || unsuppun.is_zero() || massanun.is_zero()) + { + TString msg; + msg << "--- L'articolo " << rec_anamag.get(ANAMAG_CODART) << " non riporta tutti i dati necessari per il movimento intracomunitario:"; + _viswin->add_line(msg); + _viswin->add_line(" Verificare i seguenti valori: nomenclatura combinata, unitā di misura supplementare, massa netta unitaria."); + } + + key.cut(0); key.add(nomenclatura); key.add(paeseorig); key.add(provincia); - TRectype* rc = (TRectype*) righe.objptr(key); if (rc == NULL) { @@ -2712,7 +2736,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) rc->put("NATURA", natura); rc->put("CONSEGNA", consegna); rc->put("TRASPORTO", trasporto); - rc->put("UMS", cchh.get("%NOC", nomenclatura, "S5")); + rc->put("UMS", ums); rc->put("NOMENCL", nomenclatura); rc->put("PAESE", paese); rc->put("PAESEORIG", paeseorig); @@ -2723,16 +2747,16 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) TCurrency_documento imp_val(rr.exist("VALINTRA") ? rr.get_real("VALINTRA") :rr.importo(TRUE, FALSE), doc); TCurrency_documento imp(imp_val); imp.change_to_firm_val(); imp_val.change_value(codvali, cambioi); - real ammlire = rc->get_real("AMMLIRE"); - real ammvaluta = rc->get_real("AMMVALUTA"); - real massakg = rc->get_real("MASSAKG"); - real massaums = rc->get_real("MASSAUMS"); - real valstat = rc->get_real("VALSTAT"); - + real ammlire = rc->get("AMMLIRE"); + real ammvaluta = rc->get("AMMVALUTA"); + real massakg = rc->get("MASSAKG"); + real massaums = rc->get("MASSAUMS"); + real valstat = rc->get("VALSTAT"); + ammlire += imp.get_num(); ammvaluta += is_val ? imp_val.get_num() : ZERO; - massakg += qta * rec_anamag.get_real(ANAMAG_MASSANUN); - massaums += qta * rec_anamag.get_real(ANAMAG_UNSUPPUN); + massakg += qta * massanun; + massaums += qta * unsuppun; if (rr.exist("VALSTAT")) { @@ -2752,30 +2776,38 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) totale_righe += is_val ? imp_val.get_num() : imp.get_num(); } } - - // Copia il contenuto dell'assoc nel record array - TRectype* rc = new TRectype(LF_RINTRA); - rc->put("NUMREG", numreg); - rintra.set_key(rc); - for(rc = (TRectype*) righe.first_item(); rc != NULL; rc = (TRectype*) righe.succ_item()) - rintra.add_row(rc); - // Testa (de coccio...) - intra.zero(); - intra.put("NUMREG", numreg); - intra.put("DATAREG", rm.get_date(MOV_DATAREG)); - intra.put("TIPOMOV", is_cessione ? 'C' : 'A'); // 'C' cessione 'A' acquisto - intra.put("TIPOCF", rm.get(MOV_TIPO)); - intra.put("CODCF", rm.get_long(MOV_CODCF)); - intra.put("TOTDOC", rm.get_real(MOV_TOTDOC)); - intra.put("TOTDOCIMM", totale_righe); - intra.put("CODVAL", codvali); - intra.put("CAMBIO", cambioi); - if (intra.write() == _isdupkey) // Sebbene non debba succedere, si effettua una riscrittura - intra.rewrite(); - - // righe! - if (intra.status() != NOERR || rintra.write(TRUE) != NOERR) // Forza la riscrittura se necessario - _error = intra_mov_error; + + if (_error == no_error) + { + // Copia il contenuto dell'assoc nel record array + TRectype* rc = new TRectype(LF_RINTRA); + rc->put("NUMREG", numreg); + rintra.set_key(rc); + for(rc = (TRectype*) righe.first_item(); rc != NULL; rc = (TRectype*) righe.succ_item()) + rintra.add_row(rc); + // Testa (de coccio...) + intra.zero(); + intra.put("NUMREG", numreg); + intra.put("DATAREG", rm.get_date(MOV_DATAREG)); + intra.put("TIPOMOV", is_cessione ? 'C' : 'A'); // 'C' cessione 'A' acquisto + intra.put("TIPOCF", rm.get(MOV_TIPO)); + intra.put("CODCF", rm.get_long(MOV_CODCF)); + intra.put("TOTDOC", rm.get_real(MOV_TOTDOC)); + intra.put("TOTDOCIMM", totale_righe); + intra.put("CODVAL", codvali); + intra.put("CAMBIO", cambioi); + if (intra.write() == _isdupkey) // Sebbene non debba succedere, si effettua una riscrittura + intra.rewrite(); + + if (intra.status() == NOERR) + { + // righe! + if (rintra.write(TRUE) != NOERR) // Forza la riscrittura se necessario + _error = intra_mov_error; + } + else + _error = intra_mov_error; + } return _error; } @@ -3114,6 +3146,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& /* if (good() && _can_write) write_all(doc, *_movimento); // Se la scrittura e' andata ok... + if (!good()) { display_error(doc); diff --git a/ve/velib06.cpp b/ve/velib06.cpp index 229701633..e07af9518 100755 --- a/ve/velib06.cpp +++ b/ve/velib06.cpp @@ -1,10 +1,11 @@ #include +#include #include #include #include #include #include -#include +#include #include #include "velib.h" @@ -20,6 +21,9 @@ #include "sconti.h" +#include "doc.h" +#include "rdoc.h" + TDocumento_mask::TDocumento_mask(const char* td) : TVariable_mask(), _progs_page(-1), _last_prog(-1), _condv(NULL) @@ -121,7 +125,6 @@ TDocumento_mask::TDocumento_mask(const char* td) const bool gesval = cfg.get_bool("GESVAL"); const bool gescambi = cfg.get_bool("GESVALAC"); - if (gesval) { const bool enable_controeuro = cfg.get_bool("CONTROEURO"); @@ -600,7 +603,10 @@ void TDocumento_mask::sconto_testa2mask() else cod = " "; if( ditta.get_bool("SCOKEY", "ve", 3)) - cod << format("%-2s", (const char *)ven_rec.get(CFV_CODZONA)); + { + TString8 cz; cz.format("%-2s", (const char*)ven_rec.get(CFV_CODZONA)); + cod << cz; + } else cod << " "; if( ditta.get_bool("SCOKEY", "ve", 4)) @@ -723,8 +729,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga) for( int i = 1; i <= numhandler; i ++ ) { - TString16 chiave; - chiave.format( "%d", i ); + TString8 chiave; chiave.format("%d", i ); TToken_string riga = pro.get( chiave, "HANDLERS" ); row_set_handler( *m, riga.get_int( 0 ), riga.get_int( 1 ) ); } @@ -816,6 +821,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga) if (close_filter) filter << ')'; browse.set_filter(filter); } + m->set_handler(DLG_USER, link_handler); } } @@ -978,8 +984,10 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key ) else if ( key == K_TAB ) // ingresso nella riga { - set_curr_um(ss.sheet_mask()); + TMask & sm = ss.sheet_mask(); + set_curr_um(sm); m.update_giacenza(); + sm.enable(DLG_USER, doc[r + 1].get(RDOC_DACODNUM).not_empty()); } return TRUE; @@ -1091,42 +1099,369 @@ bool TDocumento_mask::clifo_handler( TMask_field& f, KEY key ) return TRUE; } +/////////////////////////////////////////////////////////// +// TDocument_tree +/////////////////////////////////////////////////////////// + +class TDocument_tree : public TBidirectional_tree +{ + TRelation* _relation; + TCursor* _cursor; + TToken_string _curnode; + +protected: + virtual void node2id(const TObject* node, TString& id) const; + bool on_head() const; + bool on_row() const; + +public: + virtual bool goto_root(); + virtual bool goto_firstson(); + virtual bool goto_rbrother(); + virtual bool goto_node(const TString &id); + virtual bool has_son() const; + virtual bool has_rbrother() const; + virtual bool has_father() const; + virtual bool has_lbrother() const; + virtual bool goto_father(); + virtual bool goto_lbrother(); + virtual TObject* curr_node() const { return &(TToken_string&)_curnode; } + virtual bool get_description(TString& str) const; + + const TRectype& testata() const; + const TRectype& riga() const; + const TRectype& record() const; + + void set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff = NULL); + TCursor* get_cursor() { return _cursor; } + + TDocument_tree(); + ~TDocument_tree(); +}; + +const TRectype& TDocument_tree::testata() const +{ + TDocument_tree& me = (TDocument_tree&)*this; + const TRecnotype pos = me._curnode.get_long(0); + if (_cursor->pos() != pos) + *me._cursor = pos; + return _relation->curr(); +} + +const TRectype& TDocument_tree::riga() const +{ + TDocument_tree& me = (TDocument_tree&)*this; + const TRectype& rec = _relation->curr(LF_RIGHEDOC); + const TRecnotype pos = me._curnode.get_long(0); + const int nriga = me._curnode.get_int(1); + if (_cursor->pos() != pos || rec.get_int(RDOC_NRIGA) > nriga) + *me._cursor = pos; + for (int i = rec.get_int(RDOC_NRIGA); i < nriga; i++) + _relation->next_match(LF_RIGHEDOC); + return rec; +} + +const TRectype& TDocument_tree::record() const +{ + return on_row() ? riga() : testata(); +} + +void TDocument_tree::node2id(const TObject* node, TString& id) const +{ + id = *(TString*)node; +} + +bool TDocument_tree::on_head() const +{ + TDocument_tree& me = (TDocument_tree&)*this; + return me._curnode.get_int(1) == 0; +} + +bool TDocument_tree::on_row() const +{ + TDocument_tree& me = (TDocument_tree&)*this; + return me._curnode.get_int(1) > 0; +} + +bool TDocument_tree::goto_root() +{ + bool ok = _cursor != NULL && _cursor->items()>0; + _curnode = ok ? "0" : ""; + return ok; +} + +bool TDocument_tree::goto_firstson() +{ + bool ok = has_son(); + if (ok) + _curnode.add(1,1); + return ok; +} + +bool TDocument_tree::goto_rbrother() +{ + bool ok = has_rbrother(); + if (ok) + { + if (on_head()) + { + const long pos = _curnode.get_long(0); + _curnode.add(pos+1, 0); + } + else + { + const int nriga = _curnode.get_int(1); + _curnode.add(nriga+1, 1); + } + } + return ok; +} + +bool TDocument_tree::goto_node(const TString &id) +{ + _curnode = id; + return TRUE; +} + +bool TDocument_tree::has_son() const +{ + bool ok = on_head(); + if (ok) + { + testata(); + const TRectype& rec = _relation->curr(LF_RIGHEDOC); + ok = rec.get_int(RDOC_NRIGA) > 0; + } + return ok; +} + +bool TDocument_tree::has_rbrother() const +{ + bool ok = FALSE; + if (on_head()) + { + TDocument_tree& me = (TDocument_tree&)*this; + const long pos = me._curnode.get_long(0); + ok = pos < _cursor->items()-1; + } + else + { + riga(); // Posizionati sulla riga corrente + ok = _relation->next_match(LF_RIGHEDOC); + } + return ok; +} + +bool TDocument_tree::has_father() const +{ + return on_row(); +} + +bool TDocument_tree::has_lbrother() const +{ + bool ok = FALSE; + TDocument_tree& me = (TDocument_tree&)*this; + if (on_head()) + { + const long pos = me._curnode.get_long(0); + ok = pos > 0L; + } + else + { + const int nriga = me._curnode.get_int(1); + ok = nriga > 1; + } + return ok; +} + +bool TDocument_tree::goto_father() +{ + bool ok = on_row(); + if (ok) + _curnode.add(0, 1); + return ok; +} + +bool TDocument_tree::goto_lbrother() +{ + bool ok = has_lbrother(); + if (ok) + { + if (on_head()) + { + const long pos = _curnode.get_long(0); + _curnode.add(pos-1, 0); + } + else + { + const int nriga = _curnode.get_int(1); + _curnode.add(nriga-1, 1); + } + } + return ok; +} + +bool TDocument_tree::get_description(TString& str) const +{ + TDocument_tree& me = (TDocument_tree&)*this; + if (on_head()) + { + const TRectype& rec = testata(); + TString16 tmp; + str = rec.get(DOC_ANNO); + str << ' ' << rec.get(DOC_CODNUM); + tmp.format("%6ld", rec.get_long(DOC_NDOC)); + str << ' ' << tmp << ' ' << rec.get(DOC_DATADOC); + const char tipocf = rec.get_char(DOC_TIPOCF); + const long codcf = rec.get_long(DOC_CODCF); + tmp.format(" %c%6ld ", tipocf, codcf); + str << tmp; + tmp.format("%c|%6ld", tipocf, codcf); + str << cache().get(LF_CLIFO, tmp, CLI_RAGSOC); + } + else + { + const TRectype& rec = riga(); + str.format("%4d: ", rec.get_int(RDOC_NRIGA)); + const TString80 codart = rec.get(RDOC_CODART); + if (codart.not_empty()) + { + str << rec.get_real(RDOC_QTA).string("#.###.##@,@@@@@"); + str << ' ' << codart << ' '; + } + str << rec.get(RDOC_DESCR); + } + return TRUE; +} + +void TDocument_tree::set_cursor(char tipocf, long codcf, int anno, const char* filter, FILTERFUNCTION ff) +{ + if (_relation == NULL) + { + _relation = new TRelation(LF_DOC); + _relation->add(LF_RIGHEDOC, "PROVV==PROVV|ANNO==ANNO|CODNUM==CODNUM|NDOC==NDOC"); + } + if (_cursor == NULL) + { + _cursor = new TCursor(_relation, "", 2); + } + TRectype& rec = _relation->curr(); + rec.zero(); + rec.put(DOC_TIPOCF, tipocf); + rec.put(DOC_CODCF, codcf); + rec.put(DOC_PROVV, "D"); + rec.put(DOC_ANNO, anno); + _cursor->freeze(FALSE); + _cursor->setfilter(filter); + _cursor->setregion(rec, rec); + const long items = _cursor->items(); + _cursor->freeze(TRUE); + + goto_root(); + if (items <= 3) + expand_all(); +} + +TDocument_tree::TDocument_tree() + : _relation(NULL), _cursor(NULL) +{ +} + +TDocument_tree::~TDocument_tree() +{ + if (_cursor) + delete _cursor; + if (_relation) + delete _relation; +} + /////////////////////////////////////////////////////////// // TElabora_mask /////////////////////////////////////////////////////////// -class TElabora_mask : public TMask +class TElabora_mask : public TAutomask { TDocumento_mask* _main; TLista_elaborazioni _elab; + TDocument_tree _tree; // @access Protected Member protected: TString _art_filter, _liv_filter; static TElabora_mask* _myself; static bool article_filter(const TRelation* rel); + + void add_valuta_filter(TString& filter) const; + + void docrif_search(); + void update_list(); + void update_ndoc_filter(bool is_tipo_elaborazione = FALSE); + + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); // @access Public Member public: - void update_list(); - void update_ndoc_filter(bool is_tipo_elaborazione = FALSE); bool elabora(); - TElaborazione * curr_elab(); - static bool tipo_elaborazione_handler( TMask_field& f, KEY key ); - static bool tipo_documento_handler( TMask_field& f, KEY key ); - static bool codnum_handler( TMask_field& f, KEY key ); - static bool codart_handler( TMask_field& f, KEY key ); - static bool list_elab_handler( TMask_field& f, KEY key ); - static bool docrif_handler( TMask_field& f, KEY key ); + TElaborazione* curr_elab(); // @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk) - TElabora_mask(TDocumento_mask * main_mask); + TElabora_mask(TDocumento_mask& main_mask); // @cmember Distruttore virtual ~TElabora_mask() {} }; TElabora_mask* TElabora_mask::_myself = NULL; +bool TElabora_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_CODART: + case F_CODNUM_ELAB: + if (e == fe_modify) + update_ndoc_filter(); + break; + case F_TYPE: + if (e == fe_init || e == fe_modify) + { + update_list(); + update_ndoc_filter(TRUE); + } + break; + case F_STATODOC_ELAB: + case F_TIPODOC_ELAB: + if (e == fe_modify) + { + update_list(); + update_ndoc_filter(); + } + break; + case F_ELAB: + if (e == fe_modify) + update_ndoc_filter(TRUE); + break; + case F_NUMDOCRIF_ELAB: + if (e == fe_button) + docrif_search(); + break; + case F_ROWS: + if (e == fe_modify && is_running()) + { + TCursor* c = _tree.get_cursor(); + if (c != NULL && c->items() > 0) + { + const TRectype& head = _tree.testata(); + set(F_DATADOC_ELAB, head.get(DOC_DATADOC)); // Anch'essa nella chiave 2! + set(F_NDOC_ELAB, head.get(DOC_NDOC)); + } + } + break; + default: + break; + } + return TRUE; +} + void TElabora_mask::update_list() { TString_array elabs; @@ -1148,7 +1483,6 @@ void TElabora_mask::update_list() set(F_UPDATE_HEADER, agg_test ? "X" : ""); const bool ok = items > 0; - enable(DLG_OK, ok); enable(F_ELAB, ok); @@ -1156,12 +1490,12 @@ void TElabora_mask::update_list() TToken_string codes; TToken_string descrs; - if (ok) - for (int i = 0; i < items; i++) - { - codes.add(format("%s", (const char *)_elab[elabs.row(i)].codice())); - descrs.add((const char *)_elab[elabs.row(i)].descrizione()); - } + for (int i = 0; i < items; i++) + { + const TElaborazione& e = _elab[elabs.row(i)]; + codes.add(e.codice()); + descrs.add(e.descrizione()); + } if (codes != f.get_codes()) f.replace_items(codes, descrs); const TElaborazione * e = curr_elab(); @@ -1174,16 +1508,13 @@ void TElabora_mask::update_list() } } - -/* TLista_elaborazioni TElabora_mask::_elab; */ - bool TElabora_mask::elabora() { bool update_mask = FALSE; TLista_documenti in; TLista_documenti out; - TDocumento & app_doc = ((TDocumento_mask *)_main)->doc(); + TDocumento& app_doc = ((TDocumento_mask *)_main)->doc(); long numdoc = get_long(F_NDOC_ELAB); bool update_header = get_bool(F_UPDATE_HEADER); @@ -1278,7 +1609,7 @@ bool TElabora_mask::elabora() set(F_CODNUM_ELAB, num_in); set(F_NDOC_ELAB, ""); - set(F_NUMDOCRIF, ""); + set(F_NUMDOCRIF_ELAB, ""); } if (e->tipo() == _consegna_ordini) { @@ -1338,16 +1669,37 @@ bool TElabora_mask::article_filter(const TRelation* rel) return yes; } +void TElabora_mask::add_valuta_filter(TString& filter) const +{ + TString16 valuta = get(F_CODVAL_ELAB); + if (::is_firm_value(valuta)) + { + filter << "((CODVAL==\"" << valuta << "\")"; + if (valuta.empty()) + valuta = TCurrency::get_firm_val(); + else + valuta.cut(0); + filter << "||(CODVAL==\"" << valuta << "\"))"; + } + else + filter << "(CODVAL==\"" << valuta << "\")"; +} + void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) { TString filter(80); - filter.format("(TIPOCF==\"%s\")&&(CODCF==\"%s\")&&(CODVAL==\"%s\")", (const char *)get(F_TIPOCF_ELAB), (const char *)get(F_CODCF_ELAB), (const char *)get(F_CODVAL_ELAB)); + // Ora č nella maschera + // filter.format("(TIPOCF==\"%s\")&&(CODCF==\"%s\")&&", (const char *)get(F_TIPOCF_ELAB), (const char *)get(F_CODCF_ELAB)); + add_valuta_filter(filter); const TString16 tipo(get(F_TIPODOC_ELAB)); TElaborazione * e = curr_elab(); const bool to_elab = get_bool(F_TYPE); if (!field(F_CODNUM_ELAB).empty()) - filter << format("&&(CODNUM==\"%s\")", (const char*)get(F_CODNUM_ELAB)); + { + TString80 cn; cn.format("&&(CODNUM==\"%s\")", (const char*)get(F_CODNUM_ELAB)); + filter << cn; + } enable(-1, to_elab /*&& e != NULL*/); @@ -1357,16 +1709,16 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) { if (to_elab) { - TString8 num_in(e->codice_numerazione_iniziale()); -// TString8 tipo_in1; -// char stato_in1; - + const TString8 num_in = e->codice_numerazione_iniziale(); if (tipo.not_empty()) - { - filter << format("&&(TIPODOC==\"%s\")", (const char *)tipo); - const char* stato = get(F_STATODOC_ELAB); - if (stato != 0) - filter << format("&&(STATO==\"%s\")", stato); + { + TString80 td; td.format("&&(TIPODOC==\"%s\")", (const char *)tipo); + filter << td; + const TString& stato = get(F_STATODOC_ELAB); + if (stato.not_empty()) + { + filter << "&&(STATO==\"" << stato << "\")"; + } else { bool almost_one = FALSE; @@ -1384,17 +1736,16 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) filter << "&&("; almost_one = TRUE; - filter << format("(STATO==\"%c\")", stato_in); + filter << "(STATO==\"" << stato_in << "\")"; } if (i==0) { -// tipo_in1=tipo_in; -// stato_in1=stato_in; set(F_CODNUM_ELAB, num_in); field(F_CODNUM_ELAB).check(); set(F_TIPODOC_ELAB , tipo_in); field(F_TIPODOC_ELAB).check(); - set(F_STATODOC_ELAB, format("%c",stato_in)); + TString8 si; si << stato_in; + set(F_STATODOC_ELAB, si); field(F_STATODOC_ELAB).check(); } } @@ -1417,22 +1768,19 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) else filter << "&&("; almost_one = TRUE; - filter << format("((TIPODOC==\"%s\")", (const char *)tipo_in); + filter << "((TIPODOC==\"" << tipo_in << "\")"; - const char stato_in = e->stato_iniziale(i); - - if (stato_in > '0') - filter << format("&&(STATO==\"%c\")", stato_in); + const char stato_in[2] = { e->stato_iniziale(i), '\0' }; + if (stato_in[0] > '0') + filter << "&&(STATO==\"" << stato_in << "\")"; filter << ')'; if (i==0) { -// tipo_in1=tipo_in; -// stato_in1=stato_in; set(F_CODNUM_ELAB, num_in); field(F_CODNUM_ELAB).check(); set(F_TIPODOC_ELAB , tipo_in); field(F_TIPODOC_ELAB).check(); - set(F_STATODOC_ELAB, format("%c",stato_in)); + set(F_STATODOC_ELAB, stato_in); field(F_STATODOC_ELAB).check(); } } @@ -1442,20 +1790,20 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) } } else + { + const TString16 tipo_fin(e->tipo_finale()); + const TString16 stato_fin(e->stato_finale()); + + filter << "&&"; + if (stato_fin != "0") + filter << '('; + filter << "(TIPODOC==\"" << tipo_fin << "\")"; + if (stato_fin != "0") + filter << "&&(STATO==\"" << stato_fin << "\"))"; + if (is_tipo_elaborazione) { - const TString16 tipo_fin(e->tipo_finale()); - const TString16 stato_fin(e->stato_finale()); - - filter << "&&"; - if (stato_fin != "0") - filter << '('; - filter << format("(TIPODOC==\"%s\")", (const char *)tipo_fin); - if (stato_fin != "0") - filter << format("&&(STATO==\"%s\"))", (const char *)stato_fin); - const TString16 num_fin(e->codice_numerazione_finale()); - set(F_CODNUM_ELAB, num_fin); field(F_CODNUM_ELAB).check(); set(F_TIPODOC_ELAB, tipo_fin); @@ -1463,6 +1811,7 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) set(F_STATODOC_ELAB, stato_fin); field(F_STATODOC_ELAB).check(); } + } } else reset(-1); @@ -1471,126 +1820,77 @@ void TElabora_mask::update_ndoc_filter(bool is_tipo_elaborazione) brew.set_filter(filter); _art_filter = get(F_CODART); + + TCursor* cursor = brew.cursor(); if (_art_filter.not_empty() && to_elab) - brew.cursor()->set_filterfunction(article_filter); + cursor->set_filterfunction(article_filter); else - brew.cursor()->set_filterfunction(NULL); + cursor->set_filterfunction(NULL); + TTree_field& tf = tfield(F_ROWS); + if (tipo.not_empty()) + { + tf.set_tree(&_tree); + if (_art_filter.not_empty() && to_elab) + _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter, article_filter); + else + _tree.set_cursor(get(F_TIPOCF_ELAB)[0], get_long(F_CODCF_ELAB), get_int(F_ANNO_ELAB), filter); + } + else + tf.set_tree(NULL); + tf.win().force_update(); } -bool TElabora_mask::tipo_elaborazione_handler( TMask_field& f, KEY key ) -{ - if (key == K_SPACE) - { - TElabora_mask & m = (TElabora_mask &) f.mask(); - m.update_list(); - m.update_ndoc_filter(TRUE); - } - return TRUE; -} - -bool TElabora_mask::tipo_documento_handler( TMask_field& f, KEY key ) -{ - if (key != K_ENTER && f.to_check(key, TRUE)) - { - TElabora_mask & m = (TElabora_mask &) f.mask(); - - m.update_list(); - m.update_ndoc_filter(); - } - return TRUE; -} - -bool TElabora_mask::codnum_handler( TMask_field& f, KEY key ) -{ - if (key != K_ENTER && f.to_check(key, TRUE)) - { - TElabora_mask & m = (TElabora_mask &) f.mask(); - - m.update_ndoc_filter(); - } - return TRUE; -} - -bool TElabora_mask::codart_handler( TMask_field& f, KEY key ) -{ - if (key != K_ENTER && f.to_check(key, TRUE)) - { - TElabora_mask & m = (TElabora_mask &) f.mask(); - m.update_ndoc_filter(); - } - return TRUE; -} - -bool TElabora_mask::list_elab_handler( TMask_field& f, KEY key ) -{ - if (key == K_SPACE) - { - TElabora_mask & m = (TElabora_mask &) f.mask(); - m.update_ndoc_filter(TRUE); - } - return TRUE; -} - -bool TElabora_mask::docrif_handler( TMask_field& f, KEY key ) +void TElabora_mask::docrif_search() { - if (key == K_F9) - { - TElabora_mask& m = (TElabora_mask&)f.mask(); - - TRectype filtrec(LF_DOC); - filtrec.put(DOC_TIPOCF, m.get(F_TIPOCF_ELAB)); - filtrec.put(DOC_CODCF, m.get(F_CODCF_ELAB)); - filtrec.put(DOC_PROVV, m.get(F_PROVV_ELAB)); - filtrec.put(DOC_ANNO, m.get(F_ANNO_ELAB)); + TRectype filtrec(LF_DOC); + filtrec.put(DOC_TIPOCF, get(F_TIPOCF_ELAB)); + filtrec.put(DOC_CODCF, get(F_CODCF_ELAB)); + filtrec.put(DOC_PROVV, get(F_PROVV_ELAB)); + filtrec.put(DOC_ANNO, get(F_ANNO_ELAB)); - TRelation rel(LF_DOC); - rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); - TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); - TString80 flt; - if (!m.field(F_CODNUM_ELAB).empty()) - flt << format("(CODNUM==\"%s\")&&", (const char*)m.get(F_CODNUM_ELAB)); - if (!m.field(F_TIPODOC_ELAB).empty()) - flt << format("(TIPODOC==\"%s\")&&", (const char*)m.get(F_TIPODOC_ELAB)); - flt << "(STATO==\"" << m.get(F_STATODOC_ELAB) << "\")"; - if (!f.empty()) - flt << "&&(NUMDOCRIF==\"" << f.get() << "\")"; - cur.setfilter(flt); - TToken_string fields = "ANNO|CODNUM|TIPODOC|NUMDOCRIF|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC"; - TCursor_sheet sheet(&cur, fields, - "Documento di riferimento", - "Anno|Num.|Tipo|Docum.Rif.|Data@10|Docum.Rif.1|Docum.Rif.2|Docum.Rif.3|Documento|Ragione Sociale@50", - 0, 1); - if (sheet.run() == K_ENTER) - { - const int nrifpos = fields.get_pos("NUMDOCRIF"); - const TString16 nrif = sheet.row(-1).get(nrifpos); - f.set(nrif); - const int ndocpos = fields.get_pos("NDOC"); - const TString16 ndoc = sheet.row(-1).get(ndocpos); - m.set(F_NDOC_ELAB, ndoc); - const int codnumpos = fields.get_pos("CODNUM"); - const TString16 codnum = sheet.row(-1).get(codnumpos); - m.set(F_CODNUM_ELAB, codnum, TRUE); - } + TRelation rel(LF_DOC); + rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); + TSorted_cursor cur(&rel, "TIPOCF|CODCF|PROVV|ANNO|CODNUM|NUMDOCRIF", "", 2, &filtrec, &filtrec); + TString flt(256); + if (!field(F_CODNUM_ELAB).empty()) + flt << "(CODNUM==\"" << get(F_CODNUM_ELAB) << "\")&&"; + if (!field(F_TIPODOC_ELAB).empty()) + flt << "(TIPODOC==\"" << get(F_TIPODOC_ELAB) << "\")&&"; + if (!field(F_STATODOC_ELAB).empty()) + flt << "(STATO==\"" << get(F_STATODOC_ELAB) << "\")&&"; + add_valuta_filter(flt); flt << "&&"; + TEdit_field& f = efield(F_NUMDOCRIF_ELAB); + if (!f.empty()) + flt << "(NUMDOCRIF==\"" << f.get() << "\")&&"; + flt.rtrim(2); // Togli gli ultimi && + + cur.setfilter(flt); + + TToken_string fields = "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|DOC1|DOC2|DOC3|NDOC|20->RAGSOC"; + TCursor_sheet sheet(&cur, fields, + "Documento di riferimento", + "Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Docum.Rif.1|Docum.Rif.2|Docum.Rif.3|Documento|Ragione Sociale@50", + 0, 1); + if (sheet.run() == K_ENTER) + { + const int nrifpos = fields.get_pos("NUMDOCRIF"); + const TString16 nrif = sheet.row(-1).get(nrifpos); + f.set(nrif); + const int ndocpos = fields.get_pos("NDOC"); + const TString16 ndoc = sheet.row(-1).get(ndocpos); + set(F_NDOC_ELAB, ndoc); + const int codnumpos = fields.get_pos("CODNUM"); + const TString16 codnum = sheet.row(-1).get(codnumpos); + set(F_CODNUM_ELAB, codnum, TRUE); } - - return TRUE; } -TElabora_mask::TElabora_mask(TDocumento_mask * main_mask) - : TMask("ve0100b"), _main(main_mask) +TElabora_mask::TElabora_mask(TDocumento_mask& main_mask) + : TAutomask("ve0100b"), _main(&main_mask) { _myself = this; - set_handler(F_TYPE, tipo_elaborazione_handler); - set_handler(F_TIPODOC_ELAB, tipo_documento_handler); - set_handler(F_STATODOC_ELAB, tipo_documento_handler); - set_handler(F_CODNUM_ELAB, codnum_handler); - set_handler(F_CODART, codart_handler); - set_handler(F_ELAB, list_elab_handler); - set_handler(F_NUMDOCRIF, docrif_handler); - set(F_ANNO_ELAB, _main->get(F_ANNO)); set(F_TIPOCF_ELAB, _main->get(F_TIPOCF)); set(F_CODCF_ELAB, _main->get(F_CODCF)); @@ -1605,7 +1905,7 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key ) m.update_progs(); if (m.check_fields()) // Check values { - TElabora_mask* selection = new TElabora_mask(&m); // No woman no stack + TElabora_mask* selection = new TElabora_mask(m); // No woman no stack bool update_mask = FALSE; const char stato_iniziale = m.doc().stato(); @@ -1645,6 +1945,10 @@ bool TDocumento_mask::elabora_handler( TMask_field& f, KEY key ) return TRUE; } +/////////////////////////////////////////////////////////// +// TDocumento_mask +/////////////////////////////////////////////////////////// + bool TDocumento_mask::print_handler( TMask_field& f, KEY key ) { if (key == K_SPACE) @@ -1789,22 +2093,6 @@ bool TDocumento_mask::codcamp_handler( TMask_field& f, KEY key ) return TRUE; } -/* -bool TDocumento_mask::controeuro_handler( TMask_field& f, KEY key ) -{ - TMask & m = f.mask(); - - if (m.is_running() && key == K_SPACE) - { - const real cambio_euro = TCurrency::get_euro_change(); - const real val = cambio_euro / m.get_real(F_CAMBIO); - - m.set(F_CAMBIO, val); - } - return TRUE; -} -*/ - bool TDocumento_mask::codval_handler( TMask_field& f, KEY key ) { if (key == K_TAB && f.focusdirty()) diff --git a/ve/velib06a.cpp b/ve/velib06a.cpp index 8c10aeedd..1aa36630e 100755 --- a/ve/velib06a.cpp +++ b/ve/velib06a.cpp @@ -1205,4 +1205,19 @@ bool TDocumento_mask::datadocrif_handler(TMask_field& f, KEY key) } } return TRUE; -} \ No newline at end of file +} + +bool link_handler( TMask_field& f, KEY key ) +{ + if (key == K_SPACE) + { + const TSheet_field & sf = *f.mask().get_sheet(); + const TDocumento_mask & m = (const TDocumento_mask & )sf.mask(); + const TDocumento & d = m.doc(); + const int nrow = sf.selected() + 1; + const TRiga_documento & r = d[nrow]; + r.edit(LF_DOC, "DAPROVV|DAANNO|DACODNUM|DANDOC"); + } + return TRUE; +} + diff --git a/ve/vepriv.h b/ve/vepriv.h index 14fe9c782..a15959a4e 100755 --- a/ve/vepriv.h +++ b/ve/vepriv.h @@ -24,5 +24,6 @@ bool qta_handler(TMask_field& f, KEY key); bool qta_evasa_handler(TMask_field& f, KEY key); bool causmag_handler(TMask_field& f, KEY key); bool pricerange_handler(TMask_field& f, KEY key ); +bool link_handler( TMask_field& f, KEY key ); bool numdocrif_hndl(TMask_field& field, KEY key);