From e2113e918196c3b95befe14d289843ed606c9d6a Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 24 Nov 2005 13:31:14 +0000 Subject: [PATCH] Patch level :2.2 nopatch Files correlati : Ricompilazione Demo : [ ] Commento :stampa pagato in progress git-svn-id: svn://10.65.10.50/trunk@13525 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca0400a.uml | 2 +- ca/ca3600.cpp | 181 +++++++++++++++++++++++++++++---- ca/ca3600.uml | 10 +- ca/ca3600a.rep | 267 +++++++++++++++++++++++++++++++++++++++++++++++++ ca/ca3601.uml | 16 +-- 5 files changed, 441 insertions(+), 35 deletions(-) create mode 100755 ca/ca3600a.rep diff --git a/ca/ca0400a.uml b/ca/ca0400a.uml index 1d59e05c4..f024b7e2f 100755 --- a/ca/ca0400a.uml +++ b/ca/ca0400a.uml @@ -54,7 +54,7 @@ BEGIN ITEM "Gruppo" ITEM "Conto" ITEM "Sottoconto" - ITEM "Descrizione@50" + ITEM "Descrizione@50" END ENDPAGE diff --git a/ca/ca3600.cpp b/ca/ca3600.cpp index 0f7ce054c..34fdb27fb 100755 --- a/ca/ca3600.cpp +++ b/ca/ca3600.cpp @@ -61,8 +61,9 @@ TPag_per_cms_configmask::TPag_per_cms_configmask() disable(F_PIANO); set(F_PIANO, use_pdcc ? "C" : "A"); + //***Parte relativa al prefisso del conto analitico, per ora disabilitata perche' non richiesta // Controllo se voglio (e posso) usare il conto analitico come prefisso di quello contabile - const int pref = cfg.get_int("PdcPrefix"); +/* const int pref = cfg.get_int("PdcPrefix"); if (use_pdcc && pref > 0) { const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA); @@ -88,19 +89,20 @@ TPag_per_cms_configmask::TPag_per_cms_configmask() } } } - } + }*/ // creazione dei campi della pagina della maschera con lo sheet dei conti if (use_pdcc) //usa conti contabili config_loader(sfield(F_PDCC), "Pdcc"); - - short dlg = S_CDC2 + 100; // id del primo campo da generare - int y = 2; - const int nfields = create_sheet_fields(F_PDCA, LF_PCONANA, y, dlg); - sfield(F_PDCA).sheet_mask().hide(-1); - - config_loader(sfield(F_PDCA), "Pdca"); - + else //usa conti analitici + { + short dlg = S_CDC2 + 100; // id del primo campo da generare (maschera di riga dello sheet) + int y = 2; + const int nfields = create_sheet_fields(F_PDCA, LF_PCONANA, y, dlg); + sfield(F_PDCA).sheet_mask().hide(-1); + + config_loader(sfield(F_PDCA), "Pdca"); + } set_handlers(); } @@ -261,25 +263,27 @@ TPag_per_cms_mask::TPag_per_cms_mask() class TPag_per_cms_recordset : public TISAM_recordset { TExternisamfile* _tmp; - bool _riclassificato; -// TString _prefix, _da_conto_riclas, _a_conto_riclas; protected: -// int _tipoconti; -// TDate _dadata, _adata; -// long _danumreg, _anumreg; - TString _daconto, _aconto, _codcosto, _codcms, _codfas; + TDate _dadata, _adata; + long _dacodfor, _acodfor; + TString8 _campodata; + TString _codcosto, _codcms, _codfas; protected: //da libreria // virtual const TVariant& get(const char* column_name) const; protected: void crea_trr(const TFilename& trr) const; + static bool part_callback(const TRelation& rel, void* pJolly); +// static bool mov_callback(const TRelation& rel, void* pJolly); public: virtual void set_filter(const TPag_per_cms_mask& msk, int cms_row); + virtual void set_custom_filter(TCursor& cur) const; + void scan_pags(const TPag_per_cms_mask& msk); - TPag_per_cms_recordset(const TString& sql) : TISAM_recordset(sql), _riclassificato(false) { _tmp = NULL;} + TPag_per_cms_recordset(const TString& sql) : TISAM_recordset(sql) { _tmp = NULL;} ~TPag_per_cms_recordset(); }; @@ -290,16 +294,43 @@ TPag_per_cms_recordset::~TPag_per_cms_recordset() { } +void TPag_per_cms_recordset::set_custom_filter(TCursor& cur) const +{ + relation()->replace(_tmp); //sostituisce il vero file rmovana con quello temporaneo + + //filtro sul file esterno (_tmp, cioè 1000) sui conti selezionati sulla maschera + TRectype darec(cur.curr()), arec(cur.curr()); //curr perchè è il file externisamfile + darec.zero(); + arec.zero(); + + //filtro sulla data(non avendo anche codnum non ho la chiave completa per mettere la data nella setregion) + TString filtro; + if (_dadata.ok()) + filtro << "(ANSI(DATA)>=" << _dadata << ")"; + + if (_adata.ok()) + { + if (filtro.not_empty()) + filtro << "&&"; + filtro << "(ANSI(DATA)<=" << _adata << ")"; + } + + cur.setregion(darec, arec); + cur.setfilter(filtro); + + myself = (TPag_per_cms_recordset*)this; +} + void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const { ofstream of(trr); of << 1000 << endl; of << 14 << endl; + of << "CONTO|1|20|0|Conto analitico/contabile" << endl; + of << "DESCONTO|1|50|0|Descrizione conto" << endl; of << "NREG|3|7|0|Numero registrazione" << endl; of << "DATAPAG|5|8|0|Data pagamento" << endl; of << "DESCRPAG|1|50|0|Descrizione pagamento" << endl; - of << "CONTO|1|20|0|Conto analitico/contabile" << endl; - of << "DESCONTO|1|50|0|Descrizione conto" << endl; of << "NDOC|1|6|0|Numero documento" << endl; of << "DATADOC|5|8|0|Data documento" << endl; of << "PROT|2|5|0|Protocollo iva" << endl; @@ -310,7 +341,89 @@ void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const of << "DESFORN|1|50|0|Descrizione fornitore" << endl; of << "HIDDEN|8|1|0|Record nascosto" << endl; of << 1 << endl; - of << "NREG+DATAPAG" << endl; + of << "CONTO+NREG+DATAPAG+CODFORN" << endl; +} + +//Criptico metodo per la scansione del cursore.. +typedef bool (*SCAN_FUNC)(const TRelation& rel, void* pJolly); + +bool scan_cursor(TCursor& cur, const char* msg, SCAN_FUNC func, void* pJolly) +{ + TRecnotype items = 0; // Temporarily + TProgind pi(items, msg, true, true); + + { + TWait_cursor hourglass; + items = cur.items(); + } + + bool ok = true; + if (items > 0) + { + cur.freeze(); + pi.setmax(items); + for (cur = 0; cur.pos() < items; ++cur) + { + pi.addstatus(1); + if (pi.iscancelled()) + { + ok = false; + break; + } + if (!func(*cur.relation(), pJolly)) + { + ok = false; + break; + } + } + cur.freeze(false); + } + return ok; +} + +bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly) +{ +/* TPag_per_cms* app = (TPag_per_cms*)pJolly; + const TRectype& riga_part_pag = rel.curr(); + + const long nreg = app->find_movimento(riga_part_pag); //prima cerco un movimento della fattura... + if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente + app->find_commesse(nreg, riga_part_pag);*/ + return true; +} + +void TPag_per_cms_recordset::scan_pags(const TPag_per_cms_mask& msk) +{ +//costruzione filtro + TRectype darec(LF_PARTITE); + TRectype arec(LF_PARTITE); + darec.put(PART_TIPOCF, 'F'); + darec.put(PART_GRUPPO, 0); + darec.put(PART_CONTO, 0); + arec = darec; + if (_dacodfor > 0) + darec.put(PART_SOTTOCONTO, _dacodfor); + if (_acodfor >= _dacodfor) + arec.put(PART_SOTTOCONTO, _acodfor); + + TString filtro = "(TIPOMOV>=\"3\")"; //deve essere un pagamento a fornitore!!! + + if (_dadata.ok()) + { + TString80 f; + f.format("&&(ANSI(%s)>=\"%s\")", (const char*)_campodata, _dadata.string(ANSI)); + filtro << f; + } + if (_adata.ok()) + { + TString80 f; + f.format("&&(ANSI(%s)<=\"%s\")", (const char*)_campodata, _adata.string(ANSI)); + filtro << f; + } +//applica il filtro alla relazione + TRelation rel(LF_PARTITE); + TCursor cur(&rel, filtro, 1, &darec, &arec); + scan_cursor(cur, "Movimenti saldacontati...", part_callback, this); } void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, int cms_row) @@ -333,8 +446,9 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, int cms_ro //crea in memoria il nuovo file temporaneo e lo azzera (non si sa mai..) _tmp = new TExternisamfile(dbf, trr); _tmp->zap(); + //prende un po' di dati dalla maschera - _daconto, _aconto, _codcosto = _codcms = _codfas = ""; + _codcosto = _codcms = _codfas = ""; if (cms_row >= 0) { TSheet_field& sf = msk.sfield(F_RIGHE); @@ -347,6 +461,28 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, int cms_ro _codfas = rel.curr().get(RMOVANA_CODFASE); } + //scelta tipo data di estrazione (registrazione, documento, pagamento) + _campodata = PART_DATAREG; + switch(msk.get_int(F_TIPODATA)) + { + case 1:_campodata = PART_DATADOC;break; + case 2:_campodata = PART_DATAPAG;break; + default:break; + } + + //lettura eventuali date limite (il controllo sul loro valore sara' nei metodi di costruzione + //dei filtri + _dadata = msk.get_date(F_DATAINI); + _adata = msk.get_date(F_DATAFIN); + + //scansione movimenti con saldaconto + scan_pags(msk); + + //se c'e' un filtro sui fornitori, non si fa lo scan dei movimenti senza saldaconto + _dacodfor = msk.get_long(F_DACODFOR); + _acodfor = msk.get_long(F_ACODFOR); +// if (_dacodfor == 0 && _acodfor == 0) +// scan_movs(); } //////////////////////////////////////////////////////// @@ -363,17 +499,20 @@ public: void set_filter(const TPag_per_cms_mask& msk, int cms_row); }; + bool TPag_per_cms_rep::get_usr_val(const TString& name, TVariant& var) const { return TAnal_report::get_usr_val(name, var); } + bool TPag_per_cms_rep::set_recordset(const TString& sql) { TPag_per_cms_recordset* rs = new TPag_per_cms_recordset(sql); return TAnal_report::set_recordset(rs); } + void TPag_per_cms_rep::set_filter(const TPag_per_cms_mask& msk, int cms_row) { TAnal_report::set_recordset(NULL); diff --git a/ca/ca3600.uml b/ca/ca3600.uml index 2a4926998..c7e0323de 100755 --- a/ca/ca3600.uml +++ b/ca/ca3600.uml @@ -11,19 +11,19 @@ END BUTTON DLG_PRINT 10 2 BEGIN - PROMPT -13 -1 "~Stampa" - MESSAGE EXIT,K_ENTER + PROMPT -13 -1 "~Stampa" + MESSAGE EXIT,K_ENTER END BUTTON DLG_CONFIG 10 2 BEGIN - PROMPT -23 -1 "~Configura" - PICTURE BMP_CONFIG + PROMPT -23 -1 "~Configura" + PICTURE BMP_CONFIG END BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -33 -1 "" + PROMPT -33 -1 "" END ENDPAGE diff --git a/ca/ca3600a.rep b/ca/ca3600a.rep new file mode 100755 index 000000000..c9e44bbac --- /dev/null +++ b/ca/ca3600a.rep @@ -0,0 +1,267 @@ + + + Pagato CA + +
+ + + + #SYSTEM.RAGSOC + + + #SYSTEM.DATE + + + #REPORT.PAGE + + + + + + + + + + + + + +
+
+ MESSAGE RESET,F1.101 +MESSAGE RESET,F1.102 + + + + + + + #COSTO + CA_FORMAT_COSTO + + + + MESSAGE ISAMREAD,CDC,CODCOSTO=#COSTO,DESCRIZ + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,ANNO + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,REGIVA + + + + #COMMESSA + CA_FORMAT_COMMESSA + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,DESCRIZ + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,DATAINIZIO + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,RENDIC + + + + + #FASE + CA_FORMAT_FASE + + + + MESSAGE ISAMREAD,FASI,CODFASE=#FASE,DESCRIZ + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,DATAFINE + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,CHIUSA + + + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,DATAPROR + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,PROROGA + + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,CODCF + + + + MESSAGE ISAMREAD,CLIFO,TIPOCF=C!CODCF=#101,RAGSOC + +
+
+ CONTO + + MESSAGE RESET,F2.101 +MESSAGE RESET,F2.102 +MESSAGE RESET,F2.103 + + + CONTO + CA_FORMAT_CONTO + + + + DESCONTO + +
+
+ CODNUM+ANNO+NUMRD + +
+
+
+ HIDDEN!='X' + + DATAPAG + + + DESCRPAG + + + NDOC + + + DATADOC + + + PROT + + + TOTDOC + MESSAGE ADD,F2.101 + + + TOTPAG + MESSAGE ADD,F2.102 + + + TOTRES + MESSAGE ADD,F2.103 + + + DESCFORN + + + + NREG + + + CODFORN + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + #103-#101 + + + + #103-#101 + + + + #103-#102 + + + + #103-#102 + + + + #F1.111-#103 + + + + #F1.111-#103 + +
+
+ + + + + + + MESSAGE ADD,F1.101 + + + + MESSAGE ADD,F1.102 + + + + MESSAGE ADD,F1.103 + +
+
+ 0 #B1.100 ! +
+ USE 1000 + \ No newline at end of file diff --git a/ca/ca3601.uml b/ca/ca3601.uml index e117e8b1e..964c09c60 100755 --- a/ca/ca3601.uml +++ b/ca/ca3601.uml @@ -21,7 +21,7 @@ PAGE "Configurazione conti" -1 -1 78 20 LIST F_PIANO 1 12 BEGIN - PROMPT 1 0 "Piano dei conti " + PROMPT 1 1 "Piano dei conti " ITEM "A|Analitico" MESSAGE HIDE,5@|SHOW,6@ ITEM "C|Contabile" @@ -29,11 +29,11 @@ BEGIN FLAGS "G" END -GROUPBOX F_PRE0 76 4 +/*GROUPBOX F_PRE0 76 4 BEGIN PROMPT 1 1 "@bPrefisso del piano dei conti analitico:" GROUP 6 -END +END*/ TEXT -1 BEGIN @@ -41,9 +41,9 @@ BEGIN GROUP 5 END -SPREADSHEET F_PDCC 78 12 +SPREADSHEET F_PDCC 78 -1 BEGIN - PROMPT 1 6 "Pdcc" + PROMPT 1 3 "Pdcc" ITEM "Tipo" ITEM "Gruppo" ITEM "Conto" @@ -58,9 +58,9 @@ BEGIN GROUP 6 END -SPREADSHEET F_PDCA 78 12 +SPREADSHEET F_PDCA 78 -1 BEGIN - PROMPT 1 6 "Pdca" + PROMPT 1 3 "Pdca" ITEM "Tipo" ITEM "Cdc2" ITEM "Cdc3" @@ -204,7 +204,7 @@ END STRING S_CDC5 20 BEGIN PROMPT 1 5 "Cdc5" - FLAGS "B" + FLAGS "BG" CHECKTYPE NORMAL GROUP 1 END