From 10b13bec8edd4e3904dd064cb1be0942ab61fd1e Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 25 Jul 1996 13:05:29 +0000 Subject: [PATCH] Correzzioni al 24/07/96 git-svn-id: svn://10.65.10.50/trunk@3244 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/bollac.src | 26 ++-- ve/fatturac.src | 26 ++-- ve/righedoc.cpp | 192 ++++++++++++++++++++--- ve/sconti.cpp | 172 +++++++++------------ ve/sconti.h | 78 ++++------ ve/tclifor.cpp | 226 ++++++++++++++------------- ve/tclifor.h | 10 +- ve/ve0100.cpp | 115 +++++++------- ve/ve0100.h | 3 +- ve/ve0100c.cpp | 94 ++++++------ ve/ve0300.cpp | 400 ++++++++++++++++++++++++++++++------------------ ve/ve0300a.src | 35 +++-- ve/ve0300c.ini | 2 +- ve/verig.uml | 12 +- 14 files changed, 807 insertions(+), 584 deletions(-) diff --git a/ve/bollac.src b/ve/bollac.src index 7501f0638..911d881cd 100755 --- a/ve/bollac.src +++ b/ve/bollac.src @@ -65,7 +65,7 @@ STATOFINALE=9 // CODCF = S_OBBLIGATORIO // RAGSOC = S_NORMALE OCCASEDIT = S_NORMALE //100 -OCFPI = S_NORMALE //100 +OCFPI = S_NASCOSTO //100 COFI = S_NORMALE //100 STATOPAIV = S_NORMALE //100 PAIVA = S_NORMALE //100 @@ -80,13 +80,13 @@ DENCOM = S_DISABILITATO //100 STATOCF = S_DISABILITATO //100 DESSTATOCF = S_DISABILITATO //100 CODVAL = S_NORMALE //200 -NOME_VAL = S_DISABILITATO //200 +NOME_VAL = S_NORMALE //200 CAMBIO = S_NORMALE //200 DATA_CAMBIO = S_DISABILITATO //200 CODLIN = S_NORMALE //300 -DESLIN = S_DISABILITATO //300 +DESLIN = S_NORMALE //300 CODPAG = S_OBBLIGATORIO //400 -DESCODPAG = S_DISABILITATO //400 +DESCODPAG = S_NORMALE //400 GRSCADENZE = S_NORMALE //500 DATAINSC = S_NORMALE //500 DATASCAD1 = S_DISABILITATO //500 @@ -96,10 +96,10 @@ DATASCAD4 = S_DISABILITATO //500 DATASCAD5 = S_DISABILITATO //500 CODABIA = S_OBBLIGATORIO //600 CODCABA = S_OBBLIGATORIO //600 -DESBANAPP = S_DISABILITATO //600 +DESBANAPP = S_NORMALE //600 CODABIP = S_NORMALE //700 CODCABP = S_NORMALE //700 -DESBANPRE = S_DISABILITATO //700 +DESBANPRE = S_NORMALE //700 CATVEN = S_NORMALE //800 DESCATVEN = S_DISABILITATO //800 CODLIST1 = S_NORMALE //800 @@ -128,21 +128,21 @@ NUMDOCRIF = S_NASCOSTO //1000 CODAGVIS = S_NASCOSTO //1110 DESAGVIS = S_NASCOSTO //1110 CODAG = S_NORMALE //1100 -DESAG = S_DISABILITATO //1100 +DESAG = S_NORMALE //1100 CODSPMEZZO = S_OBBLIGATORIO //1200 -DESSPMEZZO = S_DISABILITATO //1200 +DESSPMEZZO = S_NORMALE //1200 CODPORTO = S_OBBLIGATORIO //1210 -DESPORTO = S_DISABILITATO //1210 +DESPORTO = S_NORMALE //1210 CODNOTESP1 = S_NORMALE //1300 -DESNOTESP1 = S_DISABILITATO //1300 +DESNOTESP1 = S_NORMALE //1300 CODNOTESP2 = S_NASCOSTO //1300 DESNOTESP2 = S_NASCOSTO //1300 CAUSTRASP = S_OBBLIGATORIO //1400 -DENCAUSTRASP = S_DISABILITATO //1400 +DENCAUSTRASP = S_NORMALE //1400 CODVETT1 = S_OBBLIGATORIO //1500 CODVETT2 = S_NASCOSTO //1500 CODVETT3 = S_NASCOSTO //1500 -NOMEVETT1 = S_DISABILITATO //1500 +NOMEVETT1 = S_NORMALE //1500 NOMEVETT2 = S_NASCOSTO //1500 NOMEVETT3 = S_NASCOSTO //1500 NCOPIE = S_OBBLIGATORIO //1600 @@ -156,7 +156,7 @@ DOC2 = S_NASCOSTO //1900 DOC3 = S_NASCOSTO //1900 DATACONS = S_NASCOSTO //2000 ASPBENI1 = S_OBBLIGATORIO //2100 -DESCRBENI1 = S_DISABILITATO //2100 +DESCRBENI1 = S_NORMALE //2100 ASPBENI2 = S_NASCOSTO //2100 DESCRBENI2 = S_NASCOSTO //2100 IMPNETTI = S_NASCOSTO //2200 diff --git a/ve/fatturac.src b/ve/fatturac.src index de4f25fc2..ee2d495de 100755 --- a/ve/fatturac.src +++ b/ve/fatturac.src @@ -1,5 +1,4 @@ #include "veini.h" -#include "veuml2.h" #include "veuml.h" #include "verig.h" @@ -63,9 +62,9 @@ STATOFINALE=9 OCCASEDIT = S_NORMALE //100 OCFPI = S_NORMALE //100 -COFI = S_DISABILITATO //100 -STATOPAIV = S_DISABILITATO //100 -PAIVA = S_DISABILITATO //100 +COFI = S_NORMALE //100 +STATOPAIV = S_NORMALE //100 +PAIVA = S_NORMALE //100 GRRECAPITO = S_NORMALE //100 INDCF = S_DISABILITATO //100 CIVCF = S_DISABILITATO //100 @@ -75,15 +74,15 @@ PROVCOM = S_DISABILITATO //100 COMCF = S_DISABILITATO //100 DENCOM = S_DISABILITATO //100 STATOCF = S_DISABILITATO //100 -//DESSTATOCF = S_DISABILITATO //100 +DESSTATOCF = S_DISABILITATO //100 CODVAL = S_NORMALE //200 -NOME_VAL = S_DISABILITATO //200 +NOME_VAL = S_NORMALE //200 CAMBIO = S_NORMALE //200 DATA_CAMBIO = S_DISABILITATO //200 CODLIN = S_NORMALE //300 -DESLIN = S_DISABILITATO //300 +DESLIN = S_NORMALE //300 CODPAG = S_OBBLIGATORIO //400 -DESCODPAG = S_DISABILITATO //400 +DESCODPAG = S_NORMALE //400 GRSCADENZE = S_NORMALE //500 DATAINSC = S_NORMALE //500 DATASCAD1 = S_DISABILITATO //500 @@ -93,10 +92,10 @@ DATASCAD4 = S_DISABILITATO //500 DATASCAD5 = S_DISABILITATO //500 CODABIA = S_OBBLIGATORIO //600 CODCABA = S_OBBLIGATORIO //600 -DESBANAPP = S_DISABILITATO //600 +DESBANAPP = S_NORMALE //600 CODABIP = S_NORMALE //700 CODCABP = S_NORMALE //700 -DESBANPRE = S_DISABILITATO //700 +DESBANPRE = S_NORMALE //700 CATVEN = S_NORMALE //800 DESCATVEN = S_DISABILITATO //800 CODLIST1 = S_NORMALE //800 @@ -109,13 +108,13 @@ CODCAMP = S_NORMALE //820 DESCAMP = S_DISABILITATO //820 SCONTOPERC = S_NORMALE //830 CODAG = S_NORMALE //1100 -DESAG = S_DISABILITATO //1100 +DESAG = S_NORMALE //1100 CODPORTO = S_OBBLIGATORIO //1210 -DESPORTO = S_DISABILITATO //1210 +DESPORTO = S_NORMALE //1210 CODVETT1 = S_NORMALE //1500 CODVETT2 = S_NASCOSTO //1500 CODVETT3 = S_NASCOSTO //1500 -NOMEVETT1 = S_DISABILITATO //1500 +NOMEVETT1 = S_NORMALE //1500 NOMEVETT2 = S_NASCOSTO //1500 NOMEVETT3 = S_NASCOSTO //1500 NCOPIE = S_OBBLIGATORIO //1600 @@ -172,6 +171,7 @@ NHANDLER=0 1 = F_ORAPART|1 [PROFILOGRUPPO] +101 = S_NASCOSTO 100 = S_NORMALE 200 = S_NORMALE 300 = S_NORMALE diff --git a/ve/righedoc.cpp b/ve/righedoc.cpp index cc6e6e6e8..a378ddfa2 100755 --- a/ve/righedoc.cpp +++ b/ve/righedoc.cpp @@ -29,39 +29,143 @@ static void row_set_handler( TMask& m, const int field, const int index ) yesnofatal_box( FALSE, "Funzione di handler sulla riga non definita( %d ).", index ); } } - -static bool riga_des_handler( TMask_field& f, KEY key ) + +HIDDEN TString16 curr_um; +HIDDEN real curr_fc(1.0); + +HIDDEN bool codart_handler( TMask_field& f, KEY key ) { - TMask& m = f.mask( ); // Se qualcuno cerca di modificare la maschera - if ( key == K_SPACE && m.is_running( ) ) - { - TString val( f.get( ) ); - if ( val.len( ) >= 49 ) + if ( key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask( ); + TMask & mask = app().edit_mask(); + TCond_vendita condv(app().clifo(), &mask, &row_mask); + + condv.calcola(); + row_mask.set(FR_SCONTO, condv.get_sconto()); + row_mask.set(FR_PREZZO, condv.get_prezzo()); + + const TString16 lingua = mask.get(F_CODLIN); + TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file(); + + if (anamag.bad() || (anamag.get("CODART") != f.get())) { - TMask m1( "VE1000C" ); - m1.set( 101, f.get( ) ); - KEY k = m1.run( ); - if ( k == K_SAVE ) - f.set( m1.get( 101 ) ); + anamag.zero(); + anamag.put("CODART", f.get()); + if (anamag.read() != NOERR) + anamag.zero(); + } + if (anamag.curr().empty()) + { + TLocalisamfile codalt(LF_CODCORR); + + codalt.setkey(2); + codalt.put("CODARTALT", f.get()); + if (codalt.read() == NOERR) + { + const TString80 codart(codalt.get("CODART")); + anamag.zero(); + anamag.put("CODART", codart); + if (anamag.read() == NOERR) + f.set(codart); + else + anamag.zero(); + } } - } + TString desc(anamag.get("DESCR")); + + if (lingua.not_empty()) + { + TLocalisamfile deslin(LF_DESLIN); + + deslin.setkey(2); + deslin.put("CODART", row_mask.get(FR_CODART)); + deslin.put("CODLIN", lingua); + if (deslin.read() == NOERR) + desc = deslin.get("DESCR"); + } + row_mask.set(FR_DESCR, desc); + TLocalisamfile umart(LF_UMART); + + umart.zero(); + umart.put("CODART", row_mask.get(FR_CODART)); + TRectype cmp_rec(umart.curr()); + curr_um.cut(0); + curr_fc = 1.0; + if (umart.read(_isgteq) == NOERR && umart.curr() == cmp_rec) + { + curr_um = umart.get("UM"); + curr_fc = umart.get_real("FC"); + row_mask.set(FR_UMQTA, curr_um); + } + } + return TRUE; } -static bool riga_art_handler( TMask_field& f, KEY key ) + +HIDDEN bool umart_handler( TMask_field& f, KEY key ) { - TMask& m = f.mask( ); // Se qualcuno cerca di modificare la maschera - if ( key == K_TAB ) // && m.is_running( ) ) + if ( key == K_TAB && f.focusdirty()) { - TSconto_riga r( app( ).clifo( ), &app( ).edit_mask( ), &m ); - r.calcola( ); - f.mask( ).set( FR_SCONTO, r.get( ) ); - } + TMask& row_mask = f.mask( ); + TCond_vendita condv(app().clifo(), &app().edit_mask(), &row_mask); + if (condv.gestum()) + { + condv.calcola(); + row_mask.set(FR_SCONTO, condv.get_sconto()); + row_mask.set(FR_PREZZO, condv.get_prezzo()); + } + const TString16 um(f.get()); + real fc(1.0); + + if (um.not_empty() && curr_um.not_empty() && um != curr_um) + { + TLocalisamfile umart(LF_UMART); + + umart.setkey(2); + umart.put("CODART", row_mask.get(FR_CODART)); + umart.put("UM", um); + if (umart.read() == NOERR) + { + real qta(row_mask.get_real(FR_QTA)); + qta *= curr_fc; + fc = umart.get_real("FC"); + qta /= fc; + row_mask.set(FR_QTA, qta); + } + + } + curr_um = um; + curr_fc = fc; + } return TRUE; } +HIDDEN bool descr_handler( TMask_field& f, KEY key ) +{ + if (key == K_TAB && f.focusdirty()) + { + const TString s(f.get()); + if (s.find('\n') < 0) + { + TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file(); + + anamag.zero(); + anamag.setkey(2); + anamag.put("DESCR", ((TZoom_field &) f).get_first_line()); + if (anamag.read() == NOERR) + { + f.mask().set(FR_CODART, anamag.get("CODART")); + f.mask().field(FR_CODART).set_dirty(); + f.mask().check_field(FR_CODART); + } + } + } + return TRUE; +} void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r) { @@ -75,7 +179,22 @@ void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r) codmag << row.get( f.cid2index(FR_CODDEP )); _data.put( "CODMAG", codmag); _data.put( "CODART", row.get( f.cid2index(FR_CODART )) ); - _data.put( "DESCR", row.get( f.cid2index(FR_DESCR )) ); + TString s(row.get(f.cid2index(FR_DESCR))); + int split_pos = s.find('\n'); + if (split_pos > 0) + { + _data.put( "DESCR", s.left(split_pos)); + _data.put("DESCLUNGA", "X"); + s.ltrim(split_pos); + _data.put("DESCEST", s); + } + else + { + _data.put("DESCR", s); + _data.put("DESCLUNGA", ""); + _data.zero("DESCEST"); + } + _data.put( "PREZZO", row.get( f.cid2index(FR_PREZZO )) ); _data.put( "UMQTA", row.get( f.cid2index(FR_UMQTA )) ); _data.put( "QTA", row.get( f.cid2index(FR_QTA )) ); @@ -94,7 +213,7 @@ void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r) carica_profilo( ); _piede.destroy( ); somma( _piede ); -// _piede.put( "G1", _piede.string( ) ); + _data.put( "G1", _piede.string( ) ); if (r) *r = _data; @@ -108,7 +227,10 @@ void TRiga::save(TSheet_field & f, TToken_string& row ) row.add( codmag.left(3), f.cid2index(FR_CODMAG )); row.add( codmag.mid(3), f.cid2index(FR_CODDEP )); row.add( _data.get( "CODART" ), f.cid2index(FR_CODART )); - row.add( _data.get( "DESCR" ), f.cid2index(FR_DESCR )); + TString s(_data.get("DESCR")); + if (_data.get_bool("DESCLUNGA")) + s << _data.get("DESCEST"); + row.add(s, f.cid2index(FR_DESCR )); row.add( _data.get( "UMQTA" ), f.cid2index(FR_UMQTA )); row.add( _data.get( "PREZZO" ), f.cid2index(FR_PREZZO )); row.add( _data.get( "QTA" ), f.cid2index(FR_QTA )); @@ -124,7 +246,7 @@ void TRiga::save(TSheet_field & f, TToken_string& row ) row.add( _data.get( "CODIVA" ), f.cid2index(FR_CODIVA )); row.add( _data.get( "ADDIVA" ), f.cid2index(FR_ADDIVA )); row.add( _data.get( "ASPBENI" ), f.cid2index(FR_ASPBENI )); -// row.add( _piede.string( ), f.cid2index(FR_G1 )); rimettere + // row.add( _piede.string( ), f.cid2index(FR_G1 )); } void TRiga::load( const TRectype& rec ) @@ -245,8 +367,28 @@ TMask * TRiga::getmask( ) chiave.format( "%d", i ); TToken_string riga = _pro->get( chiave, "HANDLERS" ); row_set_handler( *mask, riga.get_int( 0 ), riga.get_int( 1 ) ); + } + const TMask_field & f = mask->field(FR_CODART); + if (f.is_edit()) + { + TBrowse * browse = ((TEdit_field &) f).browse(); + + if (browse ) + { + TCursor * cur = browse->cursor(); + CHECK(cur, "Null cursor in CODART check"); + if (cur) + { + const int num = cur->file().num(); + if (num == LF_ANAMAG) + { + mask->set_handler( FR_CODART, codart_handler ); + mask->set_handler( FR_UMQTA, umart_handler ); + mask->set_handler( FR_DESCR, descr_handler ); + } + } + } } - mask->set_handler( FR_DESCR, riga_des_handler ); return mask; } diff --git a/ve/sconti.cpp b/ve/sconti.cpp index cebdd8170..5c78b83dc 100755 --- a/ve/sconti.cpp +++ b/ve/sconti.cpp @@ -24,9 +24,9 @@ #define A_ANAMAG 0 -const real TSconto::cento( "100" ); +HIDDEN const real CENTO(100.0); -void TSconto::set( const TString& exp, bool signal ) +void TCond_vendita::set_sconto( const char * exp, bool signal ) { TString work( exp ); TString goodexp; @@ -34,6 +34,12 @@ void TSconto::set( const TString& exp, bool signal ) // Elimina gli spazi molesti work.strip_spaces( ); + if (work.empty()) + { + _sconto = ""; + return; + } + // Per ora nessun errore _errorpos = -1; @@ -57,7 +63,7 @@ void TSconto::set( const TString& exp, bool signal ) { // Aggiunge il numero alla sequenza real newval( num ); - _part = _part * ( cento + newval ) / cento; + _part = _part * ( CENTO + newval ) / CENTO; if( newval >= 0 ) goodexp << '+'; goodexp << num; @@ -111,12 +117,12 @@ void TSconto::set( const TString& exp, bool signal ) { // Aggiunge l'ultimo numero preso real lastval( num ); - _part = _part * ( cento + lastval ) / cento; + _part = _part * ( CENTO + lastval ) / CENTO; if( lastval >= 0 ) goodexp << '+'; goodexp << num; // Assegna la nuova espressione formattata bene - _exp = goodexp; + _sconto = goodexp; } else { @@ -125,35 +131,28 @@ void TSconto::set( const TString& exp, bool signal ) } } -real TSconto::sconto( ) +real TCond_vendita::sconto_val( ) { CHECK(is_valid( ),"Tentativo di usare uno sconto non valido!" ); - return ( ( _part * cento ) - cento ); + return ( ( _part * CENTO ) - CENTO ); } -TSconto_riga::TSconto_riga( TCliFor& clifo, TMask * testa, TMask * riga ) : _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _anamag( LF_ANAMAG ), _sconti( LF_SCONTI ), _ditta( CONFIG_DITTA ) +bool TCond_vendita::cerca( int tiporicerca ) { - _clifo = &clifo; - _testa = testa; - _riga = riga; -} - -bool TSconto_riga::cerca_condv( int tiporicerca ) -{ - TString s1 = _anamag.get( "CODART" ); - TString s2 = riga( ).get( FR_CODART ); - if( s1 != s2 ) + TString codart = _anamag.get( "CODART" ); + TString codriga = riga( ).get( FR_CODART ); + if( codriga != codart ) { _anamag.setkey( 1 ); _anamag.zero( ); - _anamag.put( "CODART", riga( ).get( FR_CODART ) ); - int ret = _anamag.read( ); - CHECK( ret == NOERR, "Articolo non trovato in anagrafica di magazzino!" ); + _anamag.put( "CODART", codriga ); + if (_anamag.read( ) != NOERR) + _anamag.zero(); } if( tiporicerca == A_ANAMAG ) // Se ricercavo per anagrafica, ho gi` finito - return TRUE; + return !_anamag.curr().empty(); if( _ditta.get_bool( "GES", "ve", tiporicerca ) ) { // Se h attiva la gestione contratti ... @@ -163,19 +162,13 @@ bool TSconto_riga::cerca_condv( int tiporicerca ) { case A_CONTRATTI: _condv.put( "TIPO", "C" ); - _condv.blank( "CATVEN" ); if( _ditta.get_bool( "GESSCONCC", "ve" ) ) { // Se in ditta h abilitata la gestione del cliente in chiave // al contratto, lo carico con gioia _condv.put( "TIPOCF", clifo( ).tipocf( ) ); - _condv.put( "CODCF", clifo( ).codcf( ) ); - } - else - { - _condv.blank( "TIPOCF" ); - _condv.blank( "CODCF" ); - } + _condv.put( "CODCF", clifo( ).codcf( ) ); + } _condv.put( "COD", testa( ).get( F_CODCONT ) ); break; case A_LISTINI: @@ -187,19 +180,10 @@ bool TSconto_riga::cerca_condv( int tiporicerca ) _condv.put( "TIPOCF", clifo( ).tipocf( ) ); _condv.put( "CODCF", clifo( ).codcf( ) ); } - else - { - _condv.blank( "TIPOCF" ); - _condv.blank( "CODCF" ); - } - _condv.blank( "CATVEN" ); _condv.put( "COD", testa( ).get( F_CODLIST ) ); break; case A_OFFERTE: _condv.put( "TIPO", "O" ); - _condv.blank( "CATVEN" ); - _condv.blank( "TIPOCF" ); - _condv.blank( "CODCF" ); _condv.put( "COD", testa( ).get( F_CODCAMP ) ); break; } @@ -212,22 +196,11 @@ bool TSconto_riga::cerca_condv( int tiporicerca ) _rcondv.put( "TIPOCF", _condv.get( "TIPOCF" ) ); _rcondv.put( "CODCF", _condv.get( "CODCF" ) ); if( _condv.get_bool( "GESTUM" ) ) - { _rcondv.put( "UM", riga( ).get( FR_UMQTA ) ); - } - else - { - _rcondv.blank( "UM" ); - } - if( _condv.get_bool( "GESTSCA" ) ) - { + if( _condv.get_bool( "GESTSCAGL" ) ) _rcondv.put( "QLIM", riga( ).get( FR_QTA ) ); - } - else - { - _rcondv.blank( "QLIM" ); - } const TString16 seqricrighe( _condv.get( "SEQRIC" ) ); + for( int i = 0; i < seqricrighe.len( ); i ++ ) { @@ -236,84 +209,91 @@ bool TSconto_riga::cerca_condv( int tiporicerca ) switch( ricerca ) { case 'A': - _rcondv.put( "CODRIGA", _anamag.get( "CODART" ) ); + _rcondv.put( "CODRIGA", codriga); if( _rcondv.read( ) == NOERR ) return TRUE; + if( _rcondv.prev() == NOERR && _rcondv.get("TIPORIGA")[0] == 'A') + { + const TString cod_found(_rcondv.get("CODRIGA")); + + return cod_found.compare(codriga, cod_found.len()) == 0; + } break; case 'R': _rcondv.put( "CODRIGA", _anamag.get( "RAGGFIS" ) ); if( _rcondv.read( ) == NOERR ) return TRUE; break; - case 'G': - _rcondv.put( "CODRIGA", _anamag.get( "GRMERC1" ) ); - if( _rcondv.read( ) == NOERR ) return TRUE; - _rcondv.put( "CODRIGA", _anamag.get( "GRMERC2" ) ); - if( _rcondv.read( ) == NOERR ) return TRUE; - _rcondv.put( "CODRIGA", _anamag.get( "GRMERC3" ) ); - if( _rcondv.read( ) == NOERR ) return TRUE; + case 'G': + { + const TRectype rec_to_found(_rcondv.curr()); + + _rcondv.put( "CODRIGA", _anamag.get( "GRMERC1" ) ); + if( _rcondv.read( ) == NOERR ) return TRUE; + _rcondv.curr() = rec_to_found; + _rcondv.put( "CODRIGA", _anamag.get( "GRMERC2" ) ); + if( _rcondv.read( ) == NOERR ) return TRUE; + _rcondv.curr() = rec_to_found; + _rcondv.put( "CODRIGA", _anamag.get( "GRMERC3" ) ); + if( _rcondv.read( ) == NOERR ) return TRUE; + } break; default: - CHECK( FALSE, "Tipo di ricerca righe non valido!" ); + error_box("Tipo di ricerca righe %c non valido", ricerca ); + break; } } - // Ricerca fallita - return FALSE; } - else - // Ricerca fallita - return FALSE; } - else - // La ricerca non h gestita, impossibile trovarlo ... - return FALSE; + // Ricerca fallita + return FALSE; } // Probabilmente dovrebbe lavorare sulla maschera, ma per ora la lasciamo cosl -void TSconto_riga::calcola( ) +void TCond_vendita::calcola( ) { - char gestione = _ditta.get_char( "GESSCORIGA", "ve" ); - bool trovato = TRUE; + const char gestione = _ditta.get_char( "GESSCORIGA", "ve" ); + + set_sconto(""); + const bool condv_found = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI); + set_prezzo(condv_found ? _rcondv.get_real( "PREZZO") : ZERO); + switch( gestione ) { case 'N': // Sconti di riga non gestiti - set( "" ); break; case 'L': - // Percentuale su contratti/offerte/listini/anagrafica - trovato = cerca_condv( A_CONTRATTI ); - if( !trovato ) trovato = cerca_condv( A_OFFERTE ); - if( !trovato ) trovato = cerca_condv( A_LISTINI ); - if( !trovato ) - set( _rcondv.get( "SCONTO" ) ); + // Percentuale su contratti/offerte/listini/anagrafica + if (condv_found) + set_sconto( _rcondv.get( "SCONTO" ) ); else - { - if( cerca_condv( A_ANAMAG ) ) - set( _anamag.get( "SCONTO" ) ); - else - CHECK( FALSE, "Sconto non trovato!( 1 )" ); - } + if(cerca( A_ANAMAG )) + set_sconto( _anamag.get("SCONTO")); break; case 'A': // Posiziono l'anagrafica - cerca_condv( A_ANAMAG ); _sconti.setkey( 1 ); _sconti.put( "TIPO", "R" ); - _sconti.put( "CODART", _anamag.get( "CODART" ) ); + _sconti.put( "CODART", riga().get(FR_CODART)); if( _ditta.get_bool( "GESSCORIGACV", "ve" ) ) - { _sconti.put( "CODCAT", clifo( ).get( LF_CFVEN, "SCONTO" ) ); - } if( _ditta.get_bool( "GESSCORIGAUM", "ve" ) ) - { _sconti.put( "UM", riga( ).get( FR_UMQTA ) ); - } if( _sconti.read( ) == NOERR ) - // Bravo, hai vinto una bambolina - set( _sconti.get( "SCONTO" ) ); - else - CHECK( FALSE, "Sconto non trovato!( 2 )" ); + set_sconto( _sconti.get("SCONTO") ); break; case 'C': - set( clifo( ).get( LF_CFVEN, "SCONTO" ) ); + set_sconto(clifo( ).get(LF_CFVEN, "SCONTO")); + break; + default: + error_box( FALSE, "Tipo di gestione sconti %c non valido!", gestione ); + break; } } + +TCond_vendita::TCond_vendita( TCliFor& clifo, TMask * testa, TMask * riga ) : _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _anamag( LF_ANAMAG ), _sconti( LF_SCONTI ), _ditta( CONFIG_DITTA ) +{ + _clifo = &clifo; + _testa = testa; + _riga = riga; +} + diff --git a/ve/sconti.h b/ve/sconti.h index 4701db421..11b1691ea 100755 --- a/ve/sconti.h +++ b/ve/sconti.h @@ -17,59 +17,47 @@ #include #endif - -#define CHKVALID CHECK( _valid, "Tentativo di usare uno sconto non valido!" ) - -class TSconto : public TObject +class TCond_vendita : public TObject { -private: - - TString _exp; + TString _sconto; + real _prezzo; bool _valid; int _errorpos; real _part; - static const real cento; - -public: - - TString& get( void ){ CHKVALID; return _exp; } - void set( const TString& exp, bool signal = FALSE ); - bool is_valid( ){ return _valid; } - real sconto( ); - char * scontostr( int len = 0, int dec = UNDEFINED, char pad = ' ' ){ CHKVALID; real p(sconto()); return p.stringa( len, dec, pad ); } - -}; - -#undef CHKVALID - -class TSconto_riga : public TSconto -{ - private: - TCliFor* _clifo; + TCliFor* _clifo; // TRelation _condv; // Invece che la relazione uso i due files, poichè mi interessa sempre // solo una delle righe - TLocalisamfile _condv; - TLocalisamfile _rcondv; - TLocalisamfile _anamag; - TLocalisamfile _sconti; - TConfig _ditta; - TMask* _testa; - TMask* _riga; - - protected: + TLocalisamfile _condv; + TLocalisamfile _rcondv; + TLocalisamfile _anamag; + TLocalisamfile _sconti; + TConfig _ditta; + TMask* _testa; + TMask* _riga; + + bool cerca( int tiporicerca ); - public: +public: - TSconto_riga( TCliFor& clifo, TMask * testa = NULL, TMask * riga = NULL ); - - TCliFor& clifo( ){ return *_clifo; } - void set_testa( TMask& testa ){ _testa = &testa; } - TMask& testa( ){ return *_testa; } - void set_riga( TMask& riga ){ _riga = &riga; } - TMask& riga( ){ return *_riga; } - bool cerca_condv( int tiporicerca ); - void calcola( ); + TString& get_sconto( void ) { return _sconto; } + void set_sconto( const char * exp, bool signal = FALSE ); + real get_prezzo() { return _prezzo; } + void set_prezzo(const real & prezzo) { _prezzo = prezzo; } + bool is_valid( ){ return _valid; } + real sconto_val( ); + const char * sconto_str( int len = 0, int dec = UNDEFINED, char pad = ' ' ){ real p(sconto_val()); return p.stringa( len, dec, pad ); } + + TCliFor& clifo( ){ return *_clifo; } + void set_testa( TMask& testa ){ _testa = &testa; } + TMask& testa( ){ return *_testa; } + void set_riga( TMask& riga ){ _riga = &riga; } + TMask& riga( ){ return *_riga; } + void calcola( ); + bool gestum() { return _condv.get_bool("GESTUM"); } + + TCond_vendita( TCliFor& clifo, TMask * testa = NULL, TMask * riga = NULL ); + ~TCond_vendita() {} }; -#endif +#endif diff --git a/ve/tclifor.cpp b/ve/tclifor.cpp index 9987f34d5..fe0ab098e 100755 --- a/ve/tclifor.cpp +++ b/ve/tclifor.cpp @@ -16,19 +16,12 @@ const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field ) { - if( table != _tablename ) - { - delete _table; - _table = new TTable( table ); - _tablename = table; - } - if( codtab != _table->curr( ).get( "CODTAB" ) ) - { - _table->zero( ); - _table->put( "CODTAB", codtab ); - _table->read( ); - } - return _table->get( field ); + TTable tab(table); + tab.zero(); + tab.put( "CODTAB", codtab); + if (tab.read() != NOERR) + tab.zero(); + return tab.get( field ); }; const TString& TData_picker::get( const int file, const TString& fieldname ) @@ -52,39 +45,53 @@ bool TData_picker::get_bool( const int file, const TString& fieldname ) } int TCliFor::write_occas( ) -{ - if( !occasionale( ) ) - return NOERR; - TRelation occas( LF_OCCAS ); - occas_mask( ).autosave( occas ); - return occas.write( ); +{ + int err = NOERR; + if(occasionale()) + { + TRelation occas( LF_OCCAS ); + occas_mask( ).autosave( occas ); + err = occas.write( ); + if (err == _isreinsert) + err = occas.rewrite(); + } + return err; } -TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" ) +TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" ), + _tipocf(' '), _codcf(0L) { _occas_mask.set_handler( O_CODICE, occas_code_handler ); add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" ); } -void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi ) -{ +bool TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi ) +{ + _valid = FALSE; + _tipocf = tipocf; _codcf = codcf; - zero( ); + zero( ); + if (tipocf == ' ' || codcf == 0L) + return TRUE; curr( ).put( "TIPOCF", tipocf ); curr( ).put( "CODCF", codcf ); lfile( ).setkey( 1 ); - if( read( ) != NOERR ) - yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf ); - _occas = curr().get_bool( "OCCAS" ); - if ( occasionale( ) ) + if( read( ) == NOERR ) { - TRelation occrel( LF_OCCAS ); - occrel.curr( ).zero( ); - occrel.curr( ).put( "CFPI", ocfpi ); - occrel.read( ); - occas_mask( ).autoload( occrel ); - } + _occas = curr().get_bool( "OCCAS" ); + if ( occasionale( ) ) + { + TRelation occrel( LF_OCCAS ); + occrel.curr().zero(); + occrel.curr().put( "CFPI", ocfpi ); + if (occrel.read() != NOERR) + occrel.curr().zero(); + occas_mask().autoload( occrel ); + } + _valid = TRUE; + } + return _valid; } void TCliForVendite::update_mask( TMask& m, bool onload ) @@ -98,8 +105,9 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) // In forse per l'Occasionale, sicuri per il Normale m.show( F_COFI, !occas ); m.show( F_STATOPAIVA, !occas ); - m.show( F_PAIVA, !occas ); + m.show( F_PAIVA, !occas ); set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" ); + m.enable(F_RAGSOC, !occas); if( !onload ) { set( m, F_CODVAL, LF_CLIFO, "CODVAL" ); @@ -128,6 +136,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) { m.set( F_COFI, "" ); m.set( F_PAIVA, "" ); + m.set( F_LOCALITACF, ""); m.set( F_OCFPI, occas_mask( ).get( O_CODICE ) ); m.set( F_RAGSOC, occas_mask( ).get( O_RAGSOC ) ); m.set( F_INDCF, occas_mask( ).get( O_INDIRIZZO ) ); @@ -149,8 +158,9 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) stato = get( LF_CLIFO, "STATOCF" ); m.set( F_STATOCF, stato ); } - if ( !stato.blank( ) ) - m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) ); +// m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) ); + m.check_field(F_COMCF); + m.check_field(F_STATOCF); m.check_field( F_CODPAG ); m.check_field( F_CODLIN ); // m.check_field( F_CODABIA ); @@ -166,7 +176,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) m.check_field( F_CODVETT1 ); m.check_field( F_CODVETT2 ); m.check_field( F_CODVETT3 ); - imposta_dati_comune( m ); +// imposta_dati_comune( m ); imposta_indirizzo_spedizione( m ); imposta_sconto_testa( m ); imposta_valuta( m ); @@ -212,18 +222,21 @@ void TCliForVendite::imposta_dati_comune( TMask& m ) comuni.put( "COM", get( LF_CLIFO, "COMCF" )); comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) ); } - comuni.read( ); + if (comuni.read() != NOERR) + comuni.zero(); m.set( F_DENCOM, comuni.get( "DENCOM" ) ); m.set( F_PROVCOM, comuni.get( "PROVCOM" ) ); } void TCliForVendite::imposta_indirizzo_spedizione( TMask& m ) { - TString16 stato; - if( occasionale( ) ) + TString16 stato; + const bool occas = occasionale(); + + m.enable( F_CODINDSP , !occas); + if( occas ) { m.set( F_CODINDSP, "" ); - m.disable( F_CODINDSP ); m.set( F_RAGSOCSP, occas_mask( ).get( O_RAGSOC ) ); m.set( F_INDSP, occas_mask( ).get( O_INDIRIZZO ) ); m.set( F_CIVSP, occas_mask( ).get( O_NUMERO ) ); @@ -231,11 +244,14 @@ void TCliForVendite::imposta_indirizzo_spedizione( TMask& m ) m.set( F_LOCALITASP, "" ); m.set( F_CAPSP, occas_mask( ).get( O_CAP ) ); m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) ); + m.check_field(F_COMSP); m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) ); + m.check_field(F_STATOSP); } +/* else { - TString16 codindsp( m.get( F_CODINDSP ) ); + const TString codindsp( m.get( F_CODINDSP ) ); if( codindsp.blank( ) ) { m.set( F_RAGSOCSP, "" ); @@ -254,99 +270,91 @@ void TCliForVendite::imposta_indirizzo_spedizione( TMask& m ) indsped.put( "TIPOCF", _tipocf ); indsped.put( "CODCF", _codcf ); indsped.put( "CODIND", atoi( codindsp ) ); - if( indsped.read( ) != NOERR ) - yesnofatal_box( "Indirizzo di spedizione non trovato!" ); - m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) ); - m.set( F_INDSP, indsped.get( "INDIR" ) ); - m.set( F_CIVSP, indsped.get( "CIV" ) ); - m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) ); - m.set( F_CAPSP, indsped.get( "CAP" ) ); - m.set( F_COMSP, indsped.get( "COM" ) ); - m.set( F_STATOSP, stato = indsped.get( "STATO" ) ); + if( indsped.read( ) == NOERR ) + { + m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) ); + m.set( F_INDSP, indsped.get( "INDIR" ) ); + m.set( F_CIVSP, indsped.get( "CIV" ) ); + m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) ); + m.set( F_CAPSP, indsped.get( "CAP" ) ); + m.set( F_COMSP, indsped.get( "COM" ) ); + m.set( F_STATOSP, stato = indsped.get( "STATO" ) ); + } + else + error_box( "Indirizzo di spedizione non trovato!" ); } } - if ( !stato.blank( ) ) - m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) ); + m.check_field(F_COMSP); + m.check_field(F_STATOSP); + m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) ); TLocalisamfile comuni(LF_COMUNI); comuni.setkey( 1 ); comuni.put( "COM", m.get( F_COMSP ) ); comuni.put( "STATO", m.get( F_STATOSP ) ); - comuni.read( ); + if (comuni.read( ) != NOERR) + comuni.zero(); m.set( F_DENCOMSP, comuni.get( "DENCOM" ) ); m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) ); +*/ } void TCliForVendite::imposta_sconto_testa( TMask& m ) { - TConfig ditta( CONFIG_DITTA ); - TString16 codsconto; - TString16 codart; + TConfig ditta(CONFIG_DITTA); - char tipogestione = ditta.get( "GESSCO", "ve" )[ 0 ]; + const char tipogestione = ditta.get("GESSCO", "ve")[ 0 ]; switch( tipogestione ) { case 'N': // Sconti non gestiti: pussa via! - return; break; case 'P': // Percentuale su anagrafica cliente m.set( F_SCONTOPERC, get( LF_CFVEN, "SCONTO" ) ); - return; break; case 'T': // Gestione tabella sconti - codsconto = get( LF_CFVEN, "CODSCC" ); - if( !codsconto.blank( ) ) { - // ARCHIVIO SVCONTI PER SCONTO CLIENTE - // TLocalisamfile sconti( LF_SCONTI ); - // sconti.setkey( 1 ); - // sconti.zero( ); - // sconti.put( "TIPO", "D" ); - // sconti.put( "CODCAT", codsconto ); - // if( sconti.read( ) == NOERR ) - // m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) ); - // else - // message_box( "Sconto non trovato nella tabella sconti!" ); - TTable sconti( "%SCC" ); - sconti.setkey( 1 ); - sconti.zero( ); - // sconti.put( "TIPO", "D" ); - sconti.put( "CODTAB", codsconto ); - if( sconti.read( ) == NOERR ) - m.set( F_SCONTOPERC, sconti.get( "S1" ) ); - #ifdef DBG - else - message_box( "Sconto non trovato nella tabella sconti!" ); - #endif + const TString16 codsconto(get(LF_CFVEN, "CODSCC")); + + if (codsconto.not_empty()) + { + TTable sconti("%SCC"); + sconti.setkey(1); + sconti.zero(); + // sconti.put( "TIPO", "D" ); + sconti.put("CODTAB", codsconto); + if (sconti.read( ) == NOERR) + m.set(F_SCONTOPERC, sconti.get("S1")); + } } - return; break; case 'A': // Gestione archivio sconti - TLocalisamfile sconti( LF_SCONTI ); - sconti.setkey( 1 ); - sconti.zero( ); - sconti.put( "TIPO", "I" ); - if( ditta.get_bool( "SCOKEY", "ve", 1 ) ) - sconti.put( "CODCAT", get( LF_CFVEN, "CATVEN" ) ); - if( ditta.get_bool( "SCOKEY", "ve", 2 ) ) - codart << get( LF_CFVEN, "CODSCC" ); - else - codart << " "; - if( ditta.get_bool( "SCOKEY", "ve", 3 ) ) - codart << get( LF_CFVEN, "CODZONA" ); - else - codart << " "; - if( ditta.get_bool( "SCOKEY", "ve", 4 ) ) - codart << get( LF_CLIFO, "CODPAG" ); - sconti.put( "CODART", codart ); - if( sconti.read( ) == NOERR ) - m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) ); - #ifdef DBG - else - message_box( FALSE, "Sconto non trovato nell'archivio sconti!" ); - #endif - return; - break; + { + TString16 codart; + TLocalisamfile sconti( LF_SCONTI ); + + sconti.setkey(1); + sconti.zero(); + sconti.put("TIPO", "I"); + if(ditta.get_bool("SCOKEY", "ve", 1)) + sconti.put("CODCAT", get( LF_CFVEN, "CATVEN")); + if(ditta.get_bool("SCOKEY", "ve", 2)) + codart = get( LF_CFVEN, "CODSCC" ); + else + codart = " "; + if( ditta.get_bool("SCOKEY", "ve", 3)) + codart << get(LF_CFVEN, "CODZONA"); + else + codart << " "; + if( ditta.get_bool("SCOKEY", "ve", 4)) + codart << get(LF_CLIFO, "CODPAG"); + sconti.put("CODART", codart); + if(sconti.read() == NOERR) + m.set(F_SCONTOPERC, sconti.get( "SCONTO")); + } + break; + default: + break; } + return; } void TCliForVendite::imposta_valuta( TMask& m ) diff --git a/ve/tclifor.h b/ve/tclifor.h index ad09ea22f..b4c0909aa 100755 --- a/ve/tclifor.h +++ b/ve/tclifor.h @@ -20,13 +20,9 @@ class TData_picker : public TRelation { -private: - - TTable* _table; - TString16 _tablename; - public: TData_picker( const int mainfile ) : TRelation ( mainfile ) { } + virtual ~TData_picker() {} const TString& get( const TString& table, const TString& codtab, const TString& field ); const TString& get( const int file, const TString& fieldname ); int get_int( const int file, const TString& fieldname ); @@ -41,6 +37,7 @@ private: bool _occas; TMask _occas_mask; + bool _valid; protected: @@ -50,7 +47,7 @@ protected: public: TCliFor( ); - void load( const char tipocf, const long codcf, const TString& ocfpi ); + bool load( const char tipocf, const long codcf, const TString& ocfpi ); bool occasionale( ){ return get_bool( LF_CLIFO, "OCCAS" ); }; TMask& occas_mask( ){ return _occas_mask; }; static bool occas_code_handler(TMask_field& f, KEY key); @@ -58,6 +55,7 @@ public: void edita_occasionale( ); char tipocf( ){ return _tipocf; } long codcf( ){ return _codcf; } + bool ok() { return _valid;} }; class TCliForVendite : public TCliFor diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index 8074ea07a..44638e859 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -17,7 +17,8 @@ TTipo_documento::TTipo_documento(const char * tipodoc) TConfig * p = create_profile(); - _mask = new TVariable_mask( p->get( "MSKFILE", "MAIN" ) ); + _mask = new TVariable_mask( p->get( "MSKFILE", "MAIN" ) ); + delete p; } @@ -47,16 +48,21 @@ void TMotore_application::init_insert_mode( TMask& m ) m.reset(); m.set(F_PROFILO, _profilo); m.set(F_CODNUM, _codnum); + m.field(F_CODNUM).set_focusdirty(TRUE); m.field(F_CODNUM).on_key(K_TAB); m.set(F_TIPODOC, _tipodoc); + m.field(F_TIPODOC).set_focusdirty(TRUE); m.field(F_TIPODOC).on_key(K_TAB); m.set(F_ANNO, _anno); m.set(F_PROVV, _tiponum); m.set(F_NDOC, _numdoc); - - m.set( F_DATAINSC, m.get( F_DATADOC ) ); - m.set( F_TIPOCF, tipocf , TRUE); + m.set(F_STATO, _statodoc); + const TString16 data_doc(m.get( F_DATADOC)); + + m.set(F_DATAINSC,data_doc); + m.set( F_DATACAMBIO, data_doc); clifo( ).occas_mask( ).reset( ); +// m.set( F_TIPOCF, tipocf , TRUE); int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof for( int i = 1; i <= ndefaults; i++ ) { @@ -304,10 +310,12 @@ bool TMotore_application::elabora_handler( TMask_field& f, KEY key ) bool TMotore_application::occas_handler( TMask_field& f, KEY key ) { - if ( key == K_SPACE && f.mask( ).is_running( ) ) + TMask & m = f.mask(); + if ( key == K_SPACE && m.is_running( ) ) { TMask& om = app( ).clifo( ). occas_mask( ); - om.run( ); + if (om.run( ) != K_ESC) + app().clifo().update_mask(m); f.set_focus( ); } return TRUE; @@ -376,43 +384,34 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key ) */ bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) -{ - if (f.to_check(key)) - { - TMask& m = f.mask( ); - - const char cf = app( ).tipocf( ); - TLocalisamfile& clifo = ( ( TEdit_field& )f ).browse( )->cursor( )->file( ); +{ + if (key == K_ENTER) + return TRUE; + if (f.to_check(key, TRUE)) + { + const char cf = app().tipocf(); + TMask& m = f.mask(); + TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file(); + const long codcf = atol(f.get()); - if ( clifo.get_char( "TIPOCF" ) != cf || clifo.get( "CODCF" ) != f.get( ) ) - { - clifo.setkey( 1 ); - clifo.put( "TIPOCF", cf ); - clifo.put( "CODCF", f.get( ) ); - clifo.read( ); - } - const TEdit_field& c = ( const TEdit_field& )f; - const TBrowse* b = c.browse( ); - const TLocalisamfile& i = b->cursor( )->file( ); - // Tabella File - const char* sf = i.tab( ) ? "B2" : "SOSPESO"; - const bool suspended = i.get_bool( sf ); - if ( suspended ) - { - sf = f.get( ); - return f.error_box( "Il codice '%s' e' sospeso e non puo' essere utilizzato", sf ); - } - // Disabilitazioni varie, ma le demando all'oggetto cliente - if (key == K_TAB) +/* clifo.setkey( 1 ); + clifo.put( "TIPOCF", cf ); + clifo.put( "CODCF", codcf ); + if (clifo.read( ) != NOERR) + clifo.zero(); */ + if ( clifo.get_bool("SOSPESO") ) + return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", codcf ); + if (app().clifo().load( cf, codcf, "")) { - app().clifo( ).load( cf, atol( f.get( ) ), "" ); - app().clifo( ).update_mask( m ); - if( f.mask( ).id2pos( F_OCCASEDIT ) > 0 ) - { - if ( app( ).clifo( ).occasionale( ) && app( ).clifo( ).occas_mask( ).get( O_CODICE ).empty( ) ) + app().clifo().update_mask(m, !m.is_running()); + if( f.mask().id2pos(F_OCCASEDIT) > 0 && f.to_check(key)) + { + if ( app().clifo().occasionale() && app().clifo().occas_mask().get(O_CODICE).empty() ) m.send_key( K_SPACE, F_OCCASEDIT ); // Lancia maschera occasionali } - } + } + else + return FALSE; } return TRUE; } @@ -516,6 +515,7 @@ void TMotore_application::get_edit_mask( const char * profilo ) } _sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET ); sheet( ).set_notify( ss_handler ); + sheet().set_append(FALSE); TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof app( ).tipocf( tipocf[ 0 ] ); if (newmask) @@ -538,7 +538,7 @@ void TMotore_application::get_edit_mask( const char * profilo ) descrs.add( tabtr.get( "S0" ) ); } else - yesnofatal_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga ); + error_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga ); } listbox.replace_items( keys, descrs ); configura_sheet( *_sheet, *_pro ); @@ -576,6 +576,7 @@ TMask* TMotore_application::get_mask( int mode ) _anno = _msk->get_int(F_ANNO); _tiponum = _msk->get(F_PROVV); _numdoc = _msk->get_long(F_NDOC); + _statodoc = _msk->get_int(F_STATO); get_edit_mask( _profilo ); TMask & emask = edit_mask(); return( &emask ); @@ -655,6 +656,7 @@ int TMotore_application::read( TMask& m ) clifo( ).load( tipocf, m.get_int( F_CODCF ), rel( ).curr( ).get( "OCFPI" ) ); clifo( ).update_mask( ( TVariable_mask& ) m, TRUE ); // TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC ); + _statodoc = m.get_int(F_STATO); TRectype r(_rdoc->curr( )); r.zero( ); /* @@ -666,7 +668,7 @@ int TMotore_application::read( TMask& m ) r.put( "CODNUM", m.get(F_CODNUM)); r.put( "PROVV", m.get(F_PROVV)); r.put( "ANNO", m.get(F_ANNO)); - r.put( "NDOC", m.get(F_NDOC)); + r.put( "NDOC", m.get(F_NDOC)); _righe_rec->read( r ); TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET ); f.destroy( ); @@ -859,6 +861,21 @@ void TMotore_application::store_riga( TSheet_field& f, int numrig, TRectype& r ) bool TMotore_application::user_create( ) { + TConfig ditta( CONFIG_DITTA ); + + // Controllo se sono cambiate le impostazioni delle vendite. + if (ditta.get_bool( "CHANGED", "ve" )) + { // Se sono cambiate, rigenero tutte le maschere + if (yesno_box( CHANGE_MESSAGE ) ) + { + TExternal_app generazione( "ve0 -3 -all" ); + + generazione.run(); + } + else + message_box("Attenzione i profili dei documenti potrebbero\n non essere aggiornati"); + } + // Metto in relazione testata e righe _rel = new TRelation( LF_DOC ); _rdoc = new TLocalisamfile(LF_RIGHEDOC); @@ -867,17 +884,6 @@ bool TMotore_application::user_create( ) // Inizializzo il Record_array _righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 ); - TConfig ditta( CONFIG_DITTA ); - - // Controllo se sono cambiate le impostazioni delle vendite. - if ( ditta.get_bool( "CHANGED", "ve" ) ) - { // Se sono cambiate, rigenero tutte le maschere - if ( !yesno_box( CHANGE_MESSAGE ) ) - return FALSE; - TExternal_app motore2( "VE0 -3 -all" ); - motore2.run( ); - ditta.set( "CHANGED", "", "ve" ); - } _clifor = new TCliForVendite( ); azzera_piedi( ); _msk = new TMask( "ve1000a" ); @@ -999,8 +1005,9 @@ bool TMotore_application::stato_valido( int stato, int operazione ) int TMotore_application::stato_corrente( ) { - int i = query_mask( ).get_int( F_STATO ); - return ( i == 0 ? NO_DOC_STATUS : i ); +// int i = query_mask( ).get_int( F_STATO ); +// return ( i == 0 ? NO_DOC_STATUS : i ); + return _statodoc; } void TMotore_application::segnala_stato_non_valido( int operazione ) diff --git a/ve/ve0100.h b/ve/ve0100.h index 7506c3102..224be6378 100755 --- a/ve/ve0100.h +++ b/ve/ve0100.h @@ -12,7 +12,7 @@ // Costante per il non-cambiamento di stato #define NO_CHANGE_STATUS -1 -#define NO_DOC_STATUS -2 +// #define NO_DOC_STATUS -2 #define F_SHEET 500 #define F_MEMORIGA 501 @@ -184,6 +184,7 @@ class TMotore_application : public TRelation_application int _anno; TString16 _tiponum; long _numdoc; + int _statodoc; // Array di maschere documento diff --git a/ve/ve0100c.cpp b/ve/ve0100c.cpp index 74f7e7280..62210e142 100755 --- a/ve/ve0100c.cpp +++ b/ve/ve0100c.cpp @@ -28,6 +28,10 @@ #include "VeUML1.h" #endif +#ifndef __VE0100_H +#include "ve0100.h" +#endif + #ifndef __VE0100C_H #include "ve0100c.h" #endif @@ -41,44 +45,37 @@ #endif bool ora_hndl( TMask_field& field, KEY key ) + { - if (key == K_TAB) + if (field.to_check(key)) { - if (field.to_check(key)) + TFixed_string ora( field.get( ), 6 ); + + ora.trim( ); + if (ora.not_empty() || field.required() ) { - TFixed_string ora( field.get( ), 6 ); - ora.trim( ); - if (ora.not_empty( ) || field.required( ) ) + if ( isdigit( ora[ 0 ] ) ) { - if ( isdigit( ora[ 0 ] ) ) + if ( ora[ 2 ] != ':') { - if ( ora[ 2 ] != ':') - { - if ( ora.len( ) > 4 ) - ora.overwrite( ":", 2 ); - else - ora.insert( ":", 2 ); - } - } - bool ok; - ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4]))); - ok &= ((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60)); - if ( !ok ) - { - error_box("Ora errata o formato non valido"); - return FALSE; - } - else - { - field.set((ora)); + if ( ora.len( ) > 4 ) + ora.overwrite( ":", 2 ); + else + ora.insert( ":", 2 ); } } + const bool ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4]))) && + ((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60)); + if (ok ) + field.set((ora)); + else + return error_box("Ora errata o formato non valido"); } } return TRUE; } -bool dummy_hndl( TMask_field& field, KEY key ) +bool dummy_hndl(TMask_field& field, KEY key) { warning_box( "Al campo %d è arrivato un KEY %d", field.dlg( ), key ); return TRUE; @@ -86,22 +83,23 @@ bool dummy_hndl( TMask_field& field, KEY key ) // Handler per il calcolo delle date di pagamento bool condpag_hndl( TMask_field& field, KEY key ) -{ - if ( key == K_TAB ) +{ + if ( field.to_check(key)) { TMask& m = field.mask( ); TString16 condpag( m.get( F_CODPAG ) ); TString16 data( m.get( F_DATAINSC ) ); - if ( condpag.blank( ) || data.blank( ) ) - return TRUE; - TPagamento pag( condpag, data ); - pag.set_total( 100, 10, 10 ); - pag.set_rate_auto( ); - int numrate = pag.n_rate( ); - for( int i = 0; i < numrate; i ++ ) - m.set( F_DATASCAD1 + i, pag.data_rata( i ).string( ) ); - for( ; i < 5; i ++ ) - m.hide( F_DATASCAD1 + i ); + if ( condpag.not_empty() && data.not_empty()) + { + TPagamento pag( condpag, data ); + pag.set_total( 100, 10, 10 ); + pag.set_rate_auto( ); + const int numrate = pag.n_rate( ); + for( int i = 0; i < numrate; i ++ ) + m.set( F_DATASCAD1 + i, pag.data_rata(i).string()); + for( ; i < 5; i ++ ) + m.hide( F_DATASCAD1 + i ); + } } return TRUE; } @@ -109,20 +107,14 @@ bool condpag_hndl( TMask_field& field, KEY key ) // handler per la validazione di una stringa/sconto bool sconto_hndl( TMask_field& field, KEY key ) { - if ( field.to_check( key, TRUE ) ) + if (field.to_check(key, TRUE)) { - if (key == K_TAB) - { - TSconto s; - s.set( field.get( ), TRUE ); - if( s.is_valid( ) ) - { - field.set( s.get( ) ); - return TRUE; - } - else - return FALSE; - } + TCond_vendita s(app().clifo()); + s.set_sconto( field.get( ), TRUE ); + const bool ok = s.is_valid(); + if( ok ) + field.set( s.get_sconto( ) ); + return ok; } return TRUE; } diff --git a/ve/ve0300.cpp b/ve/ve0300.cpp index be1a598b3..7748eb8f1 100755 --- a/ve/ve0300.cpp +++ b/ve/ve0300.cpp @@ -228,7 +228,7 @@ private: TMaschera *_m; protected: - + // Carica un file di tabella in un TString array void carica_tabella( const TFilename& fn, TString_array& tabella ); @@ -395,15 +395,16 @@ protected: public: TMaschera& maschera( ){ return generatore( ).maschera( ); } - TMask_generator& generatore( ){ CHECK( _mg, "Generatore nullo!" ); return *_mg; } - void generatore( TMask_generator& mg ){ _mg = &mg; } - void id( int id ){ _id = id; } - int id( ){ return _id; } - void height( int h ){ _height = h; } - int height( ){ return _height; } - void present( bool p ){ _present = p; } - bool present( ){ return _present; } - TArray& campi( ){ return _fields; } + TMask_generator& generatore( ) const { CHECK( _mg, "Generatore nullo!" ); return *_mg; } + void generatore( TMask_generator& mg ) { _mg = &mg; } + void id( int id ) { _id = id; } + int id( ) const { return _id; } + void height( int h ) { _height = h; } + int height( ) const { return _height; } + void present( bool p ) { _present = p; } + bool present( ) const { return _present; } + TArray& campi( ) { return _fields; } + virtual TObject* dup() const; TGruppo ( int i ); TGruppo ( int i, int height ); @@ -414,11 +415,9 @@ public: class TField : public TObject { -protected: - TString _nome; // Gruppo di appartenenza - TGruppo *_grp; + TGruppo * _grp; int _gruppo; int _id; @@ -433,23 +432,24 @@ public: TField( TString& campo, TConfig& pro ); TField( ); + virtual TObject* dup() const; void genera( ); void configura( TConfig& pro ); void x( int x ){ _x = x; } void y( int y ){ _y = y; } - void gruppo( int gruppo ){ _gruppo = gruppo; } - void grp( TGruppo& grp ){ _grp = &grp; } + void gruppo(int gruppo) { _gruppo = gruppo; } + void grp(TGruppo * grp) { _grp = grp; } void id( int id ){ _id = id; } - void type( int type ){ _type = type; } - void size( int size ){ _size = size; } - void stato( int stato ){ _stato = stato; } - int x( ){ return _x; } - int y( ){ return _y; } - int gruppo( ){ return _gruppo; } - TGruppo& grp( ) const { return *_grp; } - int id( ){ return _id; } + void type( int type ) { _type = type; } + void size( int size ) { _size = size; } + void stato( int stato ) { _stato = stato; } + int x( ) const { return _x; } + int y( ) const { return _y; } + int gruppo( ) const{ return _gruppo; } + TGruppo& grp( ) const { CHECK(_grp, "NULL group in field"); return *_grp; } + int id( ) const { return _id; } int type( ){ return _type; } int size( ){ return _size; } int stato( ){ return _stato; } @@ -484,17 +484,17 @@ public: TToken_string& items( ){ return _items; } TToken_string& configs( ){ return _configs; } - TConfig& profilo( ) { return grp( ).generatore( ).profilo( ); } - TConfig& ditta( ) { return grp( ).generatore( ).ditta( ); } - TConfig& groupsini( ) { return grp( ).generatore( ).groupsini( ); } - TConfig& fieldsini( ) { return grp( ).generatore( ).fieldsini( ); } + TConfig& profilo( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().profilo(); } + TConfig& ditta( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().ditta(); } + TConfig& groupsini( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().groupsini(); } + TConfig& fieldsini( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().fieldsini(); } }; void TGruppo::add( TField * field ) { - _fields.add( field ); - field->grp( *this ); + _fields.add(field); + field->grp(this); } TGruppo::TGruppo( int i ) @@ -513,32 +513,54 @@ TGruppo::TGruppo( int i, int height ) static void genera_campo( const TObject& campo ) { // Per evitare 3000 casts ... - TField& cmp = ( TField& )campo; + TField& cmp = (TField&) campo; - cmp.configura( cmp.grp( ).generatore( ).profilo( ) ); - cmp.genera( ); + cmp.configura(cmp.grp().generatore().profilo()); + cmp.genera(); } static void verifica_campo( const TObject& campo ) { // Per evitare 3000 casts ... - TField& cmp = ( TField& )campo; - - int stato = cmp.stato_reale( ); - cmp.stato( stato ); - if( cmp.stato( ) != S_NASCOSTO ) - cmp.grp( ).present( TRUE ); + TField & cmp = (TField&) campo; + TGruppo & gruppo = cmp.grp(); + + cmp.stato(cmp.stato_reale()); + if (!gruppo.present() && cmp.stato() != S_NASCOSTO) + gruppo.present(TRUE); } +HIDDEN TProgind * _bar; + static void genera_gruppo( const TObject& gruppo ) { // Per evitare 3000 casts ... - TGruppo& grp = ( TGruppo& )gruppo; + TGruppo & grp = (TGruppo &) gruppo; - grp.present( FALSE ); - grp.campi( ).for_each( verifica_campo ); - if( grp.present( ) ) - grp.genera( ); + grp.present(FALSE); + grp.campi().for_each(verifica_campo); + do_events(); + if(grp.present()) + grp.genera(); + if (_bar) + _bar->addstatus(1); + +} + +TObject* TGruppo::dup() const + +{ + TGruppo* g = new TGruppo(id(), height()); + + g->generatore(generatore()); + g->present(present()); + g->_fields = _fields; + TArray & fields = g->campi(); + const int items = fields.items(); + + for (int i = 0; i < items; i++) + ((TField &)fields[i]).grp(g); + return g; } void TGruppo::genera( ) @@ -603,6 +625,8 @@ TField::TField( ) _x = 0; _y = 0; _gruppo = 0; + _stato = 0; + _grp = NULL; _id = 0; _type = 0; _size = 0; @@ -626,7 +650,34 @@ TField::TField( ) _items.separator( '@' ); } -int TField::stato_reale( ) +TObject* TField::dup() const +{ + TField * f = new TField; + + f->_nome = _nome; + f->_fieldname = _fieldname; + f->_x = _x; + f->_y = _y; + f->_gruppo = _gruppo; + f->_stato = _stato; + f->_type = _type; + f->_size = _size; + f->_prompt = _prompt; + f->_flag = _flag; + f->_help = _help; + f->_warning = _warning; + f->_use = _use; + f->_id = _id; + f->_input = _input; + f->_display = _display; + f->_output = _output; + f->_special = _special; + f->_items = _items; + f->_configs = _configs; + return f; +} + +int TField::stato_reale() { // Strategia al 28/08/95 // Se il campo, nel file .INI di definizione dei campi, h legato a qualche voce in @@ -635,44 +686,58 @@ int TField::stato_reale( ) // Controlla poi la impostazione per il gruppo, come impostato nel file .INI // e nella sezione CONFIGS nel .INI di definizione dei gruppi. // Utilizza poi la minore delle due. - TToken_string config( fieldsini( ).get( "CONFIGS", _nome ) ); - TString reale; - int items = config.items( ); int stato = S_OBBLIGATORIO; - for ( int i = 0; i < items; i += 3 ) - { TString chiave = config.get( i ); - TString valore = config.get( i + 1 ); - TString reale = ditta( ).get( chiave, "ve" ); - int pos = chiave.find( '[' ); - if ( pos >= 0 ) + + { + TToken_string config(fieldsini().get( "CONFIGS", _nome )); + const int items = config.items(); + + for ( int i = 0; i < items; i += 3 ) { - TString index = chiave.sub( pos + 1, chiave.find( ']' ) ); - chiave = chiave.sub( 0, pos ); - reale = ditta( ).get( chiave, "ve", atoi( index ) ); + TString80 chiave(config.get(i)); + const TString80 valore(config.get(i + 1)); + const int pos = chiave.find( '[' ); + int index = -1; + + if ( pos >= 0 ) + { + index = atoi(chiave.sub(pos + 1, chiave.find( ']'))); + chiave.cut(pos); + } + if ( valore == ditta( ).get( chiave, "ve", index)) + stato = config.get_int(i + 2); } - else - reale = ditta( ).get( chiave, "ve" ); - if ( reale == valore ) - stato = atoi( ( char * ) config.get( i + 2 ) ); - }; - TToken_string riga_profilo( grp( ).generatore( ).profilo( ).get( _nome, "PROFILO" ) ); - int stato_profilo = riga_profilo.get_int( P_STATO ); - stato = ( stato < stato_profilo )? stato : stato_profilo; - TString gruppo ( fieldsini( ).get( "GROUP", _nome ) ); - gruppo.trim( ); - config = ( groupsini( ).get( "CONFIGS", gruppo ) ); - items = config.items( ); - int stato_gruppo = S_OBBLIGATORIO; - for ( i = 0; i < items; i += 3 ) - { TString chiave = config.get( i ); - TString valore = config.get( i + 1 ); - reale = ditta( ).get( chiave, "ve" ); - if ( reale == valore ) - stato_gruppo = atoi( ( char * ) config.get( i + 2 ) ); - }; - stato = ( stato < stato_gruppo )? stato : stato_gruppo; - int stato_gruppo_profilo = grp( ).generatore( ).profilo( ).get_int( gruppo, "PROFILOGRUPPO" ); - stato = ( stato < stato_gruppo_profilo )? stato : stato_gruppo_profilo; + } + + TToken_string riga_profilo(grp().generatore().profilo().get(_nome, "PROFILO")); + const int stato_profilo = riga_profilo.get_int(P_STATO); + + if (stato > stato_profilo ) + stato = stato_profilo; + + if (stato > S_NASCOSTO) + { + const TString80 gruppo(fieldsini().get("GROUP", _nome)); + TToken_string config(groupsini().get("CONFIGS", gruppo)); + const int items = config.items( ); + int stato_gruppo = S_OBBLIGATORIO; + + for ( int i = 0; i < items; i += 3 ) + { + const TString80 chiave = config.get( i ); + const TString80 valore = config.get( i + 1 ); + + if (valore == ditta( ).get( chiave, "ve")) + stato_gruppo = config.get_int(i + 2); + }; + if (stato > stato_gruppo) + stato = stato_gruppo; + + const int stato_gruppo_profilo = grp().generatore().profilo().get_int(gruppo, "PROFILOGRUPPO"); + + if (stato > stato_gruppo_profilo) + stato = stato_gruppo_profilo; + } return stato; } @@ -692,7 +757,7 @@ void TField::configura( TConfig& pro ) void TField::genera( ) { - TMaschera& m = grp( ).maschera( ); + TMaschera& m = grp().maschera(); TString s; if ( _stato == S_NASCOSTO ) @@ -754,15 +819,37 @@ TMask_generator::TMask_generator( const TString& profilo ) : _fieldsini( "ve0300 param.lower( ); if( param == "-all" ) { - TRelation rel("%TIP"); - TCursor t( &rel ); - long count = t.items( ); - TProgind bar( count, "Generazione delle maschere", FALSE, TRUE); - for( t = 0; t.pos( ) < count; ++t ) + TString_array profiles; + { - genera( t.curr( ).get( "S4" ) ); - bar.addstatus(1); + TAssoc_array profiles_array; + TRelation rel("%TIP"); + TCursor t( &rel ); + long count = t.items(); + + for( t = 0; t.pos( ) < count; ++t ) + { + const TString profile_name(t.curr().get("S4")); + TFilename profile(profile_name); + + profile.ext("ini"); + if (fexist(profile) && !profiles_array.is_key(profile_name)) + profiles_array.add(profile_name); + } + profiles_array.get_keys(profiles); } + + TProgind bar( profiles.items(), "Generazione automatica profili", FALSE, TRUE); + const int items = profiles.items(); + + for (int i = 0; i < items; i++) + { + const TString &profile = profiles.row(i); + + genera(profile); + bar.addstatus(1); + } + _ditta.set( "CHANGED", "", "ve" ); } else genera( profilo ); } @@ -1014,7 +1101,8 @@ void TMask_generator::genera( const TString& profilo ) { int i, last; TString temp_s; - TFilename proname( profilo ), + TFilename proname( profilo ); + // All'inizio il gruppo h 'chiuso' _groupopen = FALSE; @@ -1022,14 +1110,18 @@ void TMask_generator::genera( const TString& profilo ) proname.ext( "ini" ); // Se il file di profilo non esiste, esci con un errore fatale - if ( !fexist( proname ) ) - fatal_box( "Il file %s non esiste!", ( const char * )proname ); + if (!fexist( proname)) + { + error_box( "Il profilo %s non esiste!", ( const char * )profilo); + return; + } _pro = new TConfig( proname ); TFilename _mskname( _pro->get( "MSKFILE", "MAIN") ); _mskname.ext( "msk" ); - + + do_events(); // Mi serve per ordinare i gruppi a seconda del documento TAssoc_array grouporder; @@ -1038,31 +1130,31 @@ void TMask_generator::genera( const TString& profilo ) // Definizione della toolbar _m->outline( "TOOLBAR \"\" 0 20 0 2" ); - _m->control( T_BOTTONE, 18, 802 ); + _m->control( T_BOTTONE, DLG_SAVEREC, 1002 ); _m->begin( ); _m->prompt( -15, -1, "~Registra" ); _m->message( "EXIT,20082" ); _m->end( ); - _m->control( T_BOTTONE, 17, 802 ); + _m->control( T_BOTTONE, DLG_DELREC, 1002 ); _m->begin( ); _m->prompt( -25, -1, "~Elimina" ); _m->message( "EXIT,127" ); _m->end( ); - _m->control( T_BOTTONE, 99, 802 ); + _m->control( T_BOTTONE, 99, 1002 ); _m->begin( ); _m->prompt( -35, -1, "E~labora" ); _m->message( "EXIT,345" ); _m->end( ); - _m->control( T_BOTTONE, 24, 802 ); + _m->control( T_BOTTONE, DLG_PRINT, 1002 ); _m->begin( ); _m->prompt( -45, -1 ); _m->message( "EXIT,346" ); _m->end( ); - _m->control( T_BOTTONE, 2, 802 ); + _m->control( T_BOTTONE, DLG_CANCEL, 1002 ); _m->begin( ); _m->prompt( -55, -1 ); _m->message( "EXIT,27" ); @@ -1072,6 +1164,7 @@ void TMask_generator::genera( const TString& profilo ) _m->end( ); + do_events(); // Header della prima pagina _m->pagina( _m->page( )); @@ -1089,8 +1182,9 @@ void TMask_generator::genera( const TString& profilo ) temp_s.format("CODTAB %d", F_CODNUM); _m->input(temp_s); _m->display("\"Codice\" CODTAB~\"Descrizione@50\" S0"); - temp_s.format("%d CODTAB~%d S0~%d S2", F_CODNUM, F_DESNUM, F_TIPIDOCS); - _m->output(temp_s); + temp_s.format("%d S0", F_DESNUM); + _m->output(temp_s); + _m->check(S_NORMALE); _m->flag( "GDU" ); _m->message( "CO,2@" ); _m->end( ); @@ -1098,7 +1192,7 @@ void TMask_generator::genera( const TString& profilo ) _m->control( T_STRINGA, F_DESNUM, 50 ); _m->begin( ); _m->prompt( 24, 1 ); - _m->flag( "GDU" ); + _m->flag( "GD" ); _m->message( "CO,3@" ); _m->end( ); @@ -1110,30 +1204,35 @@ void TMask_generator::genera( const TString& profilo ) temp_s.format("CODTAB %d", F_TIPODOC); _m->input(temp_s); _m->display("\"Codice\" CODTAB~\"Descrizione@50\" S0"); - temp_s.format("%d CODTAB~%d S0~%d S4", F_TIPODOC, F_DESTIPODOC, F_PROFILO); + temp_s.format("%d S0", F_DESTIPODOC); _m->output(temp_s); + _m->check(S_NORMALE); _m->flag( "GDU" ); _m->message( "CO,4@" ); _m->end( ); - _m->control( T_STRINGA, F_TIPOCF, 1 ); + _m->control( T_LISTA, F_TIPOCF, 9 ); _m->begin( ); - _m->prompt( 2, 2, "Tipo CF " ); + _m->prompt( 100, 100, "" ); _m->field( "TIPOCF" ); - _m->flag( "H" ); + if ( _pro->get( "TIPOCF", "MAIN" ) == "C" ) + _m->item("C|Cliente"); + else + _m->item("F|Fornitore"); + _m->flag( "D" ); _m->end( ); _m->control( T_STRINGA, F_PROVV, 1 ); _m->begin( ); - _m->prompt( 2, 2, "

" ); + _m->prompt( 100, 100, "

" ); _m->field( "PROVV" ); - _m->flag( "H" ); + _m->flag( "D" ); _m->end( ); _m->control( T_STRINGA, F_DESTIPODOC, 50 ); _m->begin( ); _m->prompt( 24, 2 ); - _m->flag( "GDU" ); + _m->flag( "GD" ); _m->message( "CO,5@" ); _m->end( ); @@ -1158,7 +1257,7 @@ void TMask_generator::genera( const TString& profilo ) _m->prompt( 50, 3, "Stato " ); _m->field( "STATO" ); _m->message( "CO,8@" ); - _m->flag( "D" ); + _m->flag( "DG" ); _m->end( ); _m->control( T_STRINGA, F_ANNO, 4 ); @@ -1236,12 +1335,19 @@ void TMask_generator::genera( const TString& profilo ) last = _pro->get_int( "NGROUPS", "ORDINEGRUPPI" ); for( i = 1; i <= last; i ++ ) { + do_events(); chiave.format( "%d", i ); chiavegruppo.GROUPKEY( _pro->get_int( chiave, "ORDINEGRUPPI" ) ); if( _gruppi.is_key( chiavegruppo ) ) - sortedgroups.add( &_gruppi[ (chiavegruppo) ] ); + sortedgroups.add( _gruppi[ (chiavegruppo) ] ); } + + TString80 message; + + message.format("Generazione profilo : %s", (const char *) profilo); + _bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE); sortedgroups.for_each( genera_gruppo ); + delete _bar; if ( _m->_pageopen == TRUE ) { _m->end( ); @@ -1260,49 +1366,52 @@ void TMask_generator::genera( const TString& profilo ) _m->_out << "SPREADSHEET " << F_SHEET << "\n"; _m->begin( ); _m->prompt( 2, 7 ); + do_events(); for( i = 0; i < _tab0300b.items( ); i ++ ) genera_item_sheet( _tab0300b.row( i ) ); _m->end( ); _m->end( ); - // Generazione pagina dei piedi - TToken_string s(_pro->get( "PROGPIEDE", "MAIN" ) ); - TTable tab( "PPD" ); - if ( s.not_empty( ) ) + // Generazione pagina dei piedi { - intestazione_pagina( ); - TString16 codpiede( s.get( ) ); - int cp = 1; - while ( !codpiede.empty( ) ) + TToken_string s(_pro->get("PROGPIEDE", "MAIN")); + + if (s.not_empty()) { - tab.zero( ); - tab.put( "CODTAB", codpiede ); - if ( tab.read( ) == NOERR ) + intestazione_pagina( ); + TTable ppd( "PPD" ); + int cp = 1; + for (const char * codpiede = s.get(0); codpiede && *codpiede; codpiede = s.get()) { - TString picture( tab.get( "S3" ) ); - _m->control( T_NUMERO, BASE_PIEDE + tab.get_int( "I0" ), 1805 ); - _m->begin( ); - TString header = tab.get( "S1" ); - header.trim( ); - while( header.len( ) < 40 - picture.len( ) ) - header << " "; - _m->prompt( 2, 7 + cp, header ); - _m->flag( "D" ); - _m->end( ); - cp ++; - if( cp + MASK_FIRST_LINE > MAX_LINES_PER_PAGE ) + do_events(); + ppd.zero( ); + ppd.put( "CODTAB", codpiede ); + if ( ppd.read( ) == NOERR ) { + const TString80 picture(ppd.get( "S3")); + + _m->control( T_NUMERO, BASE_PIEDE + ppd.get_int("I0"), 1805); + _m->begin( ); + + TString80 header(ppd.get("S1")); header.left_just(40 - picture.len()); + + _m->prompt( 2, 7 + cp, header ); + _m->flag( "D" ); _m->end( ); - intestazione_pagina( ); - _m->line( MASK_FIRST_LINE ); - cp = 1; + cp++; + if( cp + MASK_FIRST_LINE > MAX_LINES_PER_PAGE ) + { + _m->end( ); + intestazione_pagina( ); + _m->line( MASK_FIRST_LINE ); + cp = 1; + } } } - codpiede = s.get( ); + _m->end( ); } - _m->end( ); - }; + } _m->endmask( ); // Stategia al 30/06/95 @@ -1310,16 +1419,6 @@ void TMask_generator::genera( const TString& profilo ) // dal motore, nascondo e adatto le colonne. // Generazione maschera dello sheet -/* - _m->_out << "PA \"Pagina 1\" 8 5 64 13\n"; - - id( 101 ); - for( i = 0; i < _tab0300b.items( ); i ++ ) - genera_campo_sheet( _tab0300b.row( i ) ); - _m->end( ); - _m->end( ); - _m->endmask( ); -*/ delete _m; fcopy("verig00.msk", _mskname, TRUE); delete _pro; @@ -1329,8 +1428,8 @@ void TMask_generator::genera( const TString& profilo ) // Applicazione guscio class TGenMask_application : public TApplication -{ - +{ + protected: virtual bool create ( ); @@ -1343,7 +1442,8 @@ protected: bool TGenMask_application::create( ) { - TApplication::create( ); + TApplication::create( ); + TMask_generator a( argv( 2 ) ); return FALSE; } diff --git a/ve/ve0300a.src b/ve/ve0300a.src index 621f543db..20897b1ff 100755 --- a/ve/ve0300a.src +++ b/ve/ve0300a.src @@ -24,8 +24,8 @@ // DISPLAY = Indica i campi da mostrare per la ricerca ( Equivalente a DISPLAY in UML ) // OUTPUT = Indica il file di output per la ricerca ( Equivalente a OUTPUT in UML ) // Per i precedenti 4 settaggi, vale il seguente : -// Se preceduto da un ~, copia la use dal campo indicato -// Esempio: USE = ~112 diventa, in uml, COPY USE 112 +// Se preceduto da un @, copia la use dal campo indicato +// Esempio: USE = @112 diventa, in uml, COPY USE 112 // USE = 12 diventa USE 12 // Per indicare piy di una riga, separare con ~ // Esempio: DISPLAY = "Ragione sociale@50" 20->RAGSOC~"Codice" 20->CODCF~"Indrizzo@35" 20->INDCF @@ -226,6 +226,10 @@ MSKID=F_COMCF TYPE=T_STRINGA PROMPT="Comune " SIZE=4 +FLAG=U +USE=LF_COMUNI +INPUT=STATO F_STATOCF~COM F_COMCF +OUTPUT=F_DENCOM DENCOM~F_PROVCOM PROVCOM [DENCOM] // il campo e' letto nel file 13 comuni con chiave [COMCF] @@ -253,9 +257,13 @@ GROUP=100 X=2 Y=5 MSKID=F_STATOCF -TYPE=T_STRINGA +TYPE=T_NUMERO PROMPT="Stato " SIZE=3 +FLAG=Z +USE=%STA +INPUT=CODTAB F_STATOCF +OUTPUT=F_DESSTATOCF S0 [DESSTATOCF] // il campo e' letto nella tabella %STA e va visualizzato solo se [STATOCF]<>"" @@ -712,16 +720,12 @@ OUTPUT=F_CODINDSP CODIND~F_RAGSOCSP RAGSOC~F_INDSP INDIR~F_CIVSP CIV~F_LOCALITAS HELP=Inserisci il codice dell'indirizzo di spedizione [RAGSOCSP] -// il campo e' letto nel file 20 clifo GROUP=900 X=24 Y=1 MSKID=F_RAGSOCSP TYPE=T_STRINGA SIZE=50 -FLAG=U -WARNING=Ragione sociale non trovata -HELP=Inserire la ragione sociale della ditta [INDSP] GROUP=900 @@ -730,7 +734,6 @@ Y=2 MSKID=F_INDSP TYPE=T_STRINGA SIZE=35 -FLAG=U [CIVSP] GROUP=900 @@ -776,21 +779,24 @@ GROUP=900 X=2 Y=4 MSKID=F_STATOSP -TYPE=T_STRINGA +TYPE=T_NUMERO PROMPT="Stato " SIZE=3 +FLAG=Z +USE=@F_STATOCF +INPUT=CODTAB F_STATOSP +OUTPUT=F_DESSTATOSP S0 [DESSTATOSP] -// il campo e' letto nella tabella %STA e va visualizzato solo se [STATOCF]<>"" GROUP=900 X=24 Y=4 +FLAG=D MSKID=F_DESSTATOSP TYPE=T_STRINGA SIZE=50 [COMSP] -// il campo e' letto nel file 20 clifo GROUP=900 X=2 Y=5 @@ -798,13 +804,16 @@ MSKID=F_COMSP TYPE=T_STRINGA PROMPT="Comune " SIZE=4 -FLAG=R +FLAG=U +USE=@F_COMCF +INPUT=STATO F_STATOSP~COM F_COMSP +OUTPUT=F_DENCOMSP DENCOM~F_PROVCOMSP PROVCOM [DENCOMSP] -// il campo e' letto nel file 13 comuni con chiave [COMCF] GROUP=900 X=24 Y=5 +FLAG=D MSKID=F_DENCOMSP TYPE=T_STRINGA SIZE=50 diff --git a/ve/ve0300c.ini b/ve/ve0300c.ini index 7ec6dd5d2..b35a1e244 100755 --- a/ve/ve0300c.ini +++ b/ve/ve0300c.ini @@ -118,4 +118,4 @@ HEIGHT=4 [0] HEIGHT = - \ No newline at end of file + diff --git a/ve/verig.uml b/ve/verig.uml index 474345e0b..3dc1e21ba 100755 --- a/ve/verig.uml +++ b/ve/verig.uml @@ -73,10 +73,11 @@ ENDIF OUTPUT FR_CODMAG CODTAB[1,3] OUTPUT FR_DESMAG S0 IFDEF(CH_CODMAG) - CHECKTYPE CH_CODMAG -ELSEIF + CHECKTYPE CH_CODMAG +ELSE CHECKTYPE NORMAL -ENDIF +ENDIF + WARNING "Magazzino assente" FLAGS "U" IFDEF(FL_CODMAG) FLAGS FL_CODMAG @@ -123,6 +124,7 @@ IFDEF(CH_CODDEP) ELSEIF CHECKTYPE NORMAL ENDIF + WARNING "Deposito assente" IFDEF(FL_CODDEP) FLAGS FL_CODDEP ENDIF @@ -156,12 +158,9 @@ ENDIF DISPLAY "Codice@20" CODART DISPLAY "Descrizione@50" DESCR OUTPUT FR_CODART CODART - OUTPUT FR_DESCR DESCR WARNING "Articolo assente" IFDEF(CH_CODART) CHECKTYPE CH_CODART -ELSEIF - CHECKTYPE REQUIRED ENDIF IFDEF(FL_CODART) FLAGS FL_CODART @@ -256,7 +255,6 @@ ENDIF INPUT DESCR FR_DESCR DISPLAY "Descrizione@50" DESCR DISPLAY "Codice@20" CODART - OUTPUT FR_CODART CODART OUTPUT FR_DESCR DESCR END ENDIF