From 98aaa441595174111c169fc113d35b79eaeff73f Mon Sep 17 00:00:00 2001 From: paola Date: Thu, 14 Nov 1996 17:40:05 +0000 Subject: [PATCH] aggiunti file per la gestione delle distinte(ef03*.*) git-svn-id: svn://10.65.10.50/trunk@3899 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ef/ef0300.cpp | 442 +++++++++++++++++++++++++++++++++++++++++++++++++ ef/ef0300.h | 42 +++++ ef/ef0300a.uml | 161 ++++++++++++++++++ ef/ef0300b.uml | 91 ++++++++++ ef/ef0300c.uml | 59 +++++++ ef/ef0301.cpp | 86 ++++++++++ ef/ef0301.h | 30 ++++ 7 files changed, 911 insertions(+) create mode 100755 ef/ef0300.cpp create mode 100755 ef/ef0300.h create mode 100755 ef/ef0300a.uml create mode 100755 ef/ef0300b.uml create mode 100755 ef/ef0300c.uml create mode 100755 ef/ef0301.cpp create mode 100755 ef/ef0301.h diff --git a/ef/ef0300.cpp b/ef/ef0300.cpp new file mode 100755 index 000000000..9ddb8f780 --- /dev/null +++ b/ef/ef0300.cpp @@ -0,0 +1,442 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "ef0.h" +#include "ef0300.h" +#include "ef0301.h" + +//Classe per la gestione di distinte (inserimento, modifica, cancellazione) +// e per la creazione automatica di distinte per importi. +class TVariazione_distinte: public TRelation_application +{ + TMask *_msk, *_m2; + TDistinta *_distinta; + TRelation *_rel; + TLocalisamfile *_reff, *_cession; +protected: + virtual void init_query_mode(TMask&); + virtual void init_insert_mode(TMask&); + virtual const char* get_next_key(); + virtual int read(TMask& m); + virtual int rewrite(const TMask& m); + virtual int write(const TMask& m); + virtual bool remove(char tipodist, long ndist); + virtual TMask* get_mask(int mode) {return _msk;} + virtual bool changing_mask(int mode) {return FALSE;} + static bool aggiungi_handler(TMask_field& f, KEY k); + static bool elimina_handler(TMask_field& f, KEY k); + static bool impdist_notify(TSheet_field& s, int r, KEY key); + static bool m2_handler(TMask& m, KEY key); + static bool conferma_handler(TMask_field& f, KEY k); + static bool annulla_handler(TMask_field& f, KEY k); + static void calcola_totale(); + static void carica_riba(); + TSheet_field& righe_sheet() const; + TSheet_field& righe_sel_sheet() const; + bool cerca(long num); + bool user_create(); + bool user_destroy(); + void aggiorna(); + void elimina(TString16 tipodist, long ndist) ; + TToken_string* common_f(const TMask& m); +public: + virtual TRelation* get_relation() const {return _rel;} + TVariazione_distinte() {}; + virtual ~TVariazione_distinte() {}; +}; + +inline TVariazione_distinte& app() +{ + return (TVariazione_distinte&)main_app(); +} + +void TVariazione_distinte::init_query_mode(TMask&) +{ + _msk->reset(F_TOTIMP); + _msk->reset(F_TOTIMPVAL); +} + +void TVariazione_distinte::init_insert_mode(TMask&) +{ + _msk->reset(F_TOTIMP); + _msk->reset(F_TOTIMPVAL); + TToken_string riga("|||||||||||"); + righe_sheet().row(0)= riga; + righe_sheet().set_dirty(); + righe_sel_sheet().row(0)= riga; + righe_sel_sheet().set_dirty(); +} + +//Ritorna il prossimo numero valido di chiave +const char* TVariazione_distinte::get_next_key() +{ + TLocalisamfile& effetti = _rel->lfile();; + long ndist=1L; + if ( !effetti.empty() ) + { + effetti.zero(); + effetti.setkey(4); + effetti.last(); + if ( effetti.good() ) + ndist+=effetti.get_long(EFF_NDIST); + } + return format("%d|%ld",F_NUMBER,ndist); +} + +//Ritorna un riferimento allo sheet degli effetti (righe) nella distinta +TSheet_field& TVariazione_distinte::righe_sheet() const +{ + TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIBA); + return r_sheet; +} + +//Ritorna un riferimento allo sheet delle righe +TSheet_field& TVariazione_distinte::righe_sel_sheet() const +{ + TSheet_field& r_sheet = (TSheet_field&)_m2->field(F_SHEET); + return r_sheet; +} + +//Ritorna TRUE se trovo nel'array delle righe distinta l'effetto passato +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 + { + TEffetto& eff = (TEffetto&)righedist[i]; + long num_eff = eff.get_long("NPROGTR"); + if (num_eff == num) + { + trovato = TRUE; + continue; + } + } + return trovato; +} + +//Metodo che permette di scivere sull'array gli effetti presenti nello sheet +// comune a write e rewrite +void TVariazione_distinte::aggiorna() +{ + TSheet_field& shrighe = righe_sheet(); + int items = shrighe.items(); + for (int i = 0; i < items; i++) + { + TToken_string& row = shrighe.row(i); + row.restart(); + long num = row.get_long(1); + if (!cerca(num)) + { + TLocalisamfile eff(LF_EFFETTI); + TRectype rec = eff.curr(); + eff.setkey(1); + rec.zero(); + rec.put(EFF_NPROGTR, num); + int err = eff.read(); + TEffetto* effetto= new TEffetto(rec); + TArray& righedist = _distinta->righe(); + righedist.add(effetto); + } + } +} + +//Metodo che permette di eliminare il collegamento tra effetto e distinta per gli +//effetti che non fanno parte dell'array +void TVariazione_distinte::elimina(TString16 tipodist, long ndist) +{ + TLocalisamfile eff(LF_EFFETTI); + eff.put("TIPODIST",tipodist); + eff.put("NDIST",ndist); + eff.read(_isgteq); + TString16 t = eff.get("TIPODIST"); + long n = eff.get_long("NDIST"); + long num =eff.get_long("NPROGTR"); + while ((t==tipodist)&&(n==ndist)) + { + if (!cerca(num)) + { + eff.zero("TIPODIST"); + eff.zero("NDIST"); + eff.zero("DATADIST"); + eff.zero("NRIGADIST"); + eff.zero("CODABIP"); + eff.zero("CODCABP"); + eff.rewrite(); + } + eff.next(); + t = eff.get_char("TIPODIST"); + n = eff.get_long("NDIST"); + } +} + +//Metodo che permette di scivere su file i dati inseriti nella maschera; +// comune a write e rewrite +TToken_string* TVariazione_distinte::common_f(const TMask& m) +{ + TString16 tipodist = m.get(F_TIPODIST); + long ndist = m.get_long(F_NUMBER); + TDate datadist = (TDate)m.get(F_DATA); + long codabi = m.get_long(F_CODABIP); + long codcab = m.get_long(F_CODCABP); + elimina(tipodist, ndist); + m.autosave(*_rel); + TToken_string* datidist= new TToken_string; + datidist->cut(0); + datidist->add(tipodist); + datidist->add(ndist); + datidist->add(datadist); + datidist->add(codabi); + datidist->add(codcab); + return datidist; +} + +int TVariazione_distinte::read(TMask& m) +{ + m.autoload(*_rel); + int err = _rel->status(); + if (err == NOERR) + { + err = _distinta->reset(); + err = _distinta->read(_rel->curr()); + if (err == NOERR) + { + TToken_string riga(80); + TSheet_field& shrighe = righe_sheet(); + shrighe.reset(); + int items = _distinta->items(); + TArray& righedist = _distinta->righe(); + for (int i = 0; i < items; i++) + { + TEffetto& eff = (TEffetto&)righedist[i]; + riga.cut(0); + riga.add(FALSE); + riga.add(eff.get(EFF_NPROGTR)); + riga.add(eff.get(EFF_DATASCAD)); + riga.add(eff.get(EFF_CODCF)); + if (eff.rows_r() == 1) //se l'effetto contiene solo una riga 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)); + riga.add(rec_r.get(REFF_NRATA)); + } + else //se l'effetto contiene pił di una riga 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 + codval = eff.get(EFF_CODVAL); + const bool condition = (codval.empty()); + m.enable(F_CODVAL, !condition); + m.enable(F_TOTIMPVAL, !condition); + if (!condition) + m.set(F_CODVAL, codval); + riga.add(codval); + riga.add(eff.get(EFF_IMPORTO)); + riga.add(eff.get(EFF_IMPORTOVAL)); + shrighe.row(i) = riga; + } + } + } + return err; +} + +int TVariazione_distinte::rewrite(const TMask& m) +{ + aggiorna(); + return _distinta->rewrite(common_f(m)); +} + +int TVariazione_distinte::write(const TMask& m) +{ + aggiorna(); + return _distinta->write(TRUE, common_f(m)); +} + +bool TVariazione_distinte::remove(char tipodist, long ndist) +{ + return _distinta->remove(tipodist, ndist) == NOERR; +} + + +bool TVariazione_distinte::user_create() +{ + _msk = new TMask("ef0300a"); + _m2 = new TMask("ef0300c"); + _rel = new TRelation(LF_EFFETTI); + _reff = new TLocalisamfile(LF_REFFETTI); + _cession = new TLocalisamfile(LF_CESS); + _distinta = new TDistinta; + set_search_field(F_NUMBER); + _msk->set_handler(B_AGGIUNGI, aggiungi_handler); + _msk->set_handler(B_ELIMINA, elimina_handler); + _m2->set_handler(DLG_OK, conferma_handler); + _m2->set_handler(DLG_CANCEL, annulla_handler); + _m2->set_handler(m2_handler); + righe_sheet().set_notify(impdist_notify); + return TRUE; +} + +bool TVariazione_distinte::user_destroy() +{ + delete _msk; + delete _m2; + delete _rel; + delete _reff; + delete _cession; + delete _distinta; + return TRUE; +} + +//Permette di gestire lo sheet per la selezione delle riba da aggiungere alla distinta +void TVariazione_distinte::carica_riba() +{ + TLocalisamfile f(LF_EFFETTI); + TRectype rec = f.curr(); + f.setkey(4); + f.put("TIPODIST",""); + f.put("NDIST",0); + f.put("NRIGADIST",0); + f.read(_isgteq); + TString16 t = rec.get("TIPODIST"); + long n = rec.get_long("NDIST"); + + int i = 0; + while ((t.empty())&&(n==0)) + { + TToken_string riga(80); + TMask* m2 = app()._m2; + TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET); + sf.reset(); + riga.cut(0); + riga.add(FALSE); + riga.add(rec.get(EFF_NPROGTR)); + riga.add(rec.get(EFF_DATASCAD)); + riga.add(rec.get(EFF_CODCF)); + TEffetto eff(rec); + if (eff.rows_r() == 1) //se l'effetto contiene solo una riga 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)); + riga.add(rec_r.get(REFF_NRATA)); + } + else //se l'effetto contiene pił di una riga non metto i + { //riferimenti al documento ed al numero di rata + riga.add(("Varie")); + riga.add(("Varie")); + riga.add(("Varie")); + } + riga.add(rec.get(EFF_CODVAL)); + riga.add(rec.get(EFF_IMPORTO)); + riga.add(rec.get(EFF_IMPORTOVAL)); + sf.row(i) = riga; + + f.next(); + t = rec.get("TIPODIST"); + n = rec.get_long("NDIST"); + i++; + } +} + +//handler per gestire la pressione del bottone aggiungi della maschera principale(ef0300a) +bool TVariazione_distinte::aggiungi_handler(TMask_field& f, KEY k) +{ + if (k==K_SPACE) + { + TMask &m = f.mask(); + m.close(); + TMask* m2 = app()._m2; + m2->open(); + } + return TRUE; +} + +//handler per gestire la pressione del bottone elimina della maschera principale(ef0300a) +bool TVariazione_distinte::elimina_handler(TMask_field& f, KEY k) +{ + if (k==K_SPACE) + f.yesno_box("Vuoi veramente eliminare gli effetti"); + // SE SI ELIMINARE DALLO SHEET GLI EFFETTI SELEZIONATI (LA RIMOZIONE FISICA SARA' FATTA AL + // MOMENTO DELLA REGISTRAZIONE, SE NO NON FACCIO NULLA + return TRUE; +} + +//handler per gestire la pressione del bottone conferma della maschera per l'aggiunta delle riba(ef0300c) +bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k) +{ + if (k==K_ENTER) + { + TMask &m = f.mask(); + TMask* m2 = app()._msk; + m.close(); + m2->open(); + } + return TRUE; +} + +//handler della maschera per l'aggiunta delle riba(ef0300c) +bool TVariazione_distinte::m2_handler(TMask& m, KEY k) +{ + if (k==K_ENTER) + carica_riba(); + return TRUE; +} + +//handler per gestire la pressione del bottone annulla della maschera per l'aggiunta delle riba(ef0300c) +bool TVariazione_distinte::annulla_handler(TMask_field& f, KEY k) +{ + TMask &m = f.mask(); + TMask* m2 = app()._msk; + m.close(); + m2->open(); + return TRUE; +} + +//Calcola i totali relativi alla distinta (totale in lire e totale in valuta(se presente)) +void TVariazione_distinte::calcola_totale() +{ + TMask* m = app()._msk; + TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIBA); + int items = sf.items(); + real imp, impval, impdist, impdistval; + for (int i = 0; i < items; i++) + { + TToken_string& row = sf.row(i); + imp = row.get(8); + impdist += imp; + impval = row.get(9); + impdistval += impval; + } + m->set(F_TOTIMP, impdist); + m->set(F_TOTIMPVAL, impdistval); +} + +//Notify per il calcolo dei totali relativi alla distinta +bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key) +{ + if (s.to_check(key, TRUE)) + calcola_totale(); + if (key == K_DEL && s.items()==1) + { + error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!"); + return FALSE; + } + return TRUE; +} + +int ef0300(int argc, char* argv[]) +{ + TVariazione_distinte a ; + a.run(argc, argv, "Gestione Distinte"); + return 0; +} \ No newline at end of file diff --git a/ef/ef0300.h b/ef/ef0300.h new file mode 100755 index 000000000..eb6832b56 --- /dev/null +++ b/ef/ef0300.h @@ -0,0 +1,42 @@ +#ifndef __EF0300_H +#define __EF0300_H + +// campi maschera EF0300a.msk + + +#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_CODCABP 107 +#define F_TOTIMP 108 +#define F_TOTIMPVAL 109 +#define F_CODVAL 110 +#define F_SHEET_RIBA 111 +#define B_AGGIUNGI 112 +#define B_ELIMINA 113 + + +// Identificatori campi per lo spreadsheet Righe Distinta +#define F_CHECK 101 +#define F_NRIBA 102 +#define F_SCAD 103 +#define F_CLIENTE 104 +#define F_NFATT 105 +#define F_DATAFATT 106 +#define F_NRATA 107 +#define F_VALUTA 108 +#define F_IMPORTO 109 +#define F_IMPORTOVAL 110 + +// campi maschera EF0300C.msk + + +#define F_DADATA 101 +#define F_ADATA 102 +#define F_TIPORD 103 +#define F_SHEET 104 + +#endif // __EF0300.H diff --git a/ef/ef0300a.uml b/ef/ef0300a.uml new file mode 100755 index 000000000..fa32b2d85 --- /dev/null +++ b/ef/ef0300a.uml @@ -0,0 +1,161 @@ +#include "ef0300.h" + +TOOLBAR "" 0 20 0 2 + +#include + +ENDPAGE + +PAGE "Gestione Distinte" 0 -1 0 19 + +GROUPBOX DLG_NULL 78 9 +BEGIN + PROMPT 1 0 "" +END + +LIST F_TIPODIST 19 +BEGIN + PROMPT 2 1 "Tipo Distinta " + KEY 4 + FIELD LF_EFFETTI->TIPODIST + ITEM "I|All'incasso" + ITEM "B|Salvo buon fine" + ITEM "S|Allo sconto" +END + +LIST F_NUMBERRIGA 10 +BEGIN + PROMPT 1 60 "Numero Riga Distinta" + KEY 4 + FIELD LF_EFFETTI->NRIGADIST + ITEM "1|PRIMA RIGA" + FLAGS "D" +END + +NUMBER F_NUMBER 7 +BEGIN + PROMPT 48 1 "Numero Distinta " + FIELD LF_EFFETTI->NDIST + FLAGS "R" + KEY 4 + USE LF_EFFETTI KEY 4 SELECT NRIGADIST = 1 + INPUT TIPODIST F_TIPODIST + INPUT NDIST F_NUMBER + INPUT NRIGADIST F_NUMBERRIGA + DISPLAY "Tipo distinta" TIPODIST + DISPLAY "Nr. distinta" NDIST + //DISPLAY "Nr. riga distinta" NRIGADIST + OUTPUT F_TIPODIST TIPODIST + OUTPUT F_NUMBER NDIST + OUTPUT F_NUMBERRIGA NRIGADIST + CHECKTYPE REQUIRED +END + +DATE F_DATA +BEGIN + PROMPT 2 2 "Data Distinta " + FIELD LF_EFFETTI->DATADIST +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 3 "Banca di Presentazione " +END + +STRING F_DENBANP 50 +BEGIN + PROMPT 25 3 "" + FLAGS "U" + USE %BAN KEY 2 + INPUT S0 F_DENBANP + DISPLAY "Codice ABI" CODTAB[1,5] + DISPLAY "Denominazione@50" S0 + OUTPUT F_DENBANP S0 + OUTPUT F_CODABIP CODTAB[1,5] + OUTPUT F_CODCABP CODTAB[6,10] +END + +NUMBER F_CODABIP 5 0 +BEGIN + PROMPT 14 4 "Codice ABI " + FIELD LF_EFFETTI->CODABIP + FLAGS "RZ" + USE %BAN KEY 1 SELECT CODTAB ?= "?????" + INPUT CODTAB F_CODABIP + DISPLAY "Codice ABI" CODTAB[1,5] + DISPLAY "Denominazione@50" S0 + OUTPUT F_CODABIP CODTAB[1,5] + OUTPUT F_CODCABP CODTAB[6,10] + OUTPUT F_DENBANP S0 + CHECKTYPE NORMAL + WARNING "Codice ABI assente" +END + +NUMBER F_CODCABP 5 0 +BEGIN + PROMPT 14 5 "Codice CAB " + FIELD LF_EFFETTI->CODCABP + FLAGS "RZ" + USE %BAN KEY 1 SELECT CODTAB ?= "??????????" + INPUT CODTAB[1,5] F_CODABIP + INPUT CODTAB[6,10] F_CODCABP + DISPLAY "Codice ABI" CODTAB[1,5] + DISPLAY "Codice CAB" CODTAB[6,10] + DISPLAY "Denominazione@50" S0 + OUTPUT F_CODABIP CODTAB[1,5] + OUTPUT F_CODCABP CODTAB[6,10] + OUTPUT F_DENBANP S0 + CHECKTYPE NORMAL + VALIDATE REQIF_FUNC 1 F_CODCABP + WARNING "Banca assente" +END + +NUMBER F_TOTIMP 18 2 +BEGIN + PROMPT 2 6 "Valore Distinta " +END + +NUMBER F_TOTIMPVAL 18 3 +BEGIN + PROMPT 2 7 "Valore Distinta Val. " +END + +STTING F_CODVAL 8 +BEGIN + PROMPT 48 7 "Codice Valuta " +END + +SPREADSHEET F_SHEET_RIBA 78 8 +BEGIN + PROMPT 1 10 "RIGHE DISTINTA" + ITEM " " + ITEM "Nr. Ri.Ba." + ITEM "Scadenza" + ITEM "Cliente@50" + ITEM "Nr. Fattura" + ITEM "Data Fattura" + ITEM "Nr. Rata" + ITEM "Valuta" + ITEM "Importo" + ITEM "Importo Val." +END + +BUTTON B_AGGIUNGI 10 2 +BEGIN + PROMPT -12 -2 "~AGGIUNGI" + PICTURE BMP_NEWREC + PICTURE BMP_NEWRECDN +END + +BUTTON B_ELIMINA 10 2 +BEGIN + PROMPT -22 -2 "~ELIMINA" + PICTURE BMP_DELREC + PICTURE BMP_DELRECDN +END + +ENDPAGE +ENDMASK + +#include "EF0300B.UML" + diff --git a/ef/ef0300b.uml b/ef/ef0300b.uml new file mode 100755 index 000000000..199d491b6 --- /dev/null +++ b/ef/ef0300b.uml @@ -0,0 +1,91 @@ +#include "ef0300.h" + +PAGE "Righe Distinta" -1 -1 76 13 + +LISTBOX F_CHECK 5 +BEGIN + PROMPT 2 1 "Selezionato " + ITEM " |FALSE" + ITEM "X|TRUE" +END + +NUMBER F_NRIBA 7 +BEGIN + PROMPT 2 2 "Numero RiBa " + FIELD LF_EFFETTI->NPROGTR + FLAGS "D" +END + +DATA F_SCAD +BEGIN + PROMPT 2 3 "Scadenza " + FIELD LF_EFFETTI->DATASCAD + FLAGS "D" +END + +STRING F_CLIENTE 50 40 +BEGIN + PROMPT 2 4 "Cliente " + FLAGS "D" +END + +STRING F_NFATT 7 +BEGIN + PROMPT 2 5 "Numero Fatt. " + FIELD LF_REFFETTI->NFATT + FLAGS "D" +END + +DATA F_DATAFATT +BEGIN + PROMPT 2 6 "Data Fattura " + FIELD LF_REFFETTI->DATAFATT + FLAGS "D" +END + +NUMBER F_NRATA 3 +BEGIN + PROMPT 2 7 "Numero Rata " + FIELD LF_REFFETTI->NRATA + FLAGS "D" +END + +STRING F_VALUTA 3 +BEGIN + PROMPT 2 8 "Valuta " + FIELD LF_EFFETTI->CODVAL + FLAGS "D" +END + +NUMBER F_IMPORTO 18 2 +BEGIN + PROMPT 2 9 "Importo " + FIELD LF_EFFETTI->IMPORTO + FLAGS "D" +END + +NUMBER F_IMPORTOVAL 18 3 +BEGIN + PROMPT 2 9 "Importo Val. " + FIELD LF_EFFETTI->IMPORTOVAL + FLAGS "D" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_DELREC 9 2 +BEGIN + PROMPT -33 -1 "Elimina" + MESSAGE EXIT, K_DEL +END + +ENDPAGE +ENDMASK diff --git a/ef/ef0300c.uml b/ef/ef0300c.uml new file mode 100755 index 000000000..36d6da548 --- /dev/null +++ b/ef/ef0300c.uml @@ -0,0 +1,59 @@ +#include "ef0300.h" + +PAGE "Aggiungi Effetti alla Distinta" -1 -1 78 18 + +GROUPBOX DLG_NULL 60 3 +BEGIN + PROMPT 1 1 "Selezione effetti per data" +END + +DATE F_DADATA +BEGIN + PROMPT 2 2 "Dalla Data " + FIELD LF_EFFETTI->DATASCAD + CHECKTYPE NORMAL +END + +DATE F_ADATA +BEGIN + PROMPT 30 2 "Alla Data " + FIELD LF_EFFETTI->DATASCAD + CHECKTYPE NORMAL +END + +LIST F_TIPORD 14 +BEGIN + PROMPT 2 4 "Tipo Ordinamento " + ITEM " |** Nessuno **" + ITEM "S|Scadenza " + ITEM "F|Fattura " +END + +SPREADSHEET F_SHEET 74 8 +BEGIN + PROMPT 2 6 "EFFETTI SELEZIONABILI" + ITEM " " + ITEM "Nr. Ri.Ba." + ITEM "Scadenza" + ITEM "Cliente@50" + ITEM "Nr. Fattura" + ITEM "Data Fattura" + ITEM "Nr. Rata" + ITEM "Valuta" + ITEM "Importo" + ITEM "Importo Val." +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE +ENDMASK +#include "EF0300B.UML" \ No newline at end of file diff --git a/ef/ef0301.cpp b/ef/ef0301.cpp new file mode 100755 index 000000000..841ba21ef --- /dev/null +++ b/ef/ef0301.cpp @@ -0,0 +1,86 @@ +#include "effetti.h" +#include "reffetti.h" +#include "cession.h" +#include "ef0301.h" + +TDistinta::TDistinta(const TRectype& rec) +{ + read(rec); +} + +TDistinta::TDistinta(const char tipo, const long numero) +{ + read(tipo,numero); +} + +int TDistinta::read(const char tipo, const long numero) +{ + int err = NOERR; + CHECK(tipo!='\0' && numero>0,"Can't read distinta from NULL elements"); + + for (int i=0; err == NOERR ; i++) + { + TEffetto* effetto = new TEffetto; + err = effetto->read(tipo, numero, i+1); + if (err == NOERR) + _righe_dist.add(effetto); + } + if ((_righe_dist.items()>0)||(err == _iseof)) + err = NOERR; + return err; +} + +int TDistinta::read(const TRectype& rec) +{ + CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type"); + const char tipo = rec.get_char(EFF_TIPODIST); + const long numero = rec.get_long(EFF_NDIST); + return read(tipo,numero); +} + +int TDistinta::write(bool force, TToken_string* dati_dist) +{ + int err = NOERR; + const int elem = items(); + for (int i=0; irestart(); + effetto.put("TIPODIST", dati_dist->get()); + effetto.put("NDIST", dati_dist->get_long()); + effetto.put("DATADIST", dati_dist->get()); + effetto.put("CODABIP", dati_dist->get_long()); + effetto.put("CODCABP", dati_dist->get_long()); + effetto.put("NRIGADIST", i+1); + + err = effetto.rewrite(); + } + return err; +} + +int TDistinta::remove(char tipodist, long ndist) +{ + int err= NOERR; + err = reset() == NOERR; + //rimuovo dal file effetti + TLocalisamfile eff(LF_EFFETTI); + eff.put("TIPODIST",tipodist); + eff.put("NDIST",ndist); + eff.read(_isgteq); + char t = eff.get_char("TIPODIST"); + long n = eff.get_long("NDIST"); + while ((t==tipodist)&&(n==ndist)) + { + eff.zero("TIPODIST"); + eff.zero("NDIST"); + eff.zero("DATADIST"); + eff.zero("NRIGADIST"); + eff.zero("CODABIP"); + eff.zero("CODCABP"); + eff.rewrite(); + eff.next(); + t = eff.get_char("TIPODIST"); + n = eff.get_long("NDIST"); + } + return err; +} diff --git a/ef/ef0301.h b/ef/ef0301.h new file mode 100755 index 000000000..cc83a9b90 --- /dev/null +++ b/ef/ef0301.h @@ -0,0 +1,30 @@ +#ifndef __RELATION_H +#include +#endif +#include "ef0101.h" + +class TDistinta:public TObject +{ + TArray _righe_dist; +public: + TArray& righe() + { return _righe_dist;} + //ritorna il numero degli effetti nella distinta (nell'array) + const int items() const + { return _righe_dist.items(); } + //elimina tutti gli effetti nella distinta (appartenti all'array) + int reset() + { return _righe_dist.destroy() == NOERR; } + int read(const char tipo, const long numero); + int read(const TRectype& rec); + int write(bool force = FALSE, TToken_string* dati_dist = NULL); + int rewrite(TToken_string* dati_dist) + { return write(TRUE, dati_dist); } + int remove(char tipodist, long ndist); + const char tipodist() const { return ((TRectype&)_righe_dist[0]).get_char(EFF_TIPODIST); } + const long ndist() const { return ((TRectype&)_righe_dist[0]).get_long(EFF_NDIST); } + TDistinta() {}; + TDistinta(const char tipo, const long numero); + TDistinta(const TRectype& rec); + virtual ~TDistinta() {} +}; \ No newline at end of file