diff --git a/ef/ef0100.h b/ef/ef0100.h index a73197075..be61b387e 100755 --- a/ef/ef0100.h +++ b/ef/ef0100.h @@ -41,6 +41,8 @@ #define F_DCUP 235 #define F_CIG 236 #define F_DCIG 237 +#define F_CONTSEP 238 +#define F_DESCONTSEP 239 #define F_IBAN 250 #define F_IBAN_STATO 251 diff --git a/ef/ef0100a.uml b/ef/ef0100a.uml index 317ff6a64..007cda29a 100755 --- a/ef/ef0100a.uml +++ b/ef/ef0100a.uml @@ -543,6 +543,30 @@ BEGIN FIELD EFFCOMP END +STRING F_CONTSEP 6 +BEGIN + PROMPT 1 22 "Contab. separata " + USE &NPENT + INPUT CODTAB F_CONTSEP + DISPLAY "Codice@6" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CONTSEP CODTAB + OUTPUT F_DESCONTSEP S0 + CHECKTYPE NORMAL + FIELD CONTSEP +END + +STRING F_DESCONTSEP 50 30 +BEGIN + PROMPT 40 22 "" + USE &NPENT KEY 2 + INPUT S0 F_DESCONTSEP + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@6" CODTAB + COPY OUTPUT F_CONTSEP + CHECKTYPE NORMAL +END + ENDPAGE PAGE "Cessionari" 0 -1 0 19 diff --git a/ef/ef0800.cpp b/ef/ef0800.cpp index c34d56daa..b4ae55fb4 100755 --- a/ef/ef0800.cpp +++ b/ef/ef0800.cpp @@ -110,7 +110,7 @@ class TContabilizzazione_effetti_app : public TSkeleton_application protected: // TApplication // Compila la testata del movimento - void compile_head_mov(); + void compile_head_mov(const TString & contsep); // Compila la riga di partita void compile_riga_partita(TRiga_partite& riga, const TEffetto& effetto, const TRectype& riga_effetto, int numrig); // Compila la riga di pagamento @@ -150,7 +150,7 @@ protected: // TApplication // Visualizza l'ultimo errore rilevato void display_error(); // Contabilizza l'effetto corrente - void contabilize_bill(const char tipo, const long numero); + void contabilize_bill(const char tipo, const long numero, const TString & key = EMPTY_STRING); // Contabilizza gli effetti void contabilize(); // costruisce lo sheet delle distinte @@ -811,7 +811,7 @@ char TContabilizzazione_effetti_app::sezione() const return sezione; } -void TContabilizzazione_effetti_app::compile_head_mov() +void TContabilizzazione_effetti_app::compile_head_mov(const TString & contsep) { CHECK(_caus,"Causale non allocata"); @@ -864,6 +864,7 @@ void TContabilizzazione_effetti_app::compile_head_mov() mov.put(MOV_TIPODOC,_caus->tipo_doc()); mov.put(MOV_CODCAUS,_caus->codice()); mov.put(MOV_TIPOMOV,_caus->tipomov()); + mov.put(MOV_CONTSEP, contsep); if (is_true_value(codval)) { @@ -1325,7 +1326,7 @@ int TContabilizzazione_effetti_app::sort_eff(TRecord_array& rows) return rows.rows(); } -void TContabilizzazione_effetti_app::contabilize_bill(const char tipo, const long numero) +void TContabilizzazione_effetti_app::contabilize_bill(const char tipo, const long numero, const TString & key) { TDistinta& distinta = *_distinta; TLocalisamfile& mov = _movimento->lfile(); @@ -1394,7 +1395,7 @@ void TContabilizzazione_effetti_app::contabilize_bill(const char tipo, const lon const int items = distinta.items(); // Perche' sul file effetti il numero riga distinta e' un long ?? // compila la testata - compile_head_mov(); + compile_head_mov(key); // _cur_dist_row e' un int sebbene su file sia un long: TArray::items() ritorna un int!! for (_cur_dist_row = 0; _cur_dist_rowrow(j); const char tipo = t.get_char(1); const long numero = t.get_long(2); - contabilize_bill(tipo,numero); + if (ini_get_bool(CONFIG_DITTA, "ef", "ContSep")) + { + _distinta->read(tipo,numero); + + const int items = _distinta->items(); + TAssoc_array codcs; + + for (int i = 0; i < items; i++) // scorre le righe della distinta (effetti) + { + const TEffetto& eff = (*_distinta)[i]; + const TString16 key = eff.get(EFF_CONTSEP); + codcs.add(key, key); + } + FOR_EACH_ASSOC_STRING(codcs, obj, key, cod) + contabilize_bill(tipo,numero, key); + } + else + contabilize_bill(tipo,numero); if (!good()) display_error(); } diff --git a/ef/ef0900a.h b/ef/ef0900a.h index c32ca5793..3a54e5754 100755 --- a/ef/ef0900a.h +++ b/ef/ef0900a.h @@ -5,6 +5,7 @@ #define F_CODSIA 105 #define F_DESCCAUINC 106 #define F_DESCCAUPAG 107 +#define F_CONTSEP 108 #define F_TRANS_G 111 #define F_TRANS_C 112 diff --git a/ef/ef0900a.uml b/ef/ef0900a.uml index 3c067577a..7d4f799b0 100755 --- a/ef/ef0900a.uml +++ b/ef/ef0900a.uml @@ -6,7 +6,7 @@ ENDPAGE PAGE "Parametri effetti" 0 2 0 0 -GROUPBOX DLG_NULL 78 10 +GROUPBOX DLG_NULL 78 11 BEGIN PROMPT 1 2 "@bContabilizzazione" END @@ -133,6 +133,12 @@ BEGIN ADD RUN CG0 -0 END +BOOLEAN F_CONTSEP +BEGIN + PROMPT 2 11 "Contabilizzazione per contabilità separata" + FIELD ContSep +END + ENDPAGE ENDMASK diff --git a/ef/ef0a00.cpp b/ef/ef0a00.cpp index aa91463e5..9b0b9bde9 100755 --- a/ef/ef0a00.cpp +++ b/ef/ef0a00.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include "../cg/cgsaldac.h" #include "../ef/ef0301.h" @@ -45,7 +46,7 @@ public: void update_total(); virtual bool on_key(KEY key); - TRectype& new_row_effetto(TDistinta& dist, char tipocf, long codcf, const TString & cup, const TString & cig, + TRectype& new_row_effetto(TDistinta& dist, char tipocf, long codcf, const TString & cup, const TString & cig, const TString & contsep, const TDate & datapag, int& rigadist, int& rigaeff) const; long get_free_num() const; void save_rate(); @@ -552,7 +553,7 @@ bool TPE_mask::fill_distinta(bool clear_all) return full; } -TRectype& TPE_mask::new_row_effetto(TDistinta& dist, char tipocf, long codcf, const TString & cup, const TString & cig, +TRectype& TPE_mask::new_row_effetto(TDistinta& dist, char tipocf, long codcf, const TString & cup, const TString & cig, const TString & contsep, const TDate & datapag, int& rigadist, int& rigaeff ) const { TString16 codice; codice << tipocf << '|' << codcf; @@ -573,6 +574,12 @@ TRectype& TPE_mask::new_row_effetto(TDistinta& dist, char tipocf, long codcf, co const TString & eff_cup = eff.get(EFF_CUP); found = (cup == eff_cup) && (cig == eff.get(EFF_CIG)); + } + if (found && main_app().has_module(NPAUT)) + { + const TString & eff_contsep = eff.get(EFF_CONTSEP); + + found &= (contsep == eff_contsep); } if (found) { @@ -595,6 +602,7 @@ TRectype& TPE_mask::new_row_effetto(TDistinta& dist, char tipocf, long codcf, co neweff->put(EFF_DATACAMBIO, get(F_DATACAMBIO)); neweff->put(EFF_CUP, cup); neweff->put(EFF_CIG, cig); + neweff->put(EFF_CONTSEP, contsep); } rigaeff = neweff->rows_r()+1; return neweff->row_r(rigaeff, TRUE); @@ -632,14 +640,16 @@ bool TPE_mask::check_bank(TEffetto& effetto, TLog_report& log) const effetto.put(EFF_CODCAB, cab); effetto.put(EFF_IBAN, iban); - if ((tipocf == 'C' || tipopag != 9) && (real::is_null(abi) || real::is_null(cab))) - { - TString msg; - msg.format(FR("Impossibile determinare ABI/CAB del %s sull'effetto %ld"), - (const char*)key, effetto.get_long(EFF_NPROGTR)); - log.log(2, msg); - return false; - } + + if (tipocf == 'C' && tipopag == 3) + if (real::is_null(abi) || real::is_null(cab)) + { + TString msg; + msg.format(FR("Impossibile determinare ABI/CAB del %s sull'effetto %ld"), + (const char*)key, effetto.get_long(EFF_NPROGTR)); + log.log(2, msg); + return false; + } if ((tipocf == 'F' && tipopag == 9) && iban.blank()) { @@ -721,13 +731,15 @@ void TPE_mask::save_rate() if (!datapag.ok()) datapag = attivo ? scad.get(SCAD_DATASCAD) : get(F_DATADIST); const TString cup = row->get(sheet.cid2index(F_CUP)); + const TRectype& mov = cache().get(LF_MOV, part.get(PART_NREG)); const TString cig = row->get(sheet.cid2index(F_CIG)); + const TString16 contsep = mov.get(MOV_CONTSEP); if (rigaeff <= 0) { const char tipocf = get(F_TIPOCF)[0]; const long codcf = row->get_long(sheet.cid2index(F_CODCF)); - - TRectype& reff = new_row_effetto(distinta, tipocf, codcf, cup, cig, datapag, rigadist, rigaeff); + TRectype& reff = new_row_effetto(distinta, tipocf, codcf, cup, cig, contsep, datapag, rigadist, rigaeff); + reff.put(REFF_ANNO, row->get(sheet.cid2index(F_ANNO))); reff.put(REFF_NUMPART, row->get(sheet.cid2index(F_PARTITA))); reff.put(REFF_NRIGA, row->get(sheet.cid2index(F_RIGA))); @@ -751,10 +763,11 @@ void TPE_mask::save_rate() eff.put(EFF_DATASCAD, datapag); eff.put(EFF_CUP, cup); eff.put(EFF_CIG, cig); + eff.put(EFF_CONTSEP, contsep); check_bank(eff, log); // Cerca di sistemare ABI/CAB/IBAN - TRectype& reff = eff.row_r(rigaeff); + const real oldimp = reff.get(REFF_IMPORTO); const real oldimpval = reff.get(REFF_IMPORTOVAL); reff.put(REFF_IMPORTO, imp); diff --git a/ef/f31.dir b/ef/f31.dir index 7d07dbab4..0e027540a 100755 --- a/ef/f31.dir +++ b/ef/f31.dir @@ -1,3 +1,3 @@ 31 0 -$effetti|0|0|243|0|Effetti||| +$effetti|0|0|249|0|Effetti||| diff --git a/ef/f31.trr b/ef/f31.trr index 8a0d9825c..f25bc01ce 100755 --- a/ef/f31.trr +++ b/ef/f31.trr @@ -1,5 +1,5 @@ 31 -36 +37 NPROGTR|3|7|0|Numero progressivo effetto DATASCAD|5|8|0|Data di scadenza TIPOPAG|2|1|0|Tipo pagamento @@ -36,6 +36,7 @@ IBAN|1|34|0|Codice IBAN di appoggio DSCVAL|8|1|0|Data di scadenza intesa come data valuta beneficiario CUP|1|15|0|Codice Unico di Progetto CIG|1|10|0|Codice Identificativo gara +CONTSEP|1|6|0|Contabilita' separata 4 NPROGTR| TIPOCF+CODCF+NPROGTR| diff --git a/include/effetti.h b/include/effetti.h index c490dac1f..609dff3ed 100755 --- a/include/effetti.h +++ b/include/effetti.h @@ -39,5 +39,6 @@ #define EFF_DSCVAL "DSCVAL" #define EFF_CUP "CUP" #define EFF_CIG "CIG" +#define EFF_CONTSEP "CONTSEP" #endif