diff --git a/ef/ef0100.cpp b/ef/ef0100.cpp index 01df9f22f..2d309a263 100755 --- a/ef/ef0100.cpp +++ b/ef/ef0100.cpp @@ -11,10 +11,10 @@ #include "ef0100.h" #include "ef0101.h" -////////////////////////////////////////////////////////////// -// Classe per la gestione di effetti con metodi standard di:// -// inserimento, modifica, cancellazione. // -////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////// +// Classe per la gestione di effetti con metodi standard di: // +// inserimento, modifica, cancellazione. // +//////////////////////////////////////////////////////////////////////////////////// class TVariazione_effetti: public TRelation_application { diff --git a/ef/ef0101.h b/ef/ef0101.h index 7613389cc..701ef0d3a 100755 --- a/ef/ef0101.h +++ b/ef/ef0101.h @@ -3,7 +3,7 @@ #endif #ifndef __RECARRAY_H -#include +#include #endif ///////////////////////////////////////////////////////////// diff --git a/ef/ef0300.cpp b/ef/ef0300.cpp index b67bac65a..34ed85d5b 100755 --- a/ef/ef0300.cpp +++ b/ef/ef0300.cpp @@ -10,10 +10,10 @@ #include "ef0300.h" #include "ef0301.h" -////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////// //Classe per la gestione di distinte (inserimento, modifica, cancellazione) // -// e per la creazione automatica di distinte per importi. // -////////////////////////////////////////////////////////////////////////////// +// e per la creazione automatica di distinte per importi. // +////////////////////////////////////////////////////////////////////////////////////////////////////////// class TVariazione_distinte: public TRelation_application { TMask *_msk, *_m2; @@ -44,7 +44,7 @@ protected: static void calcola_totale(); static void calcola(); static void aggiungi(); - static void carica_riba(); + static void carica_riba(int tipopag); static void ord_data(); static void ord_fatt(); TSheet_field& righe_sheet() const; @@ -95,29 +95,29 @@ void TVariazione_distinte::init_modify_mode(TMask&) // ritorna il prossimo numero di distanta valido const char* TVariazione_distinte::get_next_key() -{ - long ndist = 1L; +{ + long ndist = 1L; // per posizionarmi + char tipodist = 'B'; // all'inizo del file con chiave 4 TLocalisamfile& effetti = _rel->lfile(); - effetti.first(); // mi posiziono all'inizio del file - effetti.put("NDIST",ndist); + effetti.first(); // mi posiziono all'inizio del file + effetti.put(EFF_TIPODIST,tipodist); + effetti.put(EFF_NDIST,ndist); effetti.setkey(4); int err = effetti.read(_isgteq); if ( (err == _iskeynotfound) || (err == _iseof) ) //se non esiste alcuna distinta: - { // il numero sarà 1 + { // il numero sarà 1 err == NOERR; return format("%d|%ld", F_NUMBER, ndist); } - effetti.setkey(1); // mi posiziono all'inizio del file - effetti.first(); // utilizzando la chiave 1 - while (err == NOERR) //se esitono già delle distinte: - { // le leggo tutte e ne prendo il - effetti.setkey(4); // numero, al verificarsi della fine file - err = effetti.next(); // ho l'ultimo numero utilizzato - long n = effetti.get_long("NDIST"); // incrementandolo avrò il numero che cercavo. + while (err == NOERR) //se esitono già delle distinte: + { // le leggo tutte e ne prendo il + effetti.setkey(4); // numero, al verificarsi della fine file + err = effetti.next(); // ho l'ultimo numero utilizzato + long n = effetti.get_long(EFF_NDIST);// incrementandolo avrò il numero che cercavo. if (n > ndist) ndist = n; } - return format("%d|%ld",F_NUMBER,++ndist); // ritorna una stringa costruita utilizzando il numero della distinta + return format("%d|%ld",F_NUMBER,++ndist); // ritorna una stringa costruita utilizzando il numero della distinta } // ritorna un riferimento allo sheet degli effetti (righe) nella distinta @@ -139,15 +139,15 @@ bool TVariazione_distinte::cerca(long num) { bool trovato = FALSE; int items = _distinta->items(); - TArray& righedist = _distinta->righe(); - for (int i = 0; i < items; i++)// ciclo sugli elementi dell'array - { // se l'array è vuoto non trova nulla ed esce subito + TArray& righedist = _distinta->righe(); + for (int i = 0; i < items; i++) // ciclo sugli elementi dell'array + { // se l'array è vuoto non trova nulla ed esce subito TEffetto& eff = (TEffetto&)righedist[i]; - long num_eff = eff.get_long("NPROGTR"); + long num_eff = eff.get_long(EFF_NPROGTR); if (num_eff == num) { - trovato = TRUE; - break;// esco quando ho già trovato l'effetto che cercavo + trovato = TRUE; + break; // esco quando ho già trovato l'effetto che cercavo } } return trovato; @@ -157,14 +157,14 @@ bool TVariazione_distinte::cerca(long num) void TVariazione_distinte::aggiorna() { TSheet_field& shrighe = righe_sheet(); - int items = shrighe.items(); - for (int i = 0; i < items; i++) // prendo tutte le righe dello sheet + int items = shrighe.items(); + for (int i = 0; i < items; i++) // prendo tutte le righe dello sheet { TToken_string& row = shrighe.row(i); row.restart(); - long num = row.get_long(1); - if (!cerca(num)) // se non sia già presente in memoria - { // carico l'effetto nell'array + long num = row.get_long(1); + if (!cerca(num)) // se non è già presente in memoria + { // carico l'effetto nell'array TLocalisamfile eff(LF_EFFETTI); TRectype rec = eff.curr(); eff.setkey(1); @@ -182,8 +182,8 @@ void TVariazione_distinte::aggiorna() //che servirà per passarli alla write della distinta TToken_string* TVariazione_distinte::common_f(const TMask& m) { - char tipodist = m.get(F_TIPODIST)[0]; // prendo i dati - long ndist = m.get_long(F_NUMBER); // identificatvi della + char tipodist = m.get(F_TIPODIST)[0];// prendo i dati + long ndist = m.get_long(F_NUMBER); // identificatvi della TDate datadist = (TDate)m.get(F_DATA);// distinta long codabi = m.get_long(F_CODABIP); // dalla maschera long codcab = m.get_long(F_CODCABP); @@ -192,8 +192,8 @@ TToken_string* TVariazione_distinte::common_f(const TMask& m) TToken_string* datidist= new TToken_string; // creo la token string datidist->cut(0); - datidist->add(tipodist); // inserisco i dati nella - datidist->add(ndist); // token string + datidist->add(tipodist); // inserisco i dati nella + datidist->add(ndist); // token string datidist->add(datadist); datidist->add(codabi); datidist->add(codcab); @@ -206,17 +206,17 @@ int TVariazione_distinte::read(TMask& m) m.autoload(*_rel); int err = _rel->status(); if (err == NOERR) - { - err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta - err = _distinta->read(_rel->curr()); // legge la distinta dal record corrente della relazione + { + err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta + err = _distinta->read(_rel->curr()); // legge la distinta dal record corrente della relazione if (err == NOERR) { TToken_string riga(80); TSheet_field& shrighe = righe_sheet(); - shrighe.reset(); - int items = _distinta->items();// prendo il numero di effetti nella distinta + shrighe.reset(); + int items = _distinta->items(); // prendo il numero di effetti nella distinta TArray& righedist = _distinta->righe(); - // carico tutti gli effetti della distinta nello sheet + // carico tutti gli effetti della distinta nello sheet for (int i = 0; i < items; i++) { TEffetto& eff = (TEffetto&)righedist[i];// prendo l'effetto dall'array @@ -227,27 +227,27 @@ int TVariazione_distinte::read(TMask& m) riga.add(eff.get(EFF_DATASCAD)); long codcf = eff.get_long(EFF_CODCF); //prendo la ragione sociale del cliente - _clifo->zero(); //conoscendone il codice + _clifo->zero(); //conoscendone il codice _clifo->put("TIPOCF", 'C'); _clifo->put("CODCF", codcf); if (_clifo->read() == NOERR) riga.add(_clifo->get("RAGSOC")); - if (eff.fatt(numero)) //se l'effetto contiene solo una fattura metto i - { //riferimenti al documento ed al numero di rata + if (eff.fatt(numero)) //se l'effetto contiene solo una fattura metto i + { //riferimenti al documento ed al numero di rata const TRectype& rec_r = eff.row_r(1); riga.add(rec_r.get(REFF_NFATT)); riga.add(rec_r.get(REFF_DATAFATT)); if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA)); else riga.add(("Varie")); } - else //se l'effetto contiene più di una fattura non metto i - { //riferimenti al documento ed al numero di rata + else //se l'effetto contiene più di una fattura non metto i + { //riferimenti al documento ed al numero di rata riga.add(("Varie")); riga.add(("Varie")); riga.add(("Varie")); } - - TString codval(3); //gestisco il controllo sulla presenza o meno di una valuta + + TString codval(3); //gestisco il controllo sulla presenza o meno di una valuta codval = eff.get(EFF_CODVAL); if (i == 0) { @@ -283,8 +283,8 @@ void TVariazione_distinte::elimina() TArray& righedist = distinta->righe(); for (int i = 0, k = i+1; i < sf.items(); i++, k++)//ciclo sugli elementi dello sheet { - if (deleted) i--; // per posizionarsi correttamente sulla prima riga dello sheet - if (sf.items() == 1)// non posso cancellare l'effetto se è l'unico della distinta + if (deleted) i--; // per posizionarsi correttamente sulla prima riga dello sheet + if (sf.items() == 1) // non posso cancellare l'effetto se è l'unico della distinta { error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!"); break; @@ -294,24 +294,24 @@ void TVariazione_distinte::elimina() if (condition) { long num = row.get_long(1); - for (int j = 0; j < distinta->items(); j++)//ciclo sugli elementi dell'array + for (int j = 0; j < distinta->items(); j++) //ciclo sugli elementi dell'array { TEffetto& eff = (TEffetto&)righedist[j]; - long num_eff = eff.get_long("NPROGTR"); + long num_eff = eff.get_long(EFF_NPROGTR); if (num_eff == num) { - righedist.destroy(j,TRUE);// tolgo l'effetto dall'array + righedist.destroy(j,TRUE); // tolgo l'effetto dall'array break; } - } - sf.destroy(i); deleted = TRUE;// tolgo l'effetto dallo sheet + } + sf.destroy(i); deleted = TRUE; // tolgo l'effetto dallo sheet eff.read(file, tipodist, ndist, k); - eff.zero("TIPODIST"); - eff.zero("NDIST"); - eff.zero("DATADIST"); - eff.zero("NRIGADIST"); - eff.zero("CODABIP"); - eff.zero("CODCABP"); + eff.zero(EFF_TIPODIST); + eff.zero(EFF_NDIST); + eff.zero(EFF_DATADIST); + eff.zero(EFF_NRIGADIST); + eff.zero(EFF_CODABIP); + eff.zero(EFF_CODCABP); eff.rewrite(file); } else deleted = FALSE; @@ -321,32 +321,29 @@ void TVariazione_distinte::elimina() // riscrive distinta int TVariazione_distinte::rewrite(const TMask& m) { -// prima di riscrive controllo se ci sono effetti nello sheet selezionati per l'eliminazione - TSheet_field& sf = righe_sheet(); - bool condition = FALSE; + TSheet_field& sf = righe_sheet(); // prima di riscrive controllo se ci sono effetti nello sheet selezionati per l'eliminazione + bool condition = FALSE; for (int i = 0; i < sf.items(); i++) { - TToken_string& row = sf.row(i); - if (condition = *row.get(0) == 'X') break;// se trovo un effetto selezionato esco dal ciclo + TToken_string& row = sf.row(i); + if (condition = *row.get(0) == 'X') break; // se trovo un effetto selezionato esco dal ciclo } -// solo se ho trovato effetti selezionati - if (condition) - if (yesno_box("Vuoi veramete eliminare gli effetti selezionati")) - elimina(); //elimino gli effetti nello sheet che sono selezionati con la "X" - int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta -// procedo con la riscrittura - char tipodist = m.get(F_TIPODIST)[0]; + if (condition) // solo se ho trovato effetti selezionati + if (yesno_box("Vuoi veramete eliminare gli effetti selezionati")) + elimina(); //elimino gli effetti nello sheet che sono selezionati con la "X" + int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta + char tipodist = m.get(F_TIPODIST)[0]; // procedo con la riscrittura long ndist = m.get_long(F_NUMBER); - aggiorna(); // aggiorno l'array + aggiorna(); // aggiorno l'array err = _distinta->rewrite(common_f(m)); -// riposiziono la relazione - if (err == NOERR) + + if (err == NOERR) // riposiziono la relazione { _rel->lfile().setkey(4); TRectype& curr = _rel->curr(); - curr.put("TIPODIST", tipodist); - curr. put("NDIST", ndist); - curr. put("NRIGADIST", 1); + curr.put(EFF_TIPODIST, tipodist); + curr. put(EFF_NDIST, ndist); + curr. put(EFF_NRIGADIST, 1); _rel->read(); } return err; @@ -354,20 +351,20 @@ int TVariazione_distinte::rewrite(const TMask& m) // scrive distinta int TVariazione_distinte::write(const TMask& m) -{ - int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta +{ + int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta char tipodist = m.get(F_TIPODIST)[0]; - long ndist = m.get_long(F_NUMBER); - aggiorna(); // aggiorno l'array + long ndist = m.get_long(F_NUMBER); + aggiorna(); // aggiorno l'array err = _distinta->write(TRUE, common_f(m)); //riposiziono la relazione if (err == NOERR) { _rel->lfile().setkey(4); TRectype& curr = _rel->curr(); - curr.put("TIPODIST", tipodist); - curr. put("NDIST", ndist); - curr. put("NRIGADIST", 1); + curr.put(EFF_TIPODIST, tipodist); + curr. put(EFF_NDIST, ndist); + curr. put(EFF_NRIGADIST, 1); _rel->read(); } return err; @@ -423,8 +420,8 @@ bool TVariazione_distinte::user_destroy() //Permette di caricare lo sheet per la selezione delle riba da aggiungere alla distinta: // vengono presi tutti gli effetti sul file LF_EFFETTI che non hanno ancora un riferimento ad -// una distinta -void TVariazione_distinte::carica_riba() +// una distinta; inoltre è possibile inserire nella distinta effettiaventi lo stesso tipo di pagamento. +void TVariazione_distinte::carica_riba(int tipopag) { // deve caricare solo quegli effetti che non hanno riferimento alla distinta // quindi setta i campi ad essa relativi a zero @@ -441,41 +438,52 @@ void TVariazione_distinte::carica_riba() sf.reset(); int err, i = 0; err = eff.read(f, tipodist, ndist, nrigadist); - while ( (err == NOERR) && (tipodist == 0) ) + int tipop = eff.get_int(EFF_TIPOPAG); + while ( (err == NOERR) && (tipodist == 0)) { //carico tutti gli effetti, che soddisfano alla condizione, nello sheet - riga.cut(0); - riga.add(' '); - const long numero = eff.get_long(EFF_NPROGTR); - riga.add(numero); - riga.add(eff.get(EFF_DATASCAD)); - long codcf = eff.get_long(EFF_CODCF); - clifo->zero(); - clifo->put("TIPOCF", 'C'); - clifo->put("CODCF", codcf); - if (clifo->read() == NOERR) riga.add(clifo->get("RAGSOC")); - if (eff.fatt(numero)) //se l'effetto contiene solo una fattura metto i - { //riferimenti al documento ed al numero di rata - const TRectype& rec_r = eff.row_r(1); - riga.add(rec_r.get(REFF_NFATT)); - riga.add(rec_r.get(REFF_DATAFATT)); - if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA)); - else riga.add(("Varie")); - } - else //se l'effetto contiene più di una fattura non metto i - { //riferimenti al documento ed al numero di rata - riga.add(("Varie")); - riga.add(("Varie")); - riga.add(("Varie")); - } - - riga.add(eff.get(EFF_CODVAL)); - riga.add(eff.get(EFF_IMPORTO)); - riga.add(eff.get(EFF_IMPORTOVAL)); - sf.row(i) = riga; - i++; + bool condition = (tipopag == tipop); + // se effetti di tipo cambiario (pagherò, tratta, tratta accettata) + if (tipopag == 2 || tipopag ==5 || tipopag == 7) + condition = (tipop == 2 || tipop ==5 || tipop == 7); + // se non indico un tipo di effetto prendo il tipo del primo che seleziono + if (tipopag == 0) condition =TRUE; + if (condition) + { + riga.cut(0); + riga.add(' '); + const long numero = eff.get_long(EFF_NPROGTR); + riga.add(numero); + riga.add(eff.get(EFF_DATASCAD)); + long codcf = eff.get_long(EFF_CODCF); + clifo->zero(); + clifo->put("TIPOCF", 'C'); + clifo->put("CODCF", codcf); + if (clifo->read() == NOERR) riga.add(clifo->get("RAGSOC")); + if (eff.fatt(numero)) //se l'effetto contiene solo una fattura metto i + { //riferimenti al documento ed al numero di rata + const TRectype& rec_r = eff.row_r(1); + riga.add(rec_r.get(REFF_NFATT)); + riga.add(rec_r.get(REFF_DATAFATT)); + if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA)); + else riga.add(("Varie")); + } + else //se l'effetto contiene più di una fattura non metto i + { //riferimenti al documento ed al numero di rata + riga.add(("Varie")); + riga.add(("Varie")); + riga.add(("Varie")); + } + riga.add(eff.get(EFF_CODVAL)); + riga.add(eff.get(EFF_IMPORTO)); + riga.add(eff.get(EFF_IMPORTOVAL)); + sf.row(i) = riga; + i++; + } f.setkey(4); - err = eff.next(f); // leggo l'effetto successivo e ne prendo il tipodistinta per il controllo - tipodist = eff.get("TIPODIST")[0];// della condizione del ciclo di caricamento + err = eff.next(f); //leggo l'effetto successivo e ne prendo il tipodistinta per il controllo + tipodist = eff.get(EFF_TIPODIST)[0];// della condizione del ciclo di caricamento + if (tipopag == 0) tipopag = tipop; // non avendo indicato un tipo di effetto prendo quello del primo + tipop = eff.get_int(EFF_TIPOPAG); } } @@ -509,13 +517,14 @@ bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k) TMask* m2 = app()._m2; long imp_pres = m.get_long(F_TOTIMP);// importo presentato long imp = m.get_long(F_IMP);// importo distinta - long impdist = imp - imp_pres; + long impdist = imp - imp_pres; + int tipopag = m.get_int(F_TIPOPAG); // se importo distinta maggiore importo presentato si devono andare a caricare effetti in ... // ... automatico per un valore minore uguale alla differenza dei suddetti importi if (impdist > 0) { app().begin_wait(); - carica_riba(); + carica_riba(tipopag); app().end_wait(); m2->reset(F_TOTIMPDIST); m2->reset(F_IMPSEL); @@ -861,9 +870,11 @@ bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key) //non ancora assegnati, chiamato quando si aggiunge una riga allo sheet degli effetti della distinta void TVariazione_distinte::aggiungi() { + TMask* m = app()._msk; TMask* m2 = app()._m2; + int tipopag = m->get_int(F_TIPOPAG); app().begin_wait(); - carica_riba(); + carica_riba(tipopag); app().end_wait(); m2->reset(F_TOTIMPDIST); m2->reset(F_IMPSEL); diff --git a/ef/ef0300.h b/ef/ef0300.h index 8558e227b..894ac77cb 100755 --- a/ef/ef0300.h +++ b/ef/ef0300.h @@ -4,18 +4,19 @@ // campi maschera EF0300a.msk -#define F_TIPODIST 101 -#define F_NUMBER 102 -#define F_NUMBERRIGA 103 -#define F_DATA 104 +#define F_TIPODIST 101 +#define F_NUMBER 102 +#define F_NUMBERRIGA 103 +#define F_DATA 104 #define F_DENBANP 105 -#define F_CODABIP 106 +#define F_CODABIP 106 #define F_CODCABP 107 -#define F_TOTIMP 108 -#define F_IMP 109 -#define F_TOTIMPVAL 110 -#define F_CODVAL 111 -#define F_SHEET_RIBA 112 +#define F_TOTIMP 108 +#define F_IMP 109 +#define F_TOTIMPVAL 110 +#define F_CODVAL 111 +#define F_TIPOPAG 112 +#define F_SHEET_RIBA 113 diff --git a/ef/ef0300a.uml b/ef/ef0300a.uml index ff5084e1b..e90e58f4d 100755 --- a/ef/ef0300a.uml +++ b/ef/ef0300a.uml @@ -6,12 +6,12 @@ ENDPAGE PAGE "Gestione Distinte" 0 -1 0 19 -GROUPBOX DLG_NULL 78 10 +GROUPBOX DLG_NULL 78 11 BEGIN PROMPT 1 0 "" END -LIST F_TIPODIST 19 +LIST F_TIPODIST 17 BEGIN PROMPT 2 1 "Tipo Distinta " KEY 4 @@ -21,7 +21,7 @@ BEGIN ITEM "S|Allo sconto" END -LIST F_NUMBERRIGA 10 +LIST F_NUMBERRIGA 12 BEGIN PROMPT 1 60 "Numero Riga Distinta " KEY 4 @@ -51,7 +51,7 @@ END DATE F_DATA BEGIN PROMPT 2 2 "Data Distinta " - FIELD LF_EFFETTI->DATADIST + FIELD LF_EFFETTI->DATADIST END TEXT DLG_NULL @@ -135,9 +135,24 @@ BEGIN OUTPUT F_CODVAL CODTAB END +LIST F_TIPOPAG 24 +BEGIN + PROMPT 2 9 "Tipo Effetto " + FIELD LF_EFFETTI->TIPOPAG + ITEM "0| " + ITEM "2|Effetto cambiario" + ITEM "3|Ricevuta Bancaria" + ITEM "4|Cessione" + ITEM "5|Effetto cambiario" + ITEM "6|Lettera di credito" + ITEM "7|Effetto cambiario" + ITEM "8|Rapporti interb.diretti" + ITEM "9|Bonifici" +END + SPREADSHEET F_SHEET_RIBA 78 10 BEGIN - PROMPT 1 10 "RIGHE DISTINTA" + PROMPT 1 12 "RIGHE DISTINTA" ITEM "" ITEM "Nr. Ri.Ba." ITEM "Scadenza" diff --git a/ef/ef0400.cpp b/ef/ef0400.cpp index fe1d240ba..cbbfa0d0c 100755 --- a/ef/ef0400.cpp +++ b/ef/ef0400.cpp @@ -11,9 +11,9 @@ #include "ef0101.h" #include "ef0400.h" -///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// //Classe per l'eliminazione di effetti di effetti con selezione per gruppi // -///////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////// class TEliminazione_effetti: public TApplication { TMask *_msk; diff --git a/ef/ef0400a.uml b/ef/ef0400a.uml index 56c4f3723..bf0cde9ec 100755 --- a/ef/ef0400a.uml +++ b/ef/ef0400a.uml @@ -51,6 +51,8 @@ BEGIN DISPLAY "Data scadenza" DATASCAD OUTPUT F_A_RIBA NPROGTR CHECKTYPE NORMAL + /*NUM_EXPR {#THIS_FIELD>=#F_DA_RIBA} + WARNING "Limite superiore non valido"*/ END GROUPBOX DLG_NULL 55 3 @@ -84,7 +86,9 @@ BEGIN DISPLAY "Nr. progressivo" NPROGTR OUTPUT F_A_DATA DATASCAD OUTPUT F_A_RIBA NPROGTR - CHECKTYPE NORMAL + CHECKTYPE NORMAL + /*VALIDATE DATE_CMP_FUNC >= F_DA_DATA + WARNING "Data limite superiore non valida" */ END BUTTON DLG_OK 9 2 diff --git a/ef/ef0500.cpp b/ef/ef0500.cpp index 126d6cf15..36432c4b2 100755 --- a/ef/ef0500.cpp +++ b/ef/ef0500.cpp @@ -16,9 +16,9 @@ class TRiba_form; class TDistinta_form; -/////////////////////////////////////////////////////////////////////// -// Classe per l'emissione di effetti e distinte su carta o su floppy // -/////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////// +// Classe per l'emissione di effetti e distinte su carta o su floppy // +/////////////////////////////////////////////////////////////////////////////////////////////// class TEmissione: public TApplication { TMask* _msk; @@ -49,9 +49,9 @@ public: // restituisce un riferimento all' applicazione inline TEmissione& app() { return (TEmissione&) main_app();} -//////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// // Classe TRiba_form customizzata dalla Form per le Ri.Ba.// -//////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////// class TRiba_form: public TForm { protected: @@ -61,9 +61,9 @@ public: virtual ~TRiba_form(){}; }; -//////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////// // Classe TDistinta_form customizzata dalla Form per le Distinte // -//////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////// class TDistinta_form: public TForm { diff --git a/ef/ef0600.cpp b/ef/ef0600.cpp index ef0ddf3f1..9c7096acd 100755 --- a/ef/ef0600.cpp +++ b/ef/ef0600.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -7,25 +6,30 @@ #include #include #include - #include #include -#include +#include +#include "ef0101.h" #include "ef0600.h" -enum pt {undefined = 0, scadenza = 1, banca = 2, distinta = 3}; +enum pt {undefined = 0, st_banca = 1, st_cliente = 2, st_distinta = 3, st_scadenza = 4}; +/////////////////////////////////////////////////////////////////////////////////////////// +// Classe per le stampe di controllo degli effetti in portafoglio // +////////////////////////////////////////////////////////////////////////////////////////// class TPrint_effetti_app : public TPrintapp { - pt _pr_type; - TRelation* _rel; - int _cur_1, _cur_2, _cur_3; - int _interline, i; - TString _ban, _cli, _val, _data_stampa, _ban_prec; - long _dist_prec; - TDate _scad_prec; - real _tot_data, _tot_mese, _tot_banca, _tot_distinta, _tot_stampa; - bool _prima_volta; + pt _pr_type; + TRelation* _rel; + TPrintrow _pr; + TString _ban, _cli, _val, _data_stampa, _ban_prec; + TDate _scad_prec; + TRectype* _rec_prec; + int _cur_1, _cur_2, _cur_3, _cur_4, _interline; + long _dist_prec, _cliente_prec; + char _tipo_prec; + real _tot_data, _tot_mese, _tot_banca, _tot_distinta, _tot_tip_dist, _tot_cliente, _tot_stampa; + bool _prima_volta; public: virtual bool preprocess_page(int file, int counter); virtual bool preprocess_print(int file, int counter); @@ -33,19 +37,145 @@ public: virtual void preprocess_header(); void header_scadenza(); void header_banca(); - void header_distinta(); + void header_distinta(); + void header_cliente(); virtual bool user_create(); virtual bool user_destroy(); virtual bool set_print(int); virtual void set_page (int file, int counter); void set_scadenza(); void set_banca(); - void set_distinta(); + void set_distinta(); + void set_cliente(); const char* get_field(int ln, const char* fn) {return current_cursor()->curr(ln).get(fn);} - const char* look_tab(const char* tabname, TString& cod,const char* fld="S0"); - TPrint_effetti_app() : TPrintapp(), _ban(11), _ban_prec(11), _cli(60), _val(3){_rel = NULL; _interline = 1;} + const char* look_tab(const char* tabname, const TString& cod,const char* fld="S0"); + const TString& look_clifo(long codcf); + void st_tot_scad(); + void st_tot_mese(); + void st_header_scad(const TDate* scad); + void st_header_ban(const TString* ban); + void st_header_dist(const char tipodist); + void st_header_cliente(const TString* cli); + TPrint_effetti_app(); + virtual ~TPrint_effetti_app(){}; }; +// Costruttore classe +TPrint_effetti_app::TPrint_effetti_app():TPrintapp(), _ban(11), _ban_prec(11), _cli(60), _val(3), _data_stampa(10) +{ + _rel = NULL; + _rec_prec = NULL; + _interline = 1; +} + +// restituisce la ragione sociale del cliente compattata +const TString& TPrint_effetti_app::look_clifo(long codcf) +{ + TLocalisamfile clifo(LF_CLIFO); + clifo.put(CLI_TIPOCF,'C'); + clifo.put(CLI_CODCF, codcf); + clifo.read(); + TString s,cli; + cli = (clifo.get(CLI_RAGSOC)); + s = cli.mid(30,50); + s.trim(); + cli = cli.mid(0,30); + cli.trim(); + cli << " " << s; + return cli; +} + +// restituisce un campo di una tabella +const char* TPrint_effetti_app::look_tab(const char* tabname, const TString& cod, const char* fld) +{ + TTable tab(tabname); + tab.curr().zero(); + tab.curr().put("CODTAB",cod); + tab.read(); + if (tab.bad()) tab.curr().zero(); + return tab.curr().get(fld); +} + +// stampa il totale per data di scadenza +void TPrint_effetti_app::st_tot_scad() +{ + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); + _pr.put("TOTALE",50); + _pr.put(_scad_prec.string(),57); + _pr.put(_tot_data.string("###.###.##@,@@"),72); + printer().print(_pr); + _tot_data = 0.0; + _pr.reset(); +} + +// stampa il totale per mese delle data di scadenza +void TPrint_effetti_app::st_tot_mese() +{ + _pr.put("TOTALE ",50); + _pr.put(itom(_scad_prec.month()),57); + _pr.put(_tot_mese.string("###.###.##@,@@"),72); + printer().print(_pr); + _tot_mese = 0.0; + _pr.reset(); +} + +// stampa l'intestazione per mese data scadenza +void TPrint_effetti_app::st_header_scad(const TDate* scad) +{ + TString year = scad->string(); + year = year.right(4); + _pr.put(itom(scad->month()),1); + _pr.put(year,10); + printer().print(_pr); + _pr.reset(); +} + +// stampa intestazione per banca di presentazione +void TPrint_effetti_app::st_header_ban(const TString* ban) +{ + TString s = (look_tab("%BAN",*ban)); + if (s.empty()) + s = "Nessuna Banca di Presentazione"; + _pr.put(s,1); + printer().print(_pr); + _pr.reset(); +} + +// stampa intestazione per distinta di presentazione +void TPrint_effetti_app::st_header_dist(const char tipodist) +{ + TString s = "Distinte"; + switch(tipodist) + { + case 'B': + s << " Salvo Buon Fine"; + break; + case 'I': + s << " All'Incasso"; + break; + case 'S': + s << " Allo Sconto"; + break; + case 0: + s = "Nessuna Distinta"; + break; + } + _pr.put(s,1); + printer().print(_pr); + _pr.reset(); +} + +// stampa intestazione per cliente +void TPrint_effetti_app::st_header_cliente(const TString* cli) +{ + _pr.put(*cli,1); + printer().print(_pr); + _pr.reset(); +} + +// viene settato l'header delle diverse stampe void TPrint_effetti_app::preprocess_header() { reset_header(); @@ -59,23 +189,27 @@ void TPrint_effetti_app::preprocess_header() TString s(ditte.get("RAGSOC")); set_header(j, "Ditta: %ld %s@125gPag @#", firm, (const char*) s); set_header(j++, "@102gData %s", (const char*) _data_stampa); - + switch(_pr_type) { - case scadenza: + case st_scadenza: header_scadenza(); break; - case banca: + case st_banca: header_banca(); break; - case distinta: + case st_distinta: header_distinta(); break; + case st_cliente: + header_cliente(); + break; default: break; } } +// setta l'header per la stampa per data di scadenza void TPrint_effetti_app::header_scadenza() { int j =1; @@ -85,6 +219,7 @@ void TPrint_effetti_app::header_scadenza() set_header(j, (const char *)(TString(132).fill('-'))); } +// setta l'header per la stampa per banca di presentazione void TPrint_effetti_app::header_banca() { int j = 1; @@ -94,6 +229,7 @@ void TPrint_effetti_app::header_banca() set_header(j, (const char *)(TString(132).fill('-'))); } +// setta l'header per la stampa per distinta di presentazione void TPrint_effetti_app::header_distinta() { int j = 1; @@ -104,109 +240,155 @@ void TPrint_effetti_app::header_distinta() set_header(j, (const char *)(TString(132).fill('-'))); } - +// setta l'header per la stampa per cliente +void TPrint_effetti_app::header_cliente() +{ + int j =1; + set_header(j, "@52gSTAMPA RI.BA. PER CLIENTE"); j++; + set_header(j++, (const char *)(TString(132).fill('-'))); + set_header(j++, " Cliente Scadenza Banca N.Riba N.Dist Importo Val N.Rata St.Def. Fattura del. N."); + set_header(j, (const char *)(TString(132).fill('-'))); +} +// svolge operazioni di chiusura di totali pendenti dalla stampa che è ormai terminata print_action TPrint_effetti_app::postprocess_print(int file, int counter) { TString s; - TPrintrow pr; - TPrinter& p = printer(); if (_tot_data != 0.0) - { - pr.put("-------------------------------------------",50); - p.print(pr); - pr.reset(); - pr.put("Totale",52); - pr.put(_scad_prec.string(),60); - pr.put(_tot_data.string("###.###.##@,@@"),72); - p.print(pr); - _tot_data = 0.0; - pr.reset(); - } + { + st_tot_scad(); + } if(_tot_mese != 0.0) { - pr.put("Totale ",50); - pr.put(itom(_scad_prec.month()),57); - pr.put(_tot_mese.string("###.###.##@,@@"),72); - p.print(pr); - _tot_mese = 0.0; - pr.reset(); + st_tot_mese(); } if (_tot_banca != 0.0) { - pr.put("Totale",50); + _pr.put("TOTALE",50); + _pr.put(_tot_banca.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); s = (look_tab("%BAN",_ban_prec)); if (s.empty()) - s = "Nessuna Banca "; - s = s.left(20); - pr.put(s,57); - pr.put(_tot_banca.string("###.###.##@,@@"),72); - p.print(pr); - _tot_banca = 0.0; - pr.reset(); + s = "Nessuna Banca di Presentazione"; + _pr.put(s,52); + printer().print(_pr); + _tot_banca = 0.0; + _pr.reset(); } - if (_tot_distinta != 0.0) + if (_tot_distinta != 0.0 &&_dist_prec != 0) { - pr.put("Totale",50); - s << "Distinta " << _dist_prec; - if (_dist_prec == 0) - s = "Nessuna Distinta "; - pr.put(s,57); - pr.put(_tot_distinta.string("###.###.##@,@@"),72); - p.print(pr); + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); + _pr.put("TOTALE",50); + s = "Distinta "; + s << _dist_prec << " " << _tipo_prec ; + _pr.put(s,57); + _pr.put(_tot_distinta.string("###.###.##@,@@"),72); + printer().print(_pr); _tot_distinta = 0.0; - pr.reset(); + _pr.reset(); } - - if (_tot_stampa != 0.0) - { - pr.put("-----------------------------------------------------------------------------------------------------------------------------------",1); - p.print(pr); - pr.reset(); - pr.put("Totale Ri.Ba. stampate",50); - pr.put(_tot_stampa.string("###.###.##@,@@"),72); - p.print(pr); + + if (_tot_tip_dist != 0.0) + { + if (_dist_prec == 0) + { + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); + } + _pr.put("TOTALE",50); + _pr.put(_tot_tip_dist.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); + s = "Distinte"; + switch(_tipo_prec) + { + case 'B': + s << " Salvo Buon Fine"; + break; + case 'I': + s << " All'Incasso"; + break; + case 'S': + s << " Allo Sconto"; + break; + case 0: + s = "Nessuna Distinta"; + break; + } + _pr.put(s,52); + printer().print(_pr); + _tot_tip_dist = 0.0; + _pr.reset(); + } + + if (_tot_cliente != 0.0) + { + _pr.put("TOTALE",50); + _pr.put(_tot_cliente.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); + _pr.put((look_clifo(_cliente_prec)),52); + printer().print(_pr); + _tot_cliente = 0.0; + _pr.reset(); + } + + if (_tot_stampa != 0.0) + { + _pr.reset(); + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); + _pr.put("TOTALE ",50); + _pr.put(_tot_stampa.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); + _pr.put("RI.BA. STAMPATE",52); + printer().print(_pr); + _pr.reset(); + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); _tot_stampa = 0.0; - pr.put("-----------------------------------------------------------------------------------------------------------------------------------",1); - p.print(pr); - pr.reset(); - p.print(pr); - } - - return NEXT_PAGE; + } + return NEXT_PAGE; } +// setta secondo il tipo di stampa la pagina logica void TPrint_effetti_app::set_page(int file, int counter) { switch(_pr_type) { - case scadenza: - if (file == LF_EFFETTI) - set_scadenza(); + case st_scadenza: + set_scadenza(); break; - case banca: - if (file == LF_EFFETTI) - set_banca(); + case st_banca: + set_banca(); break; - case distinta: - if (file == LF_EFFETTI) - set_distinta(); + case st_distinta: + set_distinta(); break; + case st_cliente: + set_cliente(); + break; default: break; } - } - +// setta la pagina logica nel caso di stampa per data di scadenza void TPrint_effetti_app::set_scadenza() { - - set_row(1,"@1g@s@13g#t@26g#t@50g@pn@59g@pn@72g@pn@88g#t@95g@pn@103g@s@111g@s@121g@pn", + set_row(1," "); + set_row(2,"@1g@s@13g#t@26g#t@50g@pn@59g@pn@72g@pn@88g#t@95g@pn@103g@s@111g@s@125g@n", FLD(LF_EFFETTI, EFF_DATASCAD), &_ban, &_cli, @@ -217,14 +399,17 @@ void TPrint_effetti_app::set_scadenza() FLD(LF_REFFETTI, REFF_NRATA,"##@"), FLD(LF_EFFETTI, EFF_EFFSTAMP), FLD(LF_REFFETTI, REFF_DATAFATT), - FLD(LF_REFFETTI, REFF_NFATT,"######@")); + FLD(LF_REFFETTI, REFF_NFATT)); - for( i = 0; i < _interline; i++) set_row(i+1," "); + for(int i = 0; i < _interline; i++) set_row(i+1," "); } + +// setta la pagina logica nel caso di stampa per banca di presentazione void TPrint_effetti_app::set_banca() { - set_row(1,"@1g#t@14g@s@26g#t@54g@pn@63g@pn@72g@pn@91g#t@98g@pn@106g@s@114g@s@124g@pn", + set_row(1," "); + set_row(2,"@1g#t@14g@s@26g#t@54g@pn@63g@pn@72g@pn@91g#t@98g@pn@106g@s@114g@s@128g@n", &_ban, FLD(LF_EFFETTI, EFF_DATASCAD), &_cli, @@ -235,14 +420,16 @@ void TPrint_effetti_app::set_banca() FLD(LF_REFFETTI, REFF_NRATA,"##@"), FLD(LF_EFFETTI, EFF_EFFSTAMP), FLD(LF_REFFETTI, REFF_DATAFATT), - FLD(LF_REFFETTI, REFF_NFATT, "######@")); + FLD(LF_REFFETTI, REFF_NFATT)); - for( i = 0; i < _interline; i++) set_row(i+1,""); + for(int i = 0; i < _interline; i++) set_row(i+1,""); } +// setta la pagina logica nel caso di stampa per distinta di presentazione void TPrint_effetti_app::set_distinta() { - set_row(1,"@3g@s@5g@pn@16g@pn@27g@s@41g#t@55g#t@72g@pn@91g#t@98g@pn@106g@s@114g@s@124g@pn", + set_row(1," "); + set_row(2,"@3g@s@5g@pn@16g@pn@27g@s@41g#t@55g#t@72g@pn@91g#t@98g@pn@106g@s@114g@s@128g@n", FLD(LF_EFFETTI, EFF_TIPODIST), FLD(LF_EFFETTI, EFF_NDIST, "#######@"), FLD(LF_EFFETTI, EFF_NPROGTR, "#####@"), @@ -254,248 +441,320 @@ void TPrint_effetti_app::set_distinta() FLD(LF_REFFETTI, REFF_NRATA,"##@"), FLD(LF_EFFETTI, EFF_EFFSTAMP), FLD(LF_REFFETTI, REFF_DATAFATT), - FLD(LF_REFFETTI, REFF_NFATT, "######@")); + FLD(LF_REFFETTI, REFF_NFATT)); - for( i = 0; i < _interline; i++) set_row(i+1,""); + for(int i = 0; i < _interline; i++) set_row(i+1,""); } - + +// setta la pagina logica nel caso di stampa per cliente +void TPrint_effetti_app::set_cliente() +{ + set_row(1," "); + set_row(2,"@5g@pn@25g@s@37g#t@50g@pn@59g@pn@72g@pn@88g#t@95g@pn@103g@s@111g@s@125g@n", + FLD(LF_EFFETTI, EFF_CODCF,"@@@@@@"), + FLD(LF_EFFETTI, EFF_DATASCAD), + &_ban, + FLD(LF_EFFETTI, EFF_NPROGTR, "#####@"), + FLD(LF_EFFETTI, EFF_NDIST, "#######@"), + FLD(LF_EFFETTI, EFF_IMPORTO, "###.###.##@,@@"), + &_val, + FLD(LF_REFFETTI, REFF_NRATA,"##@"), + FLD(LF_EFFETTI, EFF_EFFSTAMP), + FLD(LF_REFFETTI, REFF_DATAFATT), + FLD(LF_REFFETTI, REFF_NFATT)); + + for(int i = 0; i < _interline; i++) set_row(i+1," "); +} + +// effettua operazioni preliminari alla stampa bool TPrint_effetti_app::preprocess_page(int file, int counter) - // no switch/case su file poichè c'è solo quello degli effetti { - TString s; + TString s; + + // scarico i dati, dal record corrente del cursore, che mi necessitano per effettuare la "rorrura della stampa" TRectype & rec = current_cursor()->curr(); + TDate scad = rec.get_date (EFF_DATASCAD); - TString ban = rec.get (EFF_CODABIP); - if (ban=="00000") + TString ban = rec.get (EFF_CODABIP); + if (ban=="00000") ban = ""; long dist = rec.get_long (EFF_NDIST); char tipodist = rec.get_char(EFF_TIPODIST); + long cliente = rec.get_long (EFF_CODCF); real importo = rec.get_real(EFF_IMPORTO); - TString year; - TPrintrow pr; - TPrinter& p = printer(); - - if (_prima_volta) - { - _prima_volta = FALSE; - switch(_pr_type) - { - case scadenza: - _scad_prec = scad; - year = _scad_prec.string(); - year = year.right(4); - pr.put(itom(_scad_prec.month()),1); - pr.put(year,10); - p.print(pr); - pr.reset(); - p.print(pr); - break; - case banca: - _scad_prec = scad; - _ban_prec = ban; - s = (look_tab("%BAN",_ban_prec)); - if (s.empty()) - s = "Nessuna Banca di Presentazione"; - pr.put(s,1); - p.print(pr); - pr.reset(); - p.print(pr); - break; - case distinta: - _scad_prec = scad; - _dist_prec = dist; - s << "Distinta " << dist << " "; - switch(tipodist) - { - case 'B': - s << " Salvo Buon Fine"; - break; - case 'I': - s << " All'Incasso"; - break; - case 'S': - s << " Allo Sconto"; - break; - case 0: - s = "Nessuna Distinta"; - break; - } - pr.put(s,1); - p.print(pr); - pr.reset(); - p.print(pr); - s = ""; - break; - } - } - - if (scad !=_scad_prec) - { - pr.put("-------------------------------------------",50); - p.print(pr); - pr.reset(); - pr.put("Totale",52); - pr.put(_scad_prec.string(),60); - pr.put(_tot_data.string("###.###.##@,@@"),72); - p.print(pr); - _tot_data = 0.0; - pr.reset(); - - if((scad.month() != _scad_prec.month())&&_pr_type == scadenza) - { - pr.put("Totale ",50); - pr.put(itom(_scad_prec.month()),57); - pr.put(_tot_mese.string("###.###.##@,@@"),72); - p.print(pr); - _tot_mese = 0.0; - pr.reset(); - p.print(pr); - - year = scad.string(); - year = year.right(4); - pr.put(itom(scad.month()),1); - pr.put(year,10); - p.print(pr); - pr.reset(); - p.print(pr); - } - } - - switch(_pr_type) - { - case scadenza: - _tot_mese += importo; - break; - case banca: - if (ban !=_ban_prec) - { - pr.put("Totale",50); - s = (look_tab("%BAN",_ban_prec)); - if (s.empty()) - s = "Nessuna Banca "; - s = s.left(20); - pr.put(s,57); - pr.put(_tot_banca.string("###.###.##@,@@"),72); - p.print(pr); - _tot_banca = 0.0; - pr.reset(); - p.print(pr); - _ban_prec = ban; - s = (look_tab("%BAN",ban)); - if (s.empty()) - s = "Nessuna Banca di Presentazione"; - pr.put(s,1); - p.print(pr); - pr.reset(); - p.print(pr); - } - _tot_banca += importo; - break; - - case distinta: - if (dist !=_dist_prec) - { - pr.put("Totale",50); - s << "Distinta " << _dist_prec; - if (_dist_prec == 0) - s = "Nessuna Distinta"; - pr.put(s,57); - pr.put(_tot_distinta.string("###.###.##@,@@"),72); - p.print(pr); - _tot_distinta = 0.0; - pr.reset(); - p.print(pr); - _dist_prec = dist; - - s = ""; - s << "Distinta " << dist << " "; - switch(tipodist) - { - case 'B': - s <<" Salvo Buon Fine"; - break; - case 'I': - s << " All'Incasso"; - break; - case 'S': - s << " Allo Sconto"; - break; - case 0: - s = "Nessuna Distinta "; - break; - } - pr.put(s,1); - p.print(pr); - pr.reset(); - p.print(pr); - s = ""; - } - _tot_distinta += importo; - break; - } - - _scad_prec = scad; - _tot_data += importo; - _tot_stampa += importo ; - - _ban = get_field(LF_EFFETTI, EFF_CODABIP); + + + + // elaboro le seguenti stringhe per essere stampate + _ban = get_field(LF_EFFETTI, EFF_CODABIP); if (_ban=="00000") _ban = ""; s = get_field(LF_EFFETTI, EFF_CODCABP); if (s=="00000") s = ""; _ban << " " << s; - - s = get_field(LF_EFFETTI, EFF_CODCF); + _cli = get_field(LF_CLIFO, CLI_RAGSOC); s = _cli.mid(30,50); s.trim(); _cli = _cli.mid(0,30); _cli.trim(); - _cli << " " << s; + _cli << " " << s; s = get_field(LF_EFFETTI, EFF_CODVAL); (s.empty())?_val = s:_val = "Lit."; - + + // se è la prima volta che stampo devo inizializzare i dati di controllo "rottura stampa" e stampare gli header relativi + // alle diverse stampe + if (_prima_volta) + { + _prima_volta = FALSE; + _rec_prec = &rec; + switch(_pr_type) + { + case st_scadenza: + _scad_prec = scad; + st_header_scad(&scad); + break; + + case st_banca: + _scad_prec = scad; + _ban_prec = ban; + st_header_ban(&ban); + break; + + case st_distinta: + _scad_prec = scad; + _dist_prec = dist; + _tipo_prec = tipodist; + st_header_dist(tipodist); + break; + + case st_cliente: + _scad_prec = scad; + _cliente_prec = cliente; + st_header_cliente(&_cli); + break; + + default: + break; + } + } + else + { + // stampo la lista delle fatture dell'effetto + TEffetto effetto = *_rec_prec; + long num = effetto.numero(); + TToken_string* dati = effetto.dati_fatt(num); + int elem = dati->items(); + if (elem > 3) + { + TString descfatt; + for (int i = 3; i < elem; i+=3) + { + descfatt = dati->get(i+1); + descfatt << " "; + descfatt << dati->get(i); + _pr.reset(); + if (_pr_type == st_scadenza || _pr_type == st_cliente ) + _pr.put(descfatt, 111); + if (_pr_type == st_banca || _pr_type == st_distinta ) + _pr.put(descfatt, 114); + printer().print(_pr); + } + _pr.reset(); + } + } + + // a seconda del tipo di stampa che devo effettuare svolgo i controlli per la "rottura stampa" + switch(_pr_type) + { + case st_scadenza: + if (scad != _scad_prec) + st_tot_scad(); // è cambiata la data di scadenza, stampo il relativo totale + if (scad.month() !=_scad_prec.month()) + {// è cambiato il mese della la data di scadenza, stampo il relativo totale ed il nuovo header del mese + st_tot_mese(); + _pr.reset(); + printer().print(_pr); + st_header_scad(&scad); + } + _scad_prec = scad; + _tot_data += importo; + _tot_mese += importo; + _tot_stampa += importo ; + break; + + case st_banca: + if (scad != _scad_prec) + st_tot_scad(); // è cambiata la data di scadenza, stampo il relativo totale + if (scad.month() !=_scad_prec.month()) + { // è cambiato il mese della la data di scadenza, stampo il relativo totale + st_tot_mese(); + } + + if (ban !=_ban_prec) + { + // stampo i totali di data e di mese nel caso in cui cambi la banca ma non la data o il mese + if (scad == _scad_prec) + st_tot_scad(); + if (scad.month() ==_scad_prec.month()) + { + st_tot_mese(); + } + + // stampo totale banca + _pr.put("TOTALE",50); + _pr.put(_tot_banca.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); + s = (look_tab("%BAN",_ban_prec)); + if (s.empty()) + s = "Nessuna Banca di Presentazione"; + _pr.put(s,52); + printer().print(_pr); + _tot_banca = 0.0; + _pr.reset(); + _pr.reset(); + printer().print(_pr); + // stampo nuovo header banca + st_header_ban(&ban); + } + _scad_prec = scad; + _ban_prec = ban; + _tot_data += importo; + _tot_banca += importo; + _tot_mese += importo; + _tot_stampa += importo ; + break; + + case st_distinta: + if (dist !=_dist_prec)// è cambiato il numero distinta, stampo il relativo totale + { + if (_dist_prec != 0)//il totale per nessuna distinta si fa solo per tipo + { + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); + _pr.put("TOTALE",50); + s = "Distinta "; + s << _tipo_prec << " "<< _dist_prec; + _pr.put(s,57); + _pr.put(_tot_distinta.string("###.###.##@,@@"),72); + printer().print(_pr); + _tot_distinta = 0.0; + _pr.reset(); + } + + if(tipodist != _tipo_prec)// è cambiato il tipo distinta, stampo il relativo totale + { + if (_dist_prec == 0) + { + _pr.put("-------------------------------------------",50); + printer().print(_pr); + _pr.reset(); + } + _pr.put("TOTALE",50); + _pr.put(_tot_tip_dist.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); + s = "Distinte"; + switch(_tipo_prec) + { + case 'B': + s << " Salvo Buon Fine"; + break; + case 'I': + s << " All'Incasso"; + break; + case 'S': + s << " Allo Sconto"; + break; + case 0: + s = "Nessuna Distinta"; + break; + } + _pr.put(s,52); + printer().print(_pr); + _tot_tip_dist = 0.0; + _pr.reset(); + printer().print(_pr); + st_header_dist(tipodist); + } + } + _dist_prec = dist; + _tipo_prec = tipodist; + _tot_distinta += importo; + _tot_tip_dist += importo; + _tot_stampa += importo ; + break; + + case st_cliente: + + if (scad != _scad_prec) + st_tot_scad(); // è cambiata la data di scadenza, stampo il relativo totale + if (scad.month() !=_scad_prec.month()) + { // è cambiato il mese della la data di scadenza, stampo il relativo totale + st_tot_mese(); + } + + if (cliente !=_cliente_prec) + { + // stampo i totali di data e di mese nel caso in cui cambi il cliente ma non la data o il mese + if (scad == _scad_prec) + st_tot_scad(); + if (scad.month() ==_scad_prec.month()) + { + st_tot_mese(); + } + + // stampo totale cliente + _pr.put("TOTALE",50); + _pr.put(_tot_cliente.string("###.###.##@,@@"),72); + printer().print(_pr); + _pr.reset(); + _pr.put((look_clifo(_cliente_prec)),52); + printer().print(_pr); + _tot_cliente = 0.0; + _pr.reset(); + printer().print(_pr); + st_header_cliente(&_cli); + } + _cliente_prec = cliente; + _scad_prec = scad; + _tot_cliente += importo; + _tot_data += importo; + _tot_mese += importo; + _tot_stampa += importo ; + break; + default: + break; + } return TRUE; } - bool TPrint_effetti_app::preprocess_print(int file, int counter) { reset_print(); - return TRUE; + return TRUE; } -const char* TPrint_effetti_app::look_tab(const char* tabname, TString& cod,const char* fld) -{ - TTable tab(tabname); - tab.curr().zero(); - tab.curr().put("CODTAB",cod); - tab.read(); - if (tab.bad()) tab.curr().zero(); - return tab.curr().get(fld); -} - +// richiamo la maschera di scelta tipo di stampa ed inizializzo cursori di stampa bool TPrint_effetti_app::set_print(int) { disable_links(); set_multiple_link(FALSE); TMask mask("ef0600a.msk"); - mask.run(); force_setpage(FALSE); - switch (mask.last_key()) + if (mask.last_key() == K_QUIT) { - case K_ESC: - case K_QUIT: return FALSE; - break; } - - _pr_type = (pt) mask.get_int(RDB_TIPOST); - TDate data_stampa (mask.get(F_DATA_STAMPA)); + //scarico dalla maschera + _pr_type = (pt) mask.get_int(RDB_TIPOST); // il tipo di stampa scelto + TDate data_stampa (mask.get(F_DATA_STAMPA));// la data di stampa _data_stampa = data_stampa.string(); TRectype from(current_cursor()->curr()); @@ -503,19 +762,18 @@ bool TPrint_effetti_app::set_print(int) TRectype to(from); TString cod_from, cod_to, filter; - filter = ""; switch(_pr_type) { - case scadenza: - cod_from = mask.get(F_DA_DATA); + case st_scadenza: + cod_from = mask.get(F_DA_DATA); cod_to = mask.get(F_A_DATA); from.put(EFF_DATASCAD,cod_from); to.put(EFF_DATASCAD,cod_to); select_cursor(_cur_1); - break; + break; - case banca: + case st_banca: cod_from = mask.get(F_DA_DATA2); cod_to = mask.get(F_A_DATA2); from.put(EFF_DATASCAD,cod_from); @@ -527,9 +785,9 @@ bool TPrint_effetti_app::set_print(int) filter = ""; filter << "(CODABIP>=" << cod_from << ")&&(CODABIP<=" << cod_to << ")" ; select_cursor(_cur_2); - break; + break; - case distinta: + case st_distinta: cod_from = mask.get(F_DA_DATA3); cod_to = mask.get(F_A_DATA3); from.put(EFF_DATASCAD,cod_from); @@ -545,24 +803,39 @@ bool TPrint_effetti_app::set_print(int) if ((!cod_from.empty())&&(!cod_to.empty())&&(cod_from==cod_to)) // per selezionare un tipo filter << "&&(TIPODIST==\"" << cod_from << "\")"; // di distinta select_cursor(_cur_3); - break; - + break; + + case st_cliente: + cod_from = mask.get(F_DA_DATA4); + cod_to = mask.get(F_A_DATA4); + from.put(EFF_CODCF,cod_from); + to.put(EFF_CODCF,cod_to); + cod_from = mask.get(F_DACLI); + cod_to = mask.get(F_ACLI); + if (cod_from.empty()) cod_from = "000000"; // per selezionare tutti + if (cod_to.empty()) cod_to = "999999"; // i clienti + filter = ""; + filter << "(CODCF>=" << cod_from << ")&&(CODCF<=" << cod_to << ")" ; + select_cursor(_cur_4); + break; + default: break; - } - + } + current_cursor()->setfilter(filter,TRUE); current_cursor()->setregion(from, to); - - set_real_picture("###.###.##@,@@"); + set_real_picture("###.###.##@,@@");// setta il formato di stampa di tutti i reali _prima_volta=TRUE; return TRUE; } +// crea l'applicazione bool TPrint_effetti_app::user_create() { _rel = new TRelation(LF_EFFETTI); _rel->add(LF_REFFETTI, "NPROGTR==NPROGTR"); + _rel->add(LF_CESS, "NPROGTR==NPROGTR");// solo per poter usare l'oggetto effetto (mi serve il file aperto) _rel->add(LF_CLIFO, "TIPOCF=='C'|CODCF==CODCF"); _cur_1 = add_cursor(new TCursor(_rel,"",3));//STAMPA PER SCADENZA @@ -573,11 +846,15 @@ bool TPrint_effetti_app::user_create() ordine = "TIPODIST|NDIST|NRIGADIST|DATASCAD|NPROGTR";//STAMPA PER DISTINTA _cur_3 = add_cursor(new TSorted_cursor(_rel,ordine,"",3)); + ordine = "CODCF|NPROGTR";//STAMPA PER CLIENTE + _cur_4 = add_cursor(new TSorted_cursor(_rel,ordine,"",3));; + add_file(LF_EFFETTI); enable_print_menu(); return TRUE; } +// distrugge l'applicazione bool TPrint_effetti_app::user_destroy() { if (_rel) diff --git a/ef/ef0600.h b/ef/ef0600.h index 102b80473..7b0c9b376 100755 --- a/ef/ef0600.h +++ b/ef/ef0600.h @@ -18,5 +18,9 @@ #define F_ADIST 113 #define F_DA_DATA3 114 #define F_A_DATA3 115 +#define F_DACLI 116 +#define F_ACLI 117 +#define F_DA_DATA4 118 +#define F_A_DATA4 119 #endif diff --git a/ef/ef0600a.uml b/ef/ef0600a.uml index ece737360..30cfc99f3 100755 --- a/ef/ef0600a.uml +++ b/ef/ef0600a.uml @@ -4,19 +4,21 @@ PAGE "Stampe di Controllo Effetti" -1 -1 60 13 DATE F_DATA_STAMPA BEGIN - PROMPT 30 1 "Data di stampa " + PROMPT 30 0 "Data di stampa " FLAGS "A" END RADIOBUTTON RDB_TIPOST 24 BEGIN - PROMPT 2 1 "Stampa per " - ITEM "1|Scadenza" - MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ - ITEM "2|Banca" - MESSAGE SHOW,2@|HIDE,1@|HIDE,3@ + PROMPT 2 0 "Stampa per " + ITEM "1|Banca" + MESSAGE SHOW,2@|HIDE,1@|HIDE,3@|HIDE,4@ + ITEM "2|Cliente" + MESSAGE SHOW,4@|HIDE,1@|HIDE,2@|HIDE,3@ ITEM "3|Distinta" - MESSAGE SHOW,3@|HIDE,1@|HIDE,2@ + MESSAGE SHOW,3@|HIDE,1@|HIDE,2@|HIDE,4@ + ITEM "4|Scadenza" + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@|HIDE,4@ END GROUPBOX DLG_NULL 55 3 @@ -67,7 +69,7 @@ BEGIN INPUT CODTAB F_ABAN DISPLAY "Codice ABI" CODTAB[1,5] DISPLAY "Denominazione@50" S0 - OUTPUT F_ABAN CODTAB[1,5] + OUTPUT F_ABAN CODTAB[1,5] CHECKTYPE NORMAL END @@ -186,6 +188,54 @@ BEGIN WARNING "Data limite superiore non valida" END +GROUPBOX DLG_NULL 55 4 +BEGIN + PROMPT 1 6 "Stampa effetti per Cliente" + GROUP 4 +END + +NUMBER F_DACLI 6 +BEGIN + PROMPT 2 7 "Dal Cliente " + FLAGS "RZ" + GROUP 4 + USE LF_CLIFO + INPUT TIPOCF "C" + INPUT CODCF F_DACLI + DISPLAY "Ragione sociale@60" RAGSOC + DISPLAY "Codice" CODCF + OUTPUT F_DACLI CODCF + CHECKTYPE NORMAL +END + +NUMBER F_ACLI 6 +BEGIN + PROMPT 30 7 "Al Cliente " + FLAGS "RZ" + GROUP 4 + USE LF_CLIFO + INPUT TIPOCF "C" + INPUT CODCF F_ACLI + DISPLAY "Ragione sociale@60" RAGSOC + DISPLAY "Codice" CODCF + OUTPUT F_ACLI CODCF + CHECKTYPE NORMAL +END + +DATA F_DA_DATA4 +BEGIN + PROMPT 2 8 "Dalla Data " + GROUP 4 +END + +DATA F_A_DATA4 +BEGIN + PROMPT 30 8 "Alla Data " + GROUP 4 + VALIDATE DATE_CMP_FUNC >= F_DA_DATA2 + WARNING "Data limite superiore non valida" +END + BUTTON DLG_OK 9 2 BEGIN PROMPT -13 -1 ""