From c5aae552a64f9fa64131309e21284988507c216d Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 23 Sep 2003 14:38:38 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GF20080 E' necessario prevedere una voce di menù, nella gestione degli effetti attivi che permetta di togliere i flags di contabilizzato agli effetti presenti nella distinta che si vuole ricontabilizzare ( nella pagina parametri della voce di menù aggiornamento effetti). Ciò allo scopo di poter ricontabilizzare la distinta attiva in questione. Sarebbe utile che la procedura segnalasse anche il n° di movimento da eliminare in prima nota relativo quella distinta che risulta già contabilizzata e che si vuole ricontabilizzare e che indicasse inoltre se eventualmente il movimento è già stato, o meno, stampato su bollato. GF20082 I due tasti di scorrimento sul primo e ultimo record non funzionano. git-svn-id: svn://10.65.10.50/trunk@11430 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ef/ef0300.cpp | 73 +++++++++++++++++++++++++++++++++++++++++--------- ef/ef0300.h | 3 ++- ef/ef0300a.uml | 9 ++++++- ef/ef0800.cpp | 14 ++++++---- 4 files changed, 79 insertions(+), 20 deletions(-) diff --git a/ef/ef0300.cpp b/ef/ef0300.cpp index 51dc56575..d687f73af 100755 --- a/ef/ef0300.cpp +++ b/ef/ef0300.cpp @@ -33,6 +33,7 @@ protected: virtual bool remove(); virtual TMask* get_mask(int mode) {return _msk;} virtual bool changing_mask(int mode) {return FALSE;} + virtual bool has_filtered_cursor() const { return true; } static bool tipodist_handler(TMask_field& f, KEY k); static bool importo_handler(TMask_field& f, KEY k); static bool imp_aut_handler(TMask_field& f, KEY k); @@ -42,6 +43,7 @@ protected: static bool annulla_handler(TMask_field& f, KEY k); static bool data_handler(TMask_field& f, KEY k); static bool ordina_handler(TMask_field& f, KEY k); + static bool uncontabilize_handler(TMask_field& f, KEY k); static void calcola_totale(); static void calcola(); static void aggiungi(); @@ -78,29 +80,33 @@ void TVariazione_distinte::init_query_mode(TMask&) _msk->reset(F_TOTIMP); _msk->enable(F_TIPOPAG); _msk->enable(F_TIPOCF); + _msk->hide(F_UNCONTABIL); } // quando si va in insert mode resetta i campi della maschera relativi // ai totali, abilita i campi relativi alla valuta e disabilta i campi // relativi alla chiave di ricerca -void TVariazione_distinte::init_insert_mode(TMask&) +void TVariazione_distinte::init_insert_mode(TMask& m) { - _msk->reset(F_TOTIMP); - _msk->enable(F_CODVAL); - _msk->disable(F_NUMBER); - _msk->disable(F_TIPODIST); - _msk->enable(F_TIPOPAG); - _msk->enable(F_TIPOCF); + m.reset(F_TOTIMP); + m.enable(F_CODVAL); + m.disable(F_NUMBER); + m.disable(F_TIPODIST); + m.enable(F_TIPOPAG); + m.enable(F_TIPOCF); } // quando si va in modify mode disabilta i campi relativi alla chiave // di ricerca -void TVariazione_distinte::init_modify_mode(TMask&) +void TVariazione_distinte::init_modify_mode(TMask& m) { - _msk->disable(F_NUMBER); - _msk->disable(F_TIPODIST); - _msk->disable(F_TIPOPAG); - _msk->disable(F_TIPOCF); + m.disable(F_NUMBER); + m.disable(F_TIPODIST); + m.disable(F_TIPOPAG); + m.disable(F_TIPOCF); + + const bool cont = _distinta->contabilizzata(); + m.show(F_UNCONTABIL, cont); } // ritorna il prossimo numero di distinta valido @@ -190,7 +196,7 @@ int TVariazione_distinte::read(TMask& m) if (err == NOERR) { //resetto l'array che contiene gli effetti nella distinta - err = _distinta->reset(); + _distinta->reset(); // legge la distinta dal record corrente della relazione err = _distinta->read(_rel->curr()); if (err == NOERR) @@ -394,6 +400,7 @@ bool TVariazione_distinte::user_create() set_search_field(F_NUMBER);//setto il campo di ricerca della distinta _msk->set_handler(F_TIPODIST, tipodist_handler); _msk->set_handler(F_IMPBUTTON, importo_handler); + _msk->set_handler(F_UNCONTABIL, uncontabilize_handler); _m2->set_handler(F_TOTIMPDIST, imp_aut_handler); _m2->set_handler(DLG_OK, conferma_handler); _m2->set_handler(DLG_CANCEL, annulla_handler); @@ -778,6 +785,46 @@ bool TVariazione_distinte::ordina_handler(TMask_field& f, KEY k) return TRUE; } +bool TVariazione_distinte::uncontabilize_handler(TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + TMask& m = f.mask(); + const char tipodist = m.get(F_TIPODIST)[0]; + const long numdist = m.get_long(F_NUMBER); + if (yesno_box(TR("Si desidera annullare la contabilizzazione della distinta %ld?"), numdist)) + { + TRelation rel(LF_EFFETTI); + TRectype& rec = rel.curr(); + rec.put(EFF_TIPODIST, tipodist); + rec.put(EFF_NDIST,numdist); + TCursor cur(&rel, "", 4, &rec, &rec); + const TRecnotype items = cur.items(); + cur.freeze(); + + TAssoc_array movs; + for (cur = 0; cur.pos() < items; ++cur) + { + movs.add(rec.get(EFF_NUMREG)); + rec.zero(EFF_EFFCONT); + rec.zero(EFF_NUMREG); + rel.rewrite(); + } + + if (movs.items() > 0) + { + TString msg; + msg = TR("E' necessario cancellare i seguenti movimenti contabili:\n"); + FOR_EACH_ASSOC_OBJECT(movs, hash, key, obj) + msg << key << ' '; + warning_box(msg); + } + m.stop_run(K_ESC); + } + } + return TRUE; +} + // Metodo che calcola i totali relativi alla distinta (totale in // lire e totale in valuta(se presente)) nella maschera principale void TVariazione_distinte::calcola_totale() diff --git a/ef/ef0300.h b/ef/ef0300.h index ccac5f993..7fc19b193 100755 --- a/ef/ef0300.h +++ b/ef/ef0300.h @@ -18,7 +18,8 @@ #define F_SHEET_RIBA 113 #define F_NPROGTR 114 #define F_TIPOCF 115 - +#define F_UNCONTABIL 116 + // Identificatori campi per lo spreadsheet di selezione RiBa da aggiungere // alla distinta (ef0300c.uml) #define F_DADATA 201 diff --git a/ef/ef0300a.uml b/ef/ef0300a.uml index a8804782a..e33effcbc 100755 --- a/ef/ef0300a.uml +++ b/ef/ef0300a.uml @@ -1,8 +1,15 @@ // DEFINIZIONE MASCHERA PRINCIPALE PER LA GESTIONE DISTINTE #include "ef0300.h" -TOOLBAR "" 0 -2 0 2 +TOOLBAR "" 0 -3 0 3 #include + +BUTTON F_UNCONTABIL 30 +BEGIN + PROMPT -11 0 "~Annulla contabilizzazione" + FLAGS "H" +END + ENDPAGE PAGE "Distinta" 0 -1 0 19 diff --git a/ef/ef0800.cpp b/ef/ef0800.cpp index 550d590b1..7bd188881 100755 --- a/ef/ef0800.cpp +++ b/ef/ef0800.cpp @@ -452,7 +452,8 @@ void TContabilizzazione_effetti_app::display_error() default: // Errori generici o non indicati vengono visualizzati nel punto dell'errore break; } - warning_box(msg); + if (!msg.blank()) + warning_box(msg); _error = no_error; // reset error, as any other one would do, so you can show me the other ones. _can_write = FALSE; // But from now on u cannot write anymore. U must exit this program and repair errors occurred. } @@ -684,10 +685,8 @@ void TContabilizzazione_effetti_app::join_rows(TArray& customers, TAssoc_array& error_type TContabilizzazione_effetti_app::search_clifo_bill(char tipo, const long codcf) { _error = no_error; - TString16 key; - - key.format("%c|%ld", tipo, codcf); + TString16 key; key.format("%c|%ld", tipo, codcf); const TRectype & clifo = cache().get(LF_CLIFO, key); if (clifo.empty()) @@ -699,7 +698,7 @@ error_type TContabilizzazione_effetti_app::search_clifo_bill(char tipo, const lo _caus->bill(1,_cliente); // conto della riga 1 _cliente.codclifo() = codcf; if (!_cliente.ok()) - _error = clifo_error; + _error = clifo_error; } return _error; } @@ -1176,6 +1175,11 @@ error_type TContabilizzazione_effetti_app::write_all(bool change_status) } } } + else + { + error_box(FR("Il movimento deve contenere almeno 2 righe contabili e non %d"), _movimento->cg_items()); + _error = generic_error; + } if (good() && change_status) // deve anche cambiare lo stato alla distinta ? {