From 4aa6525ae23eff81da0426c57ca9e29656bfc861 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 10 Nov 2003 15:01:25 +0000 Subject: [PATCH] Patch level : 2.0 638 Files correlati : bastbnp.msk batbbnp.msk ef0.exe ef0100a.msk ef0500a.msk f31.dir f31.trr riba.ini Ricompilazione Demo : [ ] Commento : Prima implementazione della gestione del codice IBAN in generazione effetti git-svn-id: svn://10.65.10.50/trunk@11580 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ef/bastbnp.uml | 2 +- ef/batbbnp.h | 15 ++- ef/batbbnp.uml | 154 +++++++++++++++++++++--------- ef/ef0100.cpp | 39 ++++++-- ef/ef0100.h | 10 ++ ef/ef0100a.uml | 128 ++++++++++++++++++------- ef/ef0101.cpp | 2 +- ef/ef0101.h | 2 +- ef/ef0500.cpp | 251 +++++++++++++++++++++++-------------------------- ef/ef0500.h | 4 +- ef/ef0500a.uml | 40 ++------ ef/ef0700.cpp | 9 ++ ef/ef0a00.cpp | 29 ++++-- ef/f31.dir | 2 +- ef/f31.trr | 3 +- ef/riba.ini | 48 +++++++++- 16 files changed, 467 insertions(+), 271 deletions(-) diff --git a/ef/bastbnp.uml b/ef/bastbnp.uml index 97c12ee86..eec2f23bf 100755 --- a/ef/bastbnp.uml +++ b/ef/bastbnp.uml @@ -1,7 +1,7 @@ //DEFINIZIONE MASCHERA PER STAMPA TABELLA BANCHE DI PRESENTAZIONE #include "bastbnp.h" -PAGE "Stampa Tabella Banche Presentazione" -1 -1 56 8 +PAGE "Banche di Presentazione" -1 -1 56 8 STRING F_INIZIO1 5 BEGIN diff --git a/ef/batbbnp.h b/ef/batbbnp.h index 5caf4a881..7e1ebf498 100755 --- a/ef/batbbnp.h +++ b/ef/batbbnp.h @@ -26,7 +26,6 @@ #define F_GRUPPO_SCN 122 #define F_CONTO_SCN 123 #define F_SOTTOC_SCN 124 -#define F_CBI 125 #define F_DESCR_INC 126 #define F_DESCR_SBF 127 #define F_DESCR_SCN 128 @@ -35,4 +34,18 @@ #define F_SOTTOC_INCP 131 #define F_DESCR_INCP 132 +#define F_IBAN 140 +#define F_IBAN_STATO 141 +#define F_IBAN_CHECK 142 +#define F_BBAN 143 +#define F_BBAN_CIN 144 +#define F_BBAN_ABI 145 +#define F_BBAN_CAB 146 +#define F_BBAN_CONTO 147 + +#define F_CBI 150 +#define F_IBAN_PAG 151 +#define F_IBAN_INC 152 + + #endif//__BATBBNP_H diff --git a/ef/batbbnp.uml b/ef/batbbnp.uml index a70586a0e..ec7d1c76c 100755 --- a/ef/batbbnp.uml +++ b/ef/batbbnp.uml @@ -1,7 +1,6 @@ -//DEFINIZIONE MASCHERA GESTIONE TABELLA BANCHE DI PRESENTAZIONE #include "batbbnp.h" -TOOLBAR "" 0 20 0 2 +TOOLBAR "" 0 -2 0 2 #include ENDPAGE @@ -9,7 +8,7 @@ PAGE "Banche di Presentazione" 0 -1 77 20 GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 1 0 " " + PROMPT 1 0 "" END NUMBER F_CODICEABI 5 @@ -60,6 +59,7 @@ BEGIN OUTPUT F_ABI CODTAB[1,5] MESSAGE COPY,F_CODICEABI MESSAGE CHECK,F_CODICEABI + MESSAGE COPY,F_BBAN_ABI CHECKTYPE REQUIRED END @@ -81,6 +81,7 @@ BEGIN OUTPUT F_DENOM 100@->S0 MESSAGE COPY,F_CODICECAB MESSAGE CHECK,F_CODICEABI + MESSAGE COPY,F_BBAN_CAB CHECKTYPE REQUIRED END @@ -96,40 +97,92 @@ BEGIN FLAG "D" END -GROUPBOX DLG_NULL 78 6 +GROUPBOX DLG_NULL 78 3 BEGIN - PROMPT 1 4 "@bPortafoglio Effetti all'incasso" + PROMPT 1 4 "@bConto Corrente" +END + +STRING F_IBAN 34 +BEGIN + PROMPT 2 5 "" + FLAGS "H" + FIELD S3 +END + +STRING F_IBAN_STATO 2 +BEGIN + PROMPT 2 5 "Codice IBAN " + FLAGS "U" + VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +NUMBER F_IBAN_CHECK 2 +BEGIN + PROMPT 19 5 "" + FLAGS "UZ" + VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +STRINGA F_BBAN 30 +BEGIN + PROMPT 30 5 "BBAN " + FLAGS "UH" +END + +STRINGA F_BBAN_CIN 1 +BEGIN + PROMPT 30 5 "BBAN " + FLAGS "U" + VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +NUMBER F_BBAN_ABI 5 +BEGIN + PROMPT 38 5 "" + FLAGS "DGZ" +END + +NUMBER F_BBAN_CAB 5 +BEGIN + PROMPT 45 5 "" + FLAGS "DGZ" +END + +STRING F_BBAN_CONTO 12 +BEGIN + PROMPT 52 5 "" + FLAGS "UZ" + VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 7 "@bPortafoglio Effetti all'incasso" END STRING F_CC_INC 20 BEGIN - PROMPT 2 5 "C/C " + PROMPT 2 8 "C/C " FIELD S0 END -STRING F_CC_CONT_INC 20 -BEGIN - PROMPT 2 6 "C/Contabile " - FIELD S3 -END - NUMBER F_GRUPPO_INC 3 BEGIN - PROMPT 2 7 "Cont. attivi " + PROMPT 2 9 "Cont. attivi " FIELD I0 CHECKTYPE NORMAL END NUMBER F_CONTO_INC 3 BEGIN - PROMPT 21 7 "" + PROMPT 21 9 "" FIELD I1 CHECKTYPE NORMAL END NUMBER F_SOTTOC_INC 6 BEGIN - PROMPT 28 7 "" + PROMPT 28 9 "" FIELD I2 USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" INPUT GRUPPO F_GRUPPO_INC @@ -148,7 +201,7 @@ END STRING F_DESCR_INC 50 38 BEGIN - PROMPT 38 7 "" + PROMPT 38 9 "" USE LF_PCON KEY 2 INPUT DESCR F_DESCR_INC DISPLAY "Descrizione@50" DESCR @@ -161,21 +214,21 @@ END NUMBER F_GRUPPO_INCP 3 BEGIN - PROMPT 2 8 "Cont. passivi " + PROMPT 2 10 "Cont. passivi " FIELD I9 CHECKTYPE NORMAL END NUMBER F_CONTO_INCP 3 BEGIN - PROMPT 21 8 "" + PROMPT 21 10 "" FIELD I10 CHECKTYPE NORMAL END NUMBER F_SOTTOC_INCP 6 BEGIN - PROMPT 28 8 "" + PROMPT 28 10 "" FIELD I11 USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" INPUT GRUPPO F_GRUPPO_INCP @@ -194,7 +247,7 @@ END STRING F_DESCR_INCP 50 38 BEGIN - PROMPT 38 8 "" + PROMPT 38 10 "" USE LF_PCON KEY 2 INPUT DESCR F_DESCR_INCP DISPLAY "Descrizione@50" DESCR @@ -205,47 +258,41 @@ BEGIN CHECKTYPE NORMAL END -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 1 10 "@bPortafoglio Effetti salvo buon fine" + PROMPT 1 12 "@bPortafoglio Effetti salvo buon fine" END STRING F_CC_SBF 20 BEGIN - PROMPT 2 11 "C/C " + PROMPT 2 13 "C/C " FIELD S1 END NUMBER F_FIDO_SBF 20 2 BEGIN - PROMPT 38 11 "Fido " + PROMPT 38 13 "Fido " FIELD R1 PICTURE "###.###.###.###,@@" END -STRING F_CC_CONT_SBF 20 -BEGIN - PROMPT 2 12 "C/Contabile " - FIELD S4 -END - NUMBER F_GRUPPO_SBF 3 BEGIN - PROMPT 2 13 "Contropartita " + PROMPT 2 14 "Contropartita " FIELD I3 CHECKTYPE NORMAL END NUMBER F_CONTO_SBF 3 BEGIN - PROMPT 21 13 "" + PROMPT 21 14 "" FIELD I4 CHECKTYPE NORMAL END NUMBER F_SOTTOC_SBF 6 BEGIN - PROMPT 28 13 "" + PROMPT 28 14 "" FIELD I5 USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" INPUT GRUPPO F_GRUPPO_SBF @@ -264,7 +311,7 @@ END STRING F_DESCR_SBF 50 38 BEGIN - PROMPT 38 13 "" + PROMPT 38 14 "" USE LF_PCON KEY 2 INPUT DESCR F_DESCR_SBF DISPLAY "Descrizione@50" DESCR @@ -275,30 +322,24 @@ BEGIN CHECKTYPE NORMAL END -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 1 15 "@bPortafoglio Effetti allo sconto" + PROMPT 1 16 "@bPortafoglio Effetti allo sconto" END STRING F_CC_SCN 20 BEGIN - PROMPT 2 16 "C/C " + PROMPT 2 17 "C/C " FIELD S2 END NUMBER F_FIDO_SCN 20 2 BEGIN - PROMPT 38 16 "Fido " + PROMPT 38 17 "Fido " FIELD R2 PICTURE "###.###.###.###,@@" END -STRING F_CC_CONT_SCN 20 -BEGIN - PROMPT 2 17 "C/Contabile " - FIELD S5 -END - NUMBER F_GRUPPO_SCN 3 BEGIN PROMPT 2 18 "Contropartita " @@ -308,7 +349,7 @@ END NUMBER F_CONTO_SCN 3 BEGIN - PROMPT 21 18 "" + PROMPT 20 18 "" FIELD I7 CHECKTYPE NORMAL END @@ -345,12 +386,33 @@ BEGIN CHECKTYPE NORMAL END +ENDPAGE + +PAGE "Paramteri Distinte" 0 -1 77 20 + +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 1 1 "@bParametri emissione distinte su file" +END + BOOLEAN F_CBI BEGIN - PROMPT 2 20 "Tracciato SETIF" + PROMPT 2 2 "Utilizza tracciato SETIF" FIELD B0 END +BOOLEAN F_IBAN_PAG +BEGIN + PROMPT 2 3 "Genera IBAN su distinte di pagamento" + FIELD B1 +END + +BOOLEAN F_IBAN_INC +BEGIN + PROMPT 2 4 "Genera IBAN su distinte di incasso" + FIELD B2 +END + ENDPAGE ENDMASK diff --git a/ef/ef0100.cpp b/ef/ef0100.cpp index b23606819..de93d2c62 100755 --- a/ef/ef0100.cpp +++ b/ef/ef0100.cpp @@ -30,6 +30,7 @@ protected: virtual void init_insert_mode(TMask&); virtual bool get_next_key(TToken_string& key); virtual void init_modify_mode(TMask&); + static bool clifo_handler(TMask_field& f, KEY k); static bool datascad_handler(TMask_field& f, KEY k); static bool handle_sheet(TMask_field& f, KEY); static bool cambio_handler(TMask_field& f, KEY k); @@ -95,10 +96,11 @@ void TVariazione_effetti::init_insert_mode(TMask&) enable_controeuro(); } -void TVariazione_effetti::init_modify_mode(TMask&) +void TVariazione_effetti::init_modify_mode(TMask& m) { - _msk->disable(F_TIPOCF); + m.disable(F_TIPOCF); enable_controeuro(); + m.efield(F_IBAN_STATO).validate(K_TAB); } // ritorna il prossimo numero valido di chiave @@ -292,9 +294,10 @@ bool TVariazione_effetti::user_create() open_files(LF_TAB, LF_TABCOM, LF_EFFETTI, LF_REFFETTI, LF_CESS, LF_COMUNI, LF_DOC, LF_RIGHEDOC, LF_CLIFO, LF_CFVEN, LF_OCCAS, 0); - _msk = new TMask("ef0100a") ; _rel = new TRelation(LF_EFFETTI); _effetto = new TEffetto; + _msk = new TMask("ef0100a") ; + _msk->set_handler(F_CODCF, clifo_handler); _msk->set_handler(F_DATASCAD, datascad_handler); _msk->set_handler(F_CODVAL, codval_handler); _msk->set_handler(F_CAMBIO, cambio_handler); @@ -310,8 +313,8 @@ bool TVariazione_effetti::user_create() bool TVariazione_effetti::user_destroy() { delete _msk; - delete _rel; delete _effetto; + delete _rel; return TRUE; } @@ -319,8 +322,8 @@ bool TVariazione_effetti::user_destroy() // che venga inserita almeno una riga per un effetto bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k) { - TMask& m = f.mask(); - const int mode = m.mode(); + TMask& m = f.mask(); + const int mode = m.mode(); // se si vuole salvare e si è in uno dei due modi di funzionamento if ( k == K_ENTER && (mode == MODE_INS || mode == MODE_MOD) ) { // si controllano le righe del effetto nello sheet @@ -345,6 +348,30 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k) return TRUE; } +bool TVariazione_effetti::clifo_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.to_check(k)) + { + TMask& m = f.mask(); + TString8 str; + str << m.get(F_TIPOCF) << '|' << m.get(F_CODCF); + const TString& iban = cache().get(LF_CFVEN, str, "IBAN"); + if (iban.not_empty()) + { + m.set(F_IBAN, iban); + m.set(F_IBAN_STATO, iban.left(2)); + m.set(F_IBAN_CHECK, iban.mid(2,2)); + m.set(F_BBAN, iban.mid(4)); + m.set(F_BBAN_CIN, iban.mid(4,1)); + m.set(F_BBAN_ABI, iban.mid(5,5)); + m.set(F_BBAN_CAB, iban.mid(10,5)); + m.set(F_BBAN_CONTO, iban.mid(15)); + m.efield(F_IBAN_STATO).validate(K_TAB); + } + } + return true; +} + bool TVariazione_effetti::datascad_handler(TMask_field& f, KEY k) { if (k == K_ENTER) diff --git a/ef/ef0100.h b/ef/ef0100.h index 6721be34e..309cb7f93 100755 --- a/ef/ef0100.h +++ b/ef/ef0100.h @@ -37,6 +37,16 @@ #define F_TIPOCF 231 #define F_CONTROEURO 232 +#define F_IBAN 250 +#define F_IBAN_STATO 251 +#define F_IBAN_CHECK 252 +#define F_BBAN 253 +#define F_BBAN_CIN 254 +#define F_BBAN_ABI 255 +#define F_BBAN_CAB 256 +#define F_BBAN_CONTO 257 + + // Identificatori campi per lo spreadsheet dei Cessionari #define F_RAGSOC 101 #define F_LOCALITA 102 diff --git a/ef/ef0100a.uml b/ef/ef0100a.uml index abbc362c2..b00add7cb 100755 --- a/ef/ef0100a.uml +++ b/ef/ef0100a.uml @@ -56,7 +56,6 @@ BEGIN GROUP 9 END - NUMBER F_CODCF 6 BEGIN PROMPT 15 3 "" @@ -228,7 +227,7 @@ ENDPAGE PAGE "Parametri" 0 -1 0 19 -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 4 BEGIN PROMPT 0 0 "" END @@ -261,26 +260,26 @@ END STRING DLG_NULL 50 BEGIN - PROMPT 27 2 "" + PROMPT 26 2 "" FLAGS "D" GROUP 12 END DATE DLG_NULL BEGIN - PROMPT 1 3 "Data scadenza " + PROMPT 51 1 "Data scadenza " FLAGS "D" GROUP 13 END -GROUPBOX DLG_NULL 38 4 +GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 0 5 "Banca d'appoggio" + PROMPT 0 4 "@bBanca d'appoggio" END NUMBER F_CODABI 5 BEGIN - PROMPT 1 6 "Codice ABI " + PROMPT 1 5 "Codice ABI " FIELD CODABI FLAGS "Z" USE %BAN SELECT CODTAB ?= "?????" @@ -290,11 +289,12 @@ BEGIN OUTPUT F_CODABI CODTAB[1,5] CHECKTYPE REQUIRED WARNING "Codice ABI assente" + MESSAGE COPY,F_BBAN_ABI END NUMBER F_CODCAB 5 BEGIN - PROMPT 1 7 "Codice CAB " + PROMPT 41 5 "Codice CAB " FIELD CODCAB FLAGS "Z" USE %BAN KEY 1 SELECT CODTAB ?= "??????????" @@ -308,23 +308,78 @@ BEGIN CHECKTYPE REQUIRED VALIDATE REQIF_FUNC 1 F_CODCABP WARNING "Banca assente" + MESSAGE COPY,F_BBAN_CAB END -GROUPBOX DLG_NULL 38 4 +STRING F_IBAN 34 BEGIN - PROMPT 41 5 "Banca di presentazione" + PROMPT 2 6 "" + FLAGS "H" + FIELD IBAN +END + +STRING F_IBAN_STATO 2 +BEGIN + PROMPT 1 6 "Codice IBAN " + FLAGS "U" + VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +NUMBER F_IBAN_CHECK 2 +BEGIN + PROMPT 19 6 "" + FLAGS "UZ" + VALIDATE CHECK_IBAN_FUNC F_IBAN F_IBAN_STATO F_IBAN_CHECK F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +STRINGA F_BBAN 30 +BEGIN + PROMPT 30 6 "BBAN " + FLAGS "UH" +END + +STRINGA F_BBAN_CIN 1 +BEGIN + PROMPT 30 6 "BBAN " + FLAGS "U" + VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + +NUMBER F_BBAN_ABI 5 +BEGIN + PROMPT 38 6 "" + FLAGS "DGZ" +END + +NUMBER F_BBAN_CAB 5 +BEGIN + PROMPT 45 6 "" + FLAGS "DGZ" +END + +STRING F_BBAN_CONTO 12 +BEGIN + PROMPT 52 6 "" + FLAGS "UZ" + VALIDATE CHECK_BBAN_FUNC F_BBAN F_BBAN_CIN F_BBAN_ABI F_BBAN_CAB F_BBAN_CONTO +END + + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 0 8 "@bBanca di presentazione" END NUMBER F_CODABIP 5 BEGIN - PROMPT 42 6 "Codice ABI " + PROMPT 1 9 "Codice ABI " FIELD CODABIP FLAGS "Z" END NUMBER F_CODCABP 5 BEGIN - PROMPT 42 7 "Codice CAB " + PROMPT 41 9 "Codice CAB " FIELD CODCABP FLAGS "Z" USE BNP @@ -343,25 +398,30 @@ END DATE F_DATAEMISS BEGIN - PROMPT 1 10 "Data di emissione " + PROMPT 1 11 "Data di emissione " FIELD DATAEMISS END NUMBER F_NUMEMISS 8 BEGIN - PROMPT 42 10 "Nr. di emissione " + PROMPT 42 11 "Nr. di emissione " FIELD NUMEMISS END BOOLEAN F_EFFSTAMP BEGIN - PROMPT 1 11 "Effetto stampato" + PROMPT 1 12 "Effetto stampato" FIELD EFFSTAMP END +GROUPBOX DLG_NULL 78 5 +BEGIN + PROMPT 0 13 "@bDistinta" +END + LIST F_TIPODIST 15 BEGIN - PROMPT 1 13 "Tipo distinta " + PROMPT 1 14 "Tipo distinta " FIELD TIPODIST ITEM " | " ITEM "I|All'incasso" @@ -372,7 +432,7 @@ END NUMBER F_NDIST 5 BEGIN - PROMPT 42 13 "Nr. distinta " + PROMPT 42 14 "Nr. distinta " FIELD NDIST FLAGS "D" VALIDATE NOT_EMPTY_FUNC @@ -381,46 +441,46 @@ END DATE F_DATADIST BEGIN - PROMPT 1 14 "Data distinta " + PROMPT 1 15 "Data distinta " FIELD DATADIST FLAGS "D" END NUMBER F_NRIGADIST 4 BEGIN - PROMPT 42 14 "Nr. di riga " + PROMPT 42 15 "Nr. di riga " FIELD NRIGADIST FLAGS "D" END BOOLEAN F_DISTSTAM BEGIN - PROMPT 1 15 "Distinta stampata" + PROMPT 1 16 "Distinta stampata" FIELD DISTSTAM FLAGS "D" END DATE F_DATARIBA BEGIN - PROMPT 1 17 "Data Ri.Ba. " + PROMPT 1 18 "Data Ri.Ba. " FIELD DATARIBA END BOOLEAN F_DISRIBAEST BEGIN - PROMPT 42 17 "Distinta Ri.Ba. estratta" + PROMPT 42 18 "Distinta Ri.Ba. estratta" FIELD DISRIBAEST END BOOLEAN F_EFFCONT BEGIN - PROMPT 1 18 "Effetto contabilizzato" + PROMPT 1 19 "Effetto contabilizzato" FIELD EFFCONT END BOOLEAN F_EFFCOMP BEGIN - PROMPT 42 18 "Effetto completato" + PROMPT 42 19 "Effetto completato" FIELD EFFCOMP END @@ -428,7 +488,7 @@ ENDPAGE PAGE "Cessionari" 0 -1 0 19 -GROUPBOX DLG_NULL 78 5 +GROUPBOX DLG_NULL 78 4 BEGIN PROMPT 0 0 "" END @@ -440,6 +500,13 @@ BEGIN GROUP 10 END +DATE DLG_NULL +BEGIN + PROMPT 51 1 "Data scadenza " + FLAGS "D" + GROUP 13 +END + TEXT DLG_NULL BEGIN PROMPT 1 2 "Cliente" @@ -461,21 +528,14 @@ END STRING DLG_NULL 50 BEGIN - PROMPT 27 2 "" + PROMPT 26 2 "" FLAGS "D" GROUP 12 END -DATE DLG_NULL -BEGIN - PROMPT 1 3 "Data scadenza " - FLAGS "D" - GROUP 13 -END - SPREADSHEET F_SHEET_EFF BEGIN - PROMPT 1 6 "Obbligati principali" + PROMPT 1 4 "Obbligati principali" ITEM "Ragione Sociale@50" ITEM "Localita'@35" ITEM "Stato" diff --git a/ef/ef0101.cpp b/ef/ef0101.cpp index 9a652c3eb..20fabe643 100755 --- a/ef/ef0101.cpp +++ b/ef/ef0101.cpp @@ -13,7 +13,7 @@ TEffetto::TEffetto() } // costuisce l'effetto con il record passato -TEffetto::TEffetto(TRectype& rec) +TEffetto::TEffetto(const TRectype& rec) : TRectype(LF_EFFETTI), _righe(LF_REFFETTI, REFF_NRIGATR), _cess(LF_CESS, CES_NRIGA) { TLocalisamfile f(LF_EFFETTI); diff --git a/ef/ef0101.h b/ef/ef0101.h index fe8775ee8..07da3e81e 100755 --- a/ef/ef0101.h +++ b/ef/ef0101.h @@ -94,7 +94,7 @@ public: // costruttore di default TEffetto(); // costuisce l'effetto con il record passato - TEffetto(TRectype& rec); + TEffetto(const TRectype& rec); // costuttore di copia TEffetto(const TEffetto& eff); // distruttore di default diff --git a/ef/ef0500.cpp b/ef/ef0500.cpp index 7174653f6..98fcc02aa 100755 --- a/ef/ef0500.cpp +++ b/ef/ef0500.cpp @@ -19,7 +19,6 @@ class TRiba_form; class TDistinta_form; class TRiba_file; -enum fo { kb360 = 1, kb720 = 2, kb1200 = 3, kb1440 = 4 }; #define RIBAFILENAME "ribael.dat" @@ -29,7 +28,6 @@ enum fo { kb360 = 1, kb720 = 2, kb1200 = 3, kb1440 = 4 }; class TEmissione: public TSkeleton_application { - fo _foutput; TMask* _msk; TRelation* _firmrel; TRelation* _rel; @@ -46,8 +44,8 @@ protected: virtual void on_firm_change(void); void conferma(void); void enable_dettaglio(TForm& form) const; - virtual void print_rb(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis); - virtual void print_dse(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis); + virtual void print_rb(char tipost, int ndist, char tipodist, const bool is_vis); + virtual void print_dse(char tipost, int ndist, char tipodist, const bool is_vis); virtual void print(void); void floppy(void); void save_data_emis(void); @@ -59,7 +57,8 @@ protected: bool ok_write(void); void aggiorna_rb(TCursor*); void aggiorna_dist(TCursor*); - static bool annulla_handler(TMask_field& f, KEY k); + + bool test_record_type(const TString& key) const; public: int base_no() const { return _base_page_no; } @@ -112,7 +111,8 @@ class TRiba_file: public TFile_text { real _tot_importi; char _codice_moneta; - bool _tracciato_setif; + bool _tracciato_setif, _iban_pag, _iban_inc; + TString _my_iban; // IBAN del mio conto corrente (ordinante) protected: virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str); @@ -121,8 +121,16 @@ public: void set_tot_importi(const real& importo) { _tot_importi = importo; } void add_tot_importi(const real& importo) { _tot_importi += importo; } const real tot_importi() const { return _tot_importi; } - bool tracciato_setif() {return _tracciato_setif;} - void set_tracciato_setif(const bool tracciato_setif=TRUE) {_tracciato_setif = tracciato_setif;} + + bool tracciato_setif() const { return _tracciato_setif; } + void set_tracciato_setif(bool tracciato_setif=TRUE) { _tracciato_setif = tracciato_setif; } + + const TString& my_iban() const { return _my_iban; } + void set_my_iban(const char* ib) { _my_iban = ib; } + bool iban_pag() const { return _iban_pag; } + bool iban_inc() const { return _iban_inc; } + void set_iban_pag(bool ib) { _iban_pag = ib; } + void set_iban_inc(bool ib) { _iban_inc = ib; } TRiba_file(const TString& file_name, const TString& config_name); virtual ~TRiba_file() { } @@ -140,6 +148,9 @@ bool TEmissione::create() _formrb = NULL; _formdse = NULL; _msk = new TMask("ef0500a"); + _msk->set(F_NOMEFILE,RIBAFILENAME); + _msk->set(F_PATH, "A:\\"); + _firmrel= new TRelation(LF_NDITTE); _firmrel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR"); _firmrel->add(LF_UNLOC,"CODDITTA=CODDITTA"); @@ -155,10 +166,6 @@ bool TEmissione::create() _rel->add(LF_COMUNI, "STATO==STATO|COM==COM", 1, LF_INDSP, 213); _rel->add("BNP", "CODTAB=CODABIP+CODCABP", 1, 0, 403); _cur = NULL; - _msk->set(F_NOMEFILE,RIBAFILENAME); -// _trasfile = new TRiba_file(RIBAFILENAME, "riba.ini"); -// _trasfile->set_ditta(get_firm()); - _msk->set_handler(DLG_CANCEL, annulla_handler); _trasfile = NULL; return TSkeleton_application::create(); } @@ -258,31 +265,35 @@ void TEmissione::floppy() } inizializza_file(); - long n_eff = _cur->items(); - bool condition = ok_write(); + const bool condition = ok_write(); if (!condition) - error_box(TR("Impossibile continuare dischetto pieno")); + error_box(TR("Impossibile scrivere sull'unita' di destinazione")); else { - TProgind pi(n_eff,TR("Emissione Ri.Ba. su floppy..."),FALSE,TRUE); - - TAssoc_array& tracciati = _trasfile->tracciati(); - header_rb();//intestazione flusso effetti - //scandisco tutti gli effetti della distinta selezionata - for (*_cur = 0; _cur->pos() < n_eff; ++(*_cur)) + const TRecnotype n_eff = _cur->items(); + if (n_eff > 0) { - pi.addstatus(1L); - save_data_emis(); - THash_object* lavoro = tracciati.get_hashobj(); - //scandisco tutti i record di un effetto - for (int i = 0; lavoro != NULL; i++) + TProgind pi(n_eff,TR("Emissione Ri.Ba. su file..."),FALSE,TRUE); + + TAssoc_array& tracciati = _trasfile->tracciati(); + header_rb();//intestazione flusso effetti + //scandisco tutti gli effetti della distinta selezionata + for (*_cur = 0; _cur->pos() < n_eff; ++(*_cur)) { - record(*lavoro);//emetto il record - lavoro = tracciati.get_hashobj(); + pi.addstatus(1L); + save_data_emis(); + THash_object* lavoro = tracciati.get_hashobj(); + //scandisco tutti i record di un effetto + for (int i = 0; lavoro != NULL; i++) + { + record(*lavoro);//emetto il record + lavoro = tracciati.get_hashobj(); + } } + footer_ef(); //chiusura flusso effetti } - footer_ef(); //chiusura flusso effetti + message_box("Effetti emessi: %d", n_eff); } _trasfile->close(); delete _trasfile; @@ -310,45 +321,39 @@ void TEmissione::save_data_emis() //emetto il record d'intestazione del flusso di effetti void TEmissione::header_rb() { - TRecord_text rec; - *_cur = 0; const TRectype& eff = _rel->curr(); + TString16 codtab = eff.get(EFF_CODABIP); codtab << eff.get(EFF_CODCABP); const TRectype& bnp = cache().get("BNP", codtab); - if (bnp.get_bool("B0")) - { - rec.set_type("RB"); - _trasfile->set_tracciato_setif(TRUE); - } - else - { - rec.set_type("IB"); - _trasfile->set_tracciato_setif(FALSE); - } + const bool setif = bnp.get_bool("B0"); + _trasfile->set_tracciato_setif(setif); + + _trasfile->set_my_iban(bnp.get("S3")); + _trasfile->set_iban_pag(bnp.get_bool("B1")); + _trasfile->set_iban_inc(bnp.get_bool("B2")); + + TRecord_text rec(setif ? "RB" : "IB"); _trasfile->autoload(rec, *_cur); _trasfile->write(rec); - } //emetto il record di chiusura del flusso di effetti void TEmissione::footer_ef() { - TRecord_text rec; *_cur = 0; - rec.set_type("EF"); - if (!_trasfile->tracciato_setif()) { - TTracciato_record * trec = _trasfile->t_rec("EF"); + TTracciato_record* trec = _trasfile->t_rec("EF"); const int p1 = trec->get(7).position(); const int p2 = trec->get(8).position(); trec->get(7).set_position(p2); trec->get(8).set_position(p1); } + TRecord_text rec("EF"); _trasfile->autoload(rec, *_cur); _trasfile->write(rec); _trasfile->write_file()->seekp(0, ios::end); @@ -372,12 +377,35 @@ void TEmissione::inizializza_cur() //inizializza il file di testo su cui emettere gli effetti void TEmissione::inizializza_file() { - TFilename fileriba = _msk->get(F_UNITA); - fileriba << ":\\" << _msk->get(F_NOMEFILE); + TFilename fileriba = _msk->get(F_PATH); + fileriba.add(_msk->get(F_NOMEFILE)); _trasfile->open(fileriba,'w'); _trasfile->set_tot_importi(ZERO); _trasfile->force_record_separator(_msk->get_bool(F_FORCESEP)); - _foutput = (fo)_msk->get_int(F_FOR_OUT); +} + +bool TEmissione::test_record_type(const TString& key) const +{ + bool ok = true; + if (key == "16" || key == "17") + { + const TRectype& eff = _cur->curr(); + + if (key == "16") + ok = _trasfile->my_iban().not_empty(); + else + ok = eff.get(EFF_IBAN).not_empty(); + + if (ok) + { + const char tipocf = eff.get_char(EFF_TIPOCF); + if (tipocf == 'C') + ok = _trasfile->iban_inc(); + else + ok = _trasfile->iban_pag(); + } + } + return ok; } //emetto un record del flusso di effetti @@ -386,12 +414,15 @@ void TEmissione::record(THash_object& lavoro) const TString& chiave = lavoro.key(); if (chiave !="EF" && chiave !="RB" && chiave != "IB") { - TTracciato_record& oggetto = (TTracciato_record&)lavoro.obj(); + const TTracciato_record& oggetto = (TTracciato_record&)lavoro.obj(); const TString& tipo = oggetto.type(); - TRecord_text rec(tipo); - //carico il record da emettere - _trasfile->autoload(rec, *_cur, &tipo); - _trasfile->write(rec);//emetto i dati su file + if (test_record_type(tipo)) + { + TRecord_text rec(tipo); + //carico il record da emettere + _trasfile->autoload(rec, *_cur, &tipo); + _trasfile->write(rec);//emetto i dati su file + } } } @@ -403,7 +434,7 @@ bool TEmissione::ok_write() int dim = _trasfile->recordsize(); unsigned long nbyte = (elem*7+2)*dim; - TString16 unita; unita << _msk->get(F_UNITA)[0] << ":/"; + const TString& unita = _msk->get(F_PATH); return xvt_fsys_test_disk_free_space(unita, nbyte) != 0; } @@ -440,7 +471,7 @@ void TEmissione::aggiorna_dist(TCursor* cur) } // gestione emissione su moduli cartacei delle riba -void TEmissione::print_rb(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis) +void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_vis) { TCursor* fcur = _formrb->cursor(); TLocalisamfile &eff = fcur->file(LF_EFFETTI); @@ -466,30 +497,15 @@ void TEmissione::print_rb(char tipost, int ndist, char tipodist, int ncopie, con } fcur->setfilter(filter,TRUE); - long n = fcur->items(); - fcur->freeze(); -// se la stampa non si fa a video istanzia puntatore per la gestione -// della barra di attesa - TProgind* pi = is_vis ? NULL : new TProgind(ncopie,TR("Stampa Effetti..."),FALSE,TRUE); - for (int j=0; j < ncopie; j++) - { - if (pi) pi->addstatus(1L); // aggiorna la barra d'attesa - // ciclo sugli elementi del cursore di stampa - //for (*fcur = 0; fcur->pos() < n; ++(*fcur)) - { - _formrb->print(); // stampa il form - } - } + _formrb->print(); // stampa il form if (tipost == 'D') // se emetto riba in definitiva devo aggiornare aggiorna_rb(fcur);// data, numero emissione e flag di stampa effetto - if (pi) delete pi; } // gestione emissione su moduli cartacei delle distinte -void TEmissione::print_dse(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis) +void TEmissione::print_dse(char tipost, int ndist, char tipodist, const bool is_vis) { TCursor* fcur = _formdse->cursor(); - TLocalisamfile &eff = fcur->file(LF_EFFETTI); // setta la chiave 4 per il cursore per poter leggere tutti gli effetti // della distinta TString16 filter; @@ -497,36 +513,29 @@ void TEmissione::print_dse(char tipost, int ndist, char tipodist, int ncopie, co filter = "DISTSTAM=\" \"";// setta il filtro del cursore per ... fcur->setfilter(filter,TRUE); fcur->setkey(4); - TRectype darec(eff.curr()); // fissa i dati per la scelta degli ... - darec.zero(); // ... effetti nel primo e nell'ultimo record del cursore + TRectype darec(LF_EFFETTI); // fissa i dati per la scelta degli ... + // ... effetti nel primo e nell'ultimo record del cursore if (ndist > 0) { darec.put(EFF_NDIST, ndist); darec.put(EFF_TIPODIST, tipodist); - TRectype arec(darec); - fcur->setregion(darec, arec); + fcur->setregion(darec, darec); fcur->setfilter(""); } else fcur->setfilter("(TIPODIST==\"\")&&(NDIST==\"\")"); - long n = fcur->items(); + const TRecnotype n = fcur->items(); fcur->freeze(); -// se la stampa non si fa a video istanzia puntatore per la gestione -// della barra di attesa - TProgind* pi = is_vis ? NULL : new TProgind(ncopie,TR("Stampa Distinta..."),FALSE,TRUE); - for (int j=0; j < ncopie; j++) - { - _base_page_no = 0; - if (pi) pi->addstatus(1L); // aggiorna la barra d'attesa - _formdse->find_field('F',last_page,2).set(""); // Azzera nr documenti - _formdse->find_field('F',last_page,3).set(""); // Azzera tot documenti - _formdse->print(); // stampa il form - // stampa numero di pagina (solo nella distinta) - _base_page_no = printer().getcurrentpage() -1; - } + + _base_page_no = 0; + _formdse->find_field('F',last_page,2).set(""); // Azzera nr documenti + _formdse->find_field('F',last_page,3).set(""); // Azzera tot documenti + _formdse->print(); // stampa il form + // stampa numero di pagina (solo nella distinta) + _base_page_no = printer().getcurrentpage() -1; + if (tipost == 'D') // se emetto distinta in definitiva ... aggiorna_dist(fcur);// ... devo aggiornare flag di stampa distinta - if (pi) delete pi; } void TEmissione::enable_dettaglio(TForm& form) const @@ -549,8 +558,6 @@ void TEmissione::enable_dettaglio(TForm& form) const // gestione emissione effetti/distinte su moduli cartacei void TEmissione::print() { - int ncopie = _msk->get_int(F_NCOPIE); - if (ncopie == 0) ncopie = 1; printer().open(); // TRUE se si stampa a video const bool is_vis = printer().printtype() == screenvis; @@ -582,7 +589,7 @@ void TEmissione::print() nomeform = "rb.frm"; // utilizzo quello generico _formrb = new TRiba_form(nomeform); enable_dettaglio(*_formrb); - print_rb(tipost,ndist,tipodist,ncopie,is_vis); + print_rb(tipost,ndist,tipodist,is_vis); } else { @@ -596,24 +603,11 @@ void TEmissione::print() _formdse = new TDistinta_form(nomeform, _firmrel); enable_dettaglio(*_formdse); _formdse->set_order(tipord); - print_dse(tipost,ndist,tipodist,ncopie,is_vis); + print_dse(tipost,ndist,tipodist,is_vis); } printer().close(); } -// handler per gestire la conferma dell'annullamento dei dati inseriti -// nella maschera -bool TEmissione::annulla_handler(TMask_field& f, KEY k) -{ - TMask &m = f.mask(); - if (k == K_SPACE) - { - if (yesno_box(TR("Vuoi veramente annullare i dati inseriti"))) - m.reset(); - } - return TRUE; -} - // costruttore classe TRiba_form TRiba_form::TRiba_form(const char* name): TForm() { @@ -631,7 +625,7 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s) // gestione dei campi relativi all'importo dell'effetto. Setta il valore da // solo se e' in valuta (cambia anche la picture) // sintassi: _IMPORTO - TEffetto effetto(cursor()->file().curr()); + const TEffetto effetto(cursor()->file().curr()); const bool in_valuta = effetto.in_valuta(); real importo = effetto.importo(in_valuta); cf.set(importo.string()); @@ -643,12 +637,8 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s) TCursor* cur = cursor(); if (cur->curr().get_int(EFF_NDIST) > 0) { - TRectype & ban = cur->curr(-204); - valore.cut(0); - valore << ban.get("S0"); - valore.trim(); - ban = cur->curr(-202); - valore << " " << ban.get("S0"); + valore = cur->curr(-204).get("S0"); + valore << ' ' << cur->curr(-202).get("S0"); valore.trim(); cf.set(valore); cf.put_paragraph(valore); @@ -774,7 +764,7 @@ TDistinta_form::TDistinta_form(const char* name, TRelation *rel): TForm(), _firm // setta l'ordinamento del TSordet_cursor del form void TDistinta_form::set_order(const char tipo) { - TString ordine; + const char* ordine = ""; // ordinamento secondo la data di scadenza dell'effetto if (tipo == 'S') ordine = "DATASCAD|TIPODIST|NDIST|NRIGADIST"; @@ -789,7 +779,8 @@ void TDistinta_form::set_order(const char tipo) // distruttore classe TDistinta_form TDistinta_form::~TDistinta_form() { - if (_cursor) delete _cursor; + if (_cursor) + delete _cursor; } // gestione dei messaggi estesi nei campi @@ -1015,16 +1006,15 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr if (in=="RAGSOC") { const TRectype& ditte = app().firm_rel().curr(); - const TString ragsoc = ditte.get("RAGSOC"); + const TString& ragsoc = ditte.get("RAGSOC"); in = s.get(); if (in == "0") { valore.cut(0); valore = ragsoc.left(30); valore.trim(); - TString str = ragsoc.right(20); - str.trim(); - valore << " " << str; + valore << ' ' << ragsoc.mid(30); + valore.trim(); } else { @@ -1048,7 +1038,7 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr // dove: è uno delle opzioni seguenti: // "1" la ragione sociale andrà ad occupare più campi, primo segmento // "2" la ragione sociale andrà ad occupare più campi, secondo segmento - const bool pick_normal = cur.relation()->lfile(LF_CFVEN).get_int(CFV_CODINDEFF) == 0; + const bool pick_normal = cur.curr(LF_CFVEN).get_int(CFV_CODINDEFF) == 0; TRectype& clifo_1 = cur.curr(LF_CLIFO); TRectype& clifo_2 = cur.curr(pick_normal ? LF_CLIFO : LF_INDSP); @@ -1125,13 +1115,8 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr { // gestione dei campi relativi alla banca d'appoggio dell'effetto // sintassi: _BANCA - TRectype & ban = cur.curr(-401); - valore.cut(0); - valore << ban.get("S0"); - valore.trim(); - ban = cur.curr(-402); - valore << " " << ban.get("S0"); - valore.trim(); + valore = cur.curr(-401).get("S0"); + valore << ' ' << cur.curr(-402).get("S0"); } else if (code == "_FATT") { @@ -1140,8 +1125,8 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr // dove: è uno delle opzioni seguenti: // "1" i dati della fattura andranno ad occupare più campi, primo segmento // "2" i dati della fattura andranno ad occupare più campi, secondo segmento - TLocalisamfile &eff = cur.file(); - TEffetto effetto = eff.curr(); + //TLocalisamfile &eff = cur.file(); + TEffetto effetto = cur.curr(); long num = effetto.numero(); TString descfatt; if (tracciato_setif()) @@ -1208,7 +1193,7 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr real importo = cur.curr(LF_EFFETTI).get(EFF_IMPORTO); if (_codice_moneta == 'E') - importo *= 100.0; + importo *= CENTO; importo.round(0); add_tot_importi(importo); valore = importo.string(13,0); diff --git a/ef/ef0500.h b/ef/ef0500.h index f445a44da..90eee439a 100755 --- a/ef/ef0500.h +++ b/ef/ef0500.h @@ -9,9 +9,7 @@ #define F_NUMBERRIGA 103 #define F_TIPOEMIS 104 #define F_EMIS 105 -#define F_UNITA 106 -#define F_FOR_OUT 107 -#define F_NCOPIE 108 +#define F_PATH 106 #define F_TIPORD 109 #define F_TIPOST 110 #define F_DATAEMIS 111 diff --git a/ef/ef0500a.uml b/ef/ef0500a.uml index 5d8ef10d7..2d72938d2 100755 --- a/ef/ef0500a.uml +++ b/ef/ef0500a.uml @@ -1,4 +1,3 @@ -// DEFINIZIONE CAMPI MASCHERA PER LA EMISSIONE DEGLI EFFETTI #include "ef0500.h" PAGE "Emissione Effetti e Distinte" -1 -1 76 15 @@ -6,7 +5,7 @@ PAGE "Emissione Effetti e Distinte" -1 -1 76 15 RADIOBUTTON F_TIPOEMIS 39 BEGIN PROMPT 2 0 " " - ITEM "1|Emissione su floppy" + ITEM "1|Emissione su file" MESSAGE DISABLE,2@|DISABLE,4@|DISABLE,5@ MESSAGE ENABLE,1@|SHOW,F_NOMEFILE ITEM "2|Emissione su moduli cartacei" @@ -45,7 +44,6 @@ END NUMBER F_NUMBER 5 BEGIN PROMPT 43 6 "Numero Distinta " - FLAGS "R" KEY 4 USE LF_EFFETTI KEY 4 SELECT (NRIGADIST=1)&&((TIPOCF=#F_TIPOCF)||((TIPOCF="")&&(#F_TIPOCF="C"))) INPUT NDIST F_NUMBER @@ -61,6 +59,7 @@ BEGIN OUTPUT F_TIPODIST TIPODIST OUTPUT F_NUMBERRIGA NRIGADIST CHECKTYPE NORMAL + ADD RUN ef0 -2 END /* CAMPO NASCOSTO CHE SERVE PER LA RICERCA */ @@ -72,23 +71,11 @@ BEGIN FLAGS "D" END -LIST F_UNITA 9 +STRING F_PATH 80 50 BEGIN - PROMPT 2 6 "Unità di output " - ITEM "a|Drive A" - ITEM "b|Drive B" + PROMPT 2 7 "Percorso di output " GROUP 1 -END - -LIST F_FOR_OUT 7 -BEGIN - PROMPT 43 6 "Formato unità output " - ITEM "1|360 Kb" - ITEM "2|720 Kb" - ITEM "3|1,2 Mb" - ITEM "4|1,44 Mb" - GROUP 1 - FLAGS "H" + CHECKTYPE REQUIRED END LIST F_EMIS 10 @@ -101,14 +88,6 @@ BEGIN GROUP 2 END -NUMBER F_NCOPIE 3 -BEGIN - PROMPT 2 9 "Numero copie " - NUM_EXPR {(#THIS_FIELD >= 0)} - WARNING "Il numero di copie deve essere positivo" - GROUP 2 -END - LIST F_TIPORD 14 BEGIN PROMPT 2 10 "Tipo Ordinamento " @@ -145,17 +124,12 @@ END BUTTON DLG_OK 10 2 BEGIN - PROMPT -13 -1 "" -END - -BUTTON DLG_CANCEL 10 2 -BEGIN - PROMPT -23 -1 "" + PROMPT -12 -1 "" END BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -33 -1 "" + PROMPT -22 -1 "" END ENDPAGE diff --git a/ef/ef0700.cpp b/ef/ef0700.cpp index bd2118b73..808ce3c8c 100755 --- a/ef/ef0700.cpp +++ b/ef/ef0700.cpp @@ -12,6 +12,7 @@ protected: virtual bool user_create() ; virtual void init_query_insert_mode(TMask& m) ; virtual void init_insert_mode(TMask& m) ; + virtual void init_modify_mode(TMask& m) ; virtual void init_query_mode (TMask&); public: @@ -54,6 +55,14 @@ void TBnp_table_app::init_insert_mode(TMask& m) } } +void TBnp_table_app::init_modify_mode(TMask& m) +{ + if (get_tabname() == "BNP") + { + m.efield(F_IBAN_STATO).validate(K_TAB); + } +} + void TBnp_table_app::init_query_mode(TMask& m) { TTable_application::init_query_mode(m); diff --git a/ef/ef0a00.cpp b/ef/ef0a00.cpp index 1a2163680..a271ce0ea 100755 --- a/ef/ef0a00.cpp +++ b/ef/ef0a00.cpp @@ -569,21 +569,34 @@ void TPE_mask::save_rate() key.add(row->get(sheet.cid2index(F_RATA))); const TRectype& scad = cache().get(LF_SCADENZE, key); - TString16 abi = scad.get(SCAD_CODABI); - TString16 cab = scad.get(SCAD_CODCAB); + TString8 abi = scad.get(SCAD_CODABI); + TString8 cab = scad.get(SCAD_CODCAB); + + key = get(F_TIPOCF); + key.add(row->get(sheet.cid2index(F_CODCF))); + const TRectype& clifo = cache().get(LF_CLIFO, key); + TString80 iban = clifo.get(CLI_IBAN); + if (atol(cab) == 0L) { - key = get(F_TIPOCF); - key.add(row->get(sheet.cid2index(F_CODCF))); - const TRectype& clifo = cache().get(LF_CLIFO, key); abi = clifo.get(CLI_CODABI); cab = clifo.get(CLI_CODCAB); } + else + { + if (iban.starts_with("IT")) + { + TString16 abicab; abicab << abi << cab; + if (iban.mid(5, 10) != abicab) + iban.cut(0); + } + } TEffetto& eff = distinta[rigadist-1]; eff.put(EFF_DATASCAD, scad.get(SCAD_DATASCAD)); eff.put(EFF_CODABI, abi); eff.put(EFF_CODCAB, cab); + eff.put(EFF_IBAN, iban); } TEffetto& eff = distinta[rigadist-1]; @@ -702,9 +715,9 @@ bool TPE_mask::on_sheet_event(TOperable_field& o, TField_event e, long jolly) { case se_query_add: { - TOperable_field& baggio = (TOperable_field&)field(F_AGGIORNA); - if (baggio.active()) - on_field_event(baggio, fe_button, 0); + TOperable_field& ronaldo = (TOperable_field&)field(F_AGGIORNA); + if (ronaldo.active()) + on_field_event(ronaldo, fe_button, 0); } return FALSE; case se_notify_modify: diff --git a/ef/f31.dir b/ef/f31.dir index bc79c49d1..1cefcdab4 100755 --- a/ef/f31.dir +++ b/ef/f31.dir @@ -1,3 +1,3 @@ 31 0 -$effetti|3|6|181|34|Effetti|NEFF|| +$effetti|3|6|215|34|Effetti|NEFF|| diff --git a/ef/f31.trr b/ef/f31.trr index 5cbfcf1fa..6975ec5f1 100755 --- a/ef/f31.trr +++ b/ef/f31.trr @@ -1,5 +1,5 @@ 31 -31 +32 NPROGTR|3|7|0|Numero progressivo effetto DATASCAD|5|8|0|Data di scadenza TIPOPAG|2|1|0|Tipo pagamento @@ -31,6 +31,7 @@ DISRIBAEST|8|1|0|Distinta RIBA estratta IMPORTO|4|18|3|Importo effetto IMPORTOVAL|4|18|3|Importo effetto in valuta SPESE|4|18|3|Spese bancarie distinta +IBAN|1|34|0|Codice IBAN di appoggio 4 NPROGTR| CODCF+NPROGTR| diff --git a/ef/riba.ini b/ef/riba.ini index 634c01c6a..02ca18b0a 100755 --- a/ef/riba.ini +++ b/ef/riba.ini @@ -93,13 +93,11 @@ POSITION(7)=113 LENGTH(7)=1 MESSAGE(7) = _CODMON - NAME(8)=FILLER TYPE(8)=FISSO POSITION(8)=114 LENGTH(8)=6 - [RECORD 14] NAME(0) = CAMPO BLANK TYPE(0) = FISSO @@ -207,6 +205,52 @@ POSITION(19) = 119 LENGTH(19) = 1 MESSAGE(19) = _CODMON +[RECORD 16] +NAME(0) = CAMPO BLANK +TYPE(0) = FISSO +POSITION(0) = 0 +LENGTH(0) = 1 + +NAME(1) = TIPO RECORD +POSITION(1) = 1 +LENGTH(1) = 2 +MESSAGE(1) = _FISSO,!16 + +NAME(2) = NUMERO PROGRESSIVO RIBA +TYPE(2) = NUMERO +POSITION(2) = 3 +LENGTH(2) = 7 +MESSAGE(2) = _NRIBA,!NUM + +NAME(3) = Codice IBAN +TYPE(3) = STRINGA +POSITION(3) = 10 +LENGTH(3) = 34 +FIELD(3) = 403@->S3 + +[RECORD 17] +NAME(0) = CAMPO BLANK +TYPE(0) = FISSO +POSITION(0) = 0 +LENGTH(0) = 1 + +NAME(1) = TIPO RECORD +POSITION(1) = 1 +LENGTH(1) = 2 +MESSAGE(1) = _FISSO,!17 + +NAME(2) = NUMERO PROGRESSIVO RIBA +TYPE(2) = NUMERO +POSITION(2) = 3 +LENGTH(2) = 7 +MESSAGE(2) = _NRIBA,!NUM + +NAME(3) = Codice IBAN +TYPE(3) = STRINGA +POSITION(3) = 10 +LENGTH(3) = 34 +FIELD(3) = 31->IBAN + [RECORD 20] NAME(0)=CAMPO BLANK TYPE(0)=FISSO