diff --git a/ve/ve6100.cpp b/ve/ve6100.cpp index 1928ffc86..bdc723ab6 100755 --- a/ve/ve6100.cpp +++ b/ve/ve6100.cpp @@ -93,15 +93,9 @@ bool TContabilizzazione_app::handle_data_range(TMask_field& f, KEY k) TDate da(m.get_date(F_DATA_INI)); TDate a(m.get_date(F_DATA_FIN)); m.field(F_DATA_REG).set_dirty(); - //if (a == botime || da == botime) return TRUE; - if (a < da) - { - f.error_box("La data di inizio deve essere minore della data di fine."); - return FALSE; - } if ((a - da) > 15) { - f.error_box("L'intervallo tra le date non puo' eccedere i 15 giorni."); + f.error_box(TR("L'intervallo tra le date non puo' eccedere i 15 giorni.")); return FALSE; } if (f.dlg() == F_DATA_FIN) @@ -127,12 +121,12 @@ bool TContabilizzazione_app::handle_data_reg(TMask_field& f, KEY k) TDate da(m.get_date(F_DATA_INI)); if ((data_reg - da) > 15) { - f.error_box("L'intervallo tra la data di registrazione e la data di inizio non puo' eccedere i 15 giorni."); + f.error_box(TR("L'intervallo tra la data di registrazione e la data di inizio non puo' eccedere i 15 giorni.")); return FALSE; } if (data_reg < da) { - f.error_box("La data di registrazione non puo' essere minore della data di inizio."); + f.error_box(TR("La data di registrazione non puo' essere minore della data di inizio.")); return FALSE; } } @@ -297,15 +291,8 @@ void TContabilizzazione_app::contabilize() cont.set_auto(_auto_data); // Setta il flag per il settaggio automatico della data di registrazione del movimento - da.put("DATADOC",_data_ini); - da.put("PROVV","D"); - da.put("ANNO",year_from); - a.put("DATADOC",_data_fine); - a.put("PROVV","D"); - a.put("ANNO",year_to); - - filt_expr << "("; for (long i=0L; ichecked(i)) // Costruisce una espressione sul codice numerazione: "CODNUM="x0" || CODNUM="x1" || ..." { codnum = _num_sheet->row(i).get(1); @@ -313,35 +300,46 @@ void TContabilizzazione_app::contabilize() filt_expr << codnum << "\")||"; nums.add(codnum); } - + } filt_expr.rtrim(2); - filt_expr << ")"; + + da.put(DOC_DATADOC,_data_ini); + da.put(DOC_PROVV,"D"); + da.put(DOC_ANNO,year_from); + a.put(DOC_DATADOC,_data_fine); + a.put(DOC_PROVV,"D"); + a.put(DOC_ANNO,year_to); + + // Se ho una sola numerazione ottimizzo la setregion! + if (nums.items() == 1) + { + da.put(DOC_CODNUM, nums); + a.put(DOC_CODNUM, nums); + filt_expr.cut(0); // Il filtro diventa inutile + } + // Cursore complessivo con limiti di data (chiave 3). Viene sfruttata l'ottimizzazione // sulla costruzione dei cursori nel caso i campi presenti nell'espressione siano campi // chiave, nel nostro caso CODNUM soddisfa i requisiti. TCursor doc_cur(&doc_rel,filt_expr,3,&da,&a); - const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato - if (cur_items == 0) - { - warning_box("Non vi sono documenti da contabilizzare per le numerazioni selezionate."); - return; - } - doc_cur.freeze(); - - msg = "Selezione documenti dal "; - msg << _data_ini.string() << " al "; - msg << _data_fine.string(); - - TLista_documenti lista_in,lista_out; - if (cur_items > 0) // if inutile tanto per provocare la chiusura della TProgind + const TRecnotype cur_items = doc_cur.items(); + if (cur_items > 0) { + TLista_documenti lista_in,lista_out; + + doc_cur.freeze(); + msg = "Selezione documenti dal "; + msg << _data_ini.string() << " al "; + msg << _data_fine.string(); TProgind p(cur_items,msg,FALSE,TRUE); const TRectype& cur_rec = doc_cur.curr(); + + // Scorre tutti i documenti che rientrano nell'intervallo selezionato for (doc_cur = 0; doc_cur.pos() < cur_items; ++doc_cur) { p.addstatus(1); // controlla che il tipo documento e lo stato siano coerenti con la ELD selezionata - if (nums.find(cur_rec.get("CODNUM")) >= 0 && doc_tipo_stato_ok(cur_rec)) + if (nums.get_pos(cur_rec.get("CODNUM")) >= 0 && doc_tipo_stato_ok(cur_rec)) { TDocumento* doc = new TDocumento; if (doc->read(doc_cur.curr()) == NOERR) // legge il documento @@ -350,10 +348,13 @@ void TContabilizzazione_app::contabilize() delete doc; } } + cont.elabora(lista_in,lista_out,_data_reg); + if (cont.processed_docs() > 0L) + message_box(FR("Totale documenti contabilizzati: %ld"), cont.processed_docs()); } - cont.elabora(lista_in,lista_out,_data_reg); - if (cont.processed_docs() > 0L) - message_box("Totale documenti contabilizzati: %ld", cont.processed_docs()); + else + warning_box(TR("Non vi sono documenti da contabilizzare per le numerazioni selezionate.")); + xvt_statbar_set(""); } diff --git a/ve/ve6100a.uml b/ve/ve6100a.uml index 1a8bfe069..3cc5d3ed6 100755 --- a/ve/ve6100a.uml +++ b/ve/ve6100a.uml @@ -35,15 +35,16 @@ END DATE F_DATA_INI BEGIN PROMPT 2 3 "Inizio " - VALIDATE NOT_EMPTY_FUNC + CHECKTYPE REQUIRED WARNING "La data di inizio intervallo e' obbligatoria" END DATE F_DATA_FIN BEGIN PROMPT 2 4 "Fine " - VALIDATE NOT_EMPTY_FUNC - WARNING "La data di fine intervallo e' obbligatoria" + CHECKTYPE REQUIRED + WARNING "La data di fine intervallo deve essere successiva a quella di inizio" + VALIDATE DATE_CMP_FUNC >= F_DATA_INI END BOOLEAN F_DATA_AUTO diff --git a/ve/velib.h b/ve/velib.h index c7fe9c620..42e5d1a09 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -1235,7 +1235,6 @@ class TGenerazione_effetti : public TElaborazione // velib04c *_cfven, *_tab, *_occas; - TTable *_cpg; // tabella condizioni di pagamento TArray _effetti_array;//Array di effetti (TEffetto) da scrivere protected: // Visualizza l'ultimo errore rilevato diff --git a/ve/velib04b.cpp b/ve/velib04b.cpp index fc905815d..5d73f5f94 100755 --- a/ve/velib04b.cpp +++ b/ve/velib04b.cpp @@ -3734,7 +3734,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& /* TPrinter& p = printer(); p.links().add("Movimento Prima Nota |b|w", 0); p.setlinkhandler(link_handler); - _viswin = new TViswin(NULL, "Contabilizzazione documenti", FALSE, TRUE, TRUE); + _viswin = new TViswin(NULL, TR("Contabilizzazione documenti"), FALSE, TRUE, TRUE); _viswin->open_modal(); const clock_t start_time = clock(); @@ -3758,8 +3758,8 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& /* TDocumento& doc = doc_in[i]; - msg = "Elaborazione documento "; - msg << doc.anno() << ' '; + msg = TR("Elaborazione del documento"); + msg << ' ' << doc.anno() << ' '; msg << doc.numerazione() << '/'; msg << doc.numero(); _viswin->add_line(msg); diff --git a/ve/velib04c.cpp b/ve/velib04c.cpp index b22fbe303..b46db0f65 100755 --- a/ve/velib04c.cpp +++ b/ve/velib04c.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -34,7 +33,6 @@ TGenerazione_effetti::TGenerazione_effetti(const char* cod) _tab = new TLocalisamfile(LF_TAB); _efffile = new TLocalisamfile(LF_EFFETTI); _refffile = new TLocalisamfile(LF_REFFETTI); - _cpg = new TTable("%CPG"); _can_write = TRUE; _error = no_error; @@ -59,7 +57,6 @@ TGenerazione_effetti::TGenerazione_effetti(const TRectype& rec) _tab = new TLocalisamfile(LF_TAB); _efffile = new TLocalisamfile(LF_EFFETTI); _refffile = new TLocalisamfile(LF_REFFETTI); - _cpg = new TTable("%CPG"); _can_write = TRUE; _error = no_error; @@ -77,7 +74,6 @@ TGenerazione_effetti::~TGenerazione_effetti() delete _efffile; delete _refffile; delete _tab; - delete _cpg; } void TGenerazione_effetti::display_error(TDocumento& doc) @@ -291,8 +287,8 @@ long TGenerazione_effetti::group_bills(TAssoc_array& group_array) // Ricalcola le scadenze codpag = doc.get(DOC_CODPAG); - _cpg->put("CODTAB",codpag); - if (_cpg->read()!= NOERR) + const TRectype& cpg = cache().get("%CPG", codpag); + if (cpg.empty()) { _error = codpag_error; display_error(doc); @@ -546,10 +542,9 @@ void TGenerazione_effetti::generate_bill(TDocumento& doc) // bill in inglese sig if (!doc.is_nota_credito()) // I documenti immessi come note di credito non generano effetti...(che senso hanno gli effetti con importi negativi?) { - TString16 codpag(doc.get(DOC_CODPAG)); - - _cpg->put("CODTAB",codpag); - if (_cpg->read()!= NOERR) + const TString16 codpag(doc.get(DOC_CODPAG)); + const TRectype& cpg = cache().get("%CPG", codpag); + if (cpg.empty()) { _error = codpag_error; return; @@ -668,8 +663,6 @@ bool TGenerazione_effetti::elabora(TLista_documenti& doc_in, TLista_documenti& d _error = no_error; _total_bills = 0L; - - _cpg->setkey(1); // Setta per sicurezza la chiave 1 nel caso l'elaborazione sia invocata da VE0 const int items = doc_in.items(); // Numero dei documenti in questa elaborazione for (int i = 0; i < items ; i++) // Scorriamo tutti i documenti nella lista {