diff --git a/ve/righedoc.cpp b/ve/righedoc.cpp index a378ddfa2..cd53c2029 100755 --- a/ve/righedoc.cpp +++ b/ve/righedoc.cpp @@ -38,69 +38,73 @@ HIDDEN bool codart_handler( TMask_field& f, KEY key ) // Se qualcuno cerca di modificare la maschera if ( key == K_TAB && f.focusdirty()) { - TMask& row_mask = f.mask( ); + TMask& row_mask = f.mask(); TMask & mask = app().edit_mask(); - TCond_vendita condv(app().clifo(), &mask, &row_mask); + TCond_vendita & condv = app().condv(); + + condv.set_testa(&mask); + condv.set_riga(&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(); + TLocalisamfile & umart = ((TEdit_field &) row_mask.field(FR_UMQTA)).browse()->cursor()->file(); - if (anamag.bad() || (anamag.get("CODART") != f.get())) - { - anamag.zero(); - anamag.put("CODART", f.get()); - if (anamag.read() != NOERR) - anamag.zero(); - } - if (anamag.curr().empty()) + condv.set_anamag(anamag); + condv.set_umart(umart); + TString80 codart(f.get()); + anamag.setkey(1); + anamag.put("CODART", codart); + if (anamag.read() != NOERR) { TLocalisamfile codalt(LF_CODCORR); codalt.setkey(2); - codalt.put("CODARTALT", f.get()); + codalt.put("CODARTALT", codart); if (codalt.read() == NOERR) { - const TString80 codart(codalt.get("CODART")); + 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()) + } + + if (anamag.good()) { - TLocalisamfile deslin(LF_DESLIN); + const TString16 lingua = mask.get(F_CODLIN); + const TString codart(row_mask.get(FR_CODART)); + TString desc(anamag.get("DESCR")); - 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"); + if (lingua.not_empty()) + { + TLocalisamfile deslin(LF_DESLIN); + + deslin.setkey(2); + deslin.put("CODART", codart); + deslin.put("CODLIN", lingua); + if (deslin.read() == NOERR) + desc = deslin.get("DESCR"); + } + row_mask.set(FR_DESCR, desc); + + umart.setkey(1); + umart.zero(); + umart.put("CODART", codart); + if (umart.read(_isgteq) == NOERR && codart == umart.get("CODART")) + { + curr_um = umart.get("UM"); + curr_fc = umart.get_real("FC"); + } + else + { + curr_um.cut(0); + curr_fc = 1.0; + } row_mask.set(FR_UMQTA, curr_um); } - } - + + condv.ricerca(); + } return TRUE; } @@ -111,20 +115,22 @@ HIDDEN bool umart_handler( TMask_field& f, KEY key ) if ( key == K_TAB && f.focusdirty()) { 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()); - } + TMask & mask = app().edit_mask(); + TLocalisamfile & anamag = ((TEdit_field &) row_mask.field(FR_CODART)).browse()->cursor()->file(); + TLocalisamfile & umart = ((TEdit_field &) f).browse()->cursor()->file(); + TCond_vendita & condv = app().condv(); + + condv.set_testa(&mask); + condv.set_riga(&row_mask); + condv.set_anamag(anamag); + condv.set_umart(umart); + condv.ricerca(FALSE); + 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); @@ -167,6 +173,27 @@ HIDDEN bool descr_handler( TMask_field& f, KEY key ) return TRUE; } +HIDDEN bool qta_handler( TMask_field& f, KEY key ) +{ + // Se qualcuno cerca di modificare la maschera + if ( key == K_TAB && f.focusdirty()) + { + TMask& row_mask = f.mask( ); + TMask & mask = app().edit_mask(); + TLocalisamfile & anamag = ((TEdit_field &) row_mask.field(FR_CODART)).browse()->cursor()->file(); + TLocalisamfile & umart = ((TEdit_field &) f).browse()->cursor()->file(); + TCond_vendita & condv = app().condv(); + + condv.set_testa(&mask); + condv.set_riga(&row_mask); + condv.set_anamag(anamag); + condv.set_umart(umart); + condv.ricerca(FALSE); + } + return TRUE; +} + + void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r) { if (r) @@ -354,12 +381,12 @@ void TRiga::sottrai( TPiede_documento& piede ) piede.sottrai( temp_piede ); } -TMask * TRiga::getmask( ) +TVariable_mask * TRiga::getmask( ) { TString16 msk("verig"); msk << _data.get("TIPORIGA"); - TMask * mask = new TMask( msk ); + TVariable_mask * mask = new TVariable_mask( msk ); int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" ); for( int i = 1; i <= numhandler; i ++ ) { @@ -384,7 +411,8 @@ TMask * TRiga::getmask( ) { 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, descr_handler ); + mask->set_handler( FR_QTA, qta_handler ); } } } diff --git a/ve/righedoc.h b/ve/righedoc.h index de1db5f4d..5fd512d8e 100755 --- a/ve/righedoc.h +++ b/ve/righedoc.h @@ -29,6 +29,10 @@ #include "msksheet.h" #endif +#ifndef __VARMASK_H +#include "varmask.h" +#endif + class TPiede_documento : public TAssoc_array { public: @@ -86,7 +90,7 @@ class TRiga : public TObject // documento indicato. Va chiamata negli handler degli sheet void edit_keys( const KEY key, TPiede_documento& nuovo ); // Costruisce e Ritorna la maschera della riga per la editazione - TMask * getmask(); + TVariable_mask * getmask(); // Costruttorino standard TRiga( ) : _data( LF_RIGHEDOC ), _pro( NULL ) { } diff --git a/ve/sconti.cpp b/ve/sconti.cpp index 5c78b83dc..c67bfb56f 100755 --- a/ve/sconti.cpp +++ b/ve/sconti.cpp @@ -22,225 +22,311 @@ #include "veconf.h" #endif -#define A_ANAMAG 0 +#ifndef __TABUTIL_H +#include +#endif + +// #define A_ANAMAG 0 HIDDEN const real CENTO(100.0); -void TCond_vendita::set_sconto( const char * exp, bool signal ) +bool TCond_vendita::set_sconto( const char * exp, bool signal ) { - TString work( exp ); - TString goodexp; - TString num; + TString80 goodexp; + bool valid = TRUE; // Elimina gli spazi molesti - work.strip_spaces( ); - if (work.empty()) +// work.strip_spaces( ); + if (exp && *exp) { - _sconto = ""; - return; - } - - // Per ora nessun errore - _errorpos = -1; - - int i = 0; - _part = 1.0; - const int wlen = work.len( ); - // Flag che indica se sono nella parte decimale di un numero - bool dec = FALSE; - // Flag che indica se si attende l'inizio di un numero - bool startnum = TRUE; - // Flag che indica se siamo all'inizio di un numero - while ( i < wlen && _errorpos < 0 ) - { - char c = work[ i++ ]; - switch( c ) - { - case '+': - case '-': - // Se ero in in numero ... - if( !startnum ) + TString80 num; + bool dec = FALSE; // Flag che indica se si attende l'inizio di un numero + bool startnum = TRUE; // Flag che indica se siamo all'inizio di un numero + int errorchar = ' '; + + _molt_sconto = 1.0; + // Flag che indica se sono nella parte decimale di un numero + for (const char * s = exp; *s && errorchar == ' '; s++) + { + const char c = *s; + switch(c) { - // Aggiunge il numero alla sequenza - real newval( num ); - _part = _part * ( CENTO + newval ) / CENTO; - if( newval >= 0 ) - goodexp << '+'; - goodexp << num; - } - // Inizia il nuovo numero - num = ( c == '-' )?"-":""; - startnum = TRUE; - dec = FALSE; - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - num << c; - startnum = FALSE; - break; - case '.': - case ',': - // Se siamo gi` nella parte decimale ... - if( dec ) - { - // Segnala un errore - _errorpos = i; + case '+': + case '-': + // Se ero in in numero ... + if( !startnum ) + { + // Aggiunge il numero alla sequenza + real newval( num ); + _molt_sconto *= ( CENTO + newval ) / CENTO; + goodexp << num; + } + // Inizia il nuovo numero + num = (c == '-') ? "-" : "+"; + startnum = TRUE; + dec = FALSE; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + num << c; + startnum = FALSE; break; + case '.': + case ',': + if(!dec) + { + if( startnum ) + num << '0'; // Se occorreva un numero ci metto lo 0 + num << '.'; // Interpreto la virgola come punto + dec = TRUE; + startnum = TRUE; + } + else + errorchar = c; // Se siamo gi` nella parte decimale segnala un errore + break; + case ' ': + break; + default: + errorchar = c; + break; } - // Se occorreva un numero ci metto lo 0 - if( startnum ) - num << '0'; - // Interpreto la virgola come punto - num << '.'; - dec = TRUE; - startnum = TRUE; - break; - default: - _errorpos = i; - break; + } + // Controlla la validita` + valid = errorchar == ' '; + + if (valid) + { + // Aggiunge l'ultimo numero preso + real lastval( num ); + _molt_sconto *= ( CENTO + lastval ) / CENTO; + goodexp << num; // Assegna la nuova espressione formattata bene + } + else + { + if (signal) // Se richiesto segnala l'errore + warning_box( "Espressione di sconto non valida. Errore sul carattere %c.", errorchar); + _molt_sconto = 1.0; // Azzera la sequenza di percentuali + goodexp = ""; } } - // Controlla la validit` - _valid = ( _errorpos < 0 ); - // Se richiesto segnala l'errore - if( !_valid && signal ) - warning_box( "Espressione di sconto non valida. Errore sul carattere %d.", _errorpos + 1 ); - if( _valid ) - { - // Aggiunge l'ultimo numero preso - real lastval( num ); - _part = _part * ( CENTO + lastval ) / CENTO; - if( lastval >= 0 ) - goodexp << '+'; - goodexp << num; - // Assegna la nuova espressione formattata bene - _sconto = goodexp; - } - else - { - // Azzera la sequenza di percentuali - _part = 1.0; - } + _sconto = goodexp; + if (_riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active()) + _riga->set(FR_SCONTO, _sconto); + return valid; } -real TCond_vendita::sconto_val( ) -{ - CHECK(is_valid( ),"Tentativo di usare uno sconto non valido!" ); - return ( ( _part * CENTO ) - CENTO ); +void TCond_vendita::set_prezzo(const real & prezzo, const char * val_rif) + +{ + _prezzo = prezzo; + + if (_prezzo != ZERO) + { + TString16 valuta(_testa->get(F_CODVAL)); + TString16 valuta_rif(val_rif); + + if (valuta == "LIT") valuta.cut(0); + if (valuta_rif == "LIT") valuta_rif.cut(0); + if (valuta != valuta_rif) + { + if (valuta_rif.not_empty()) + _prezzo *= _condv.get_real("CAMBIO"); + + real cambio(_testa->get(F_CAMBIO)); + + if (cambio == ZERO) + cambio = 1.0; + _prezzo /= cambio; + _prezzo.round(cambio == 1.0 ? 0 : 3); + } + } + if (_riga && _riga->id2pos(FR_PREZZO) >= 0 && _riga->field(FR_PREZZO).active()) + _riga->set(FR_PREZZO, _prezzo); } +void TCond_vendita::set_provv(const real & provv) + +{ + _provv = provv; + if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active()) + _riga->set(FR_PERCPROV, _provv); +} + +void TCond_vendita::set_iva(const TString & codiva) + +{ + _codiva = codiva; + if (_riga && _riga->id2pos(FR_CODIVA) >= 0 && _riga->field(FR_CODIVA).active()) + _riga->set(FR_CODIVA, _codiva); +} bool TCond_vendita::cerca( int tiporicerca ) { - TString codart = _anamag.get( "CODART" ); - TString codriga = riga( ).get( FR_CODART ); - if( codriga != codart ) - { - _anamag.setkey( 1 ); - _anamag.zero( ); - _anamag.put( "CODART", codriga ); - if (_anamag.read( ) != NOERR) - _anamag.zero(); - } - if( tiporicerca == A_ANAMAG ) - // Se ricercavo per anagrafica, ho gi` finito - return !_anamag.curr().empty(); - if( _ditta.get_bool( "GES", "ve", tiporicerca ) ) + if( config_ditta().get_bool( "GES", "ve", tiporicerca ) ) { // Se h attiva la gestione contratti ... _condv.setkey( 1 ); _condv.zero( ); switch( tiporicerca ) { - case A_CONTRATTI: - _condv.put( "TIPO", "C" ); - if( _ditta.get_bool( "GESSCONCC", "ve" ) ) + case A_CONTRATTI: + { + const TString16 codcont(testa().get(F_CODCONT)); + + if (codcont.empty()) + return FALSE; + _condv.put("TIPO", "C"); + if(config_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( ) ); - } - _condv.put( "COD", testa( ).get( F_CODCONT ) ); - break; - case A_LISTINI: - _condv.put( "TIPO", "L" ); - if( _ditta.get_bool( "GESLISCV", "ve" ) ) + _condv.put("TIPOCF", clifo().tipocf()); + _condv.put("CODCF", clifo().codcf()); + } + else + _condv.put("TIPOCF", "C"); + _condv.put("COD", codcont); + } + break; + case A_LISTINI: { - // 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( ) ); + const TString16 codlist(testa().get(F_CODLIST)); + + if (codlist.empty()) + return FALSE; + _condv.put("TIPO", "L"); + // Se in ditta h abilitata la gestione della categoria di vendita in chiave + // al listino, la carico con gioia + if( config_ditta().get_bool("GESLISCV", "ve")) + _condv.put("CATVEN", testa().get(F_CATVEN)); + _condv.put("COD", codlist); } - _condv.put( "COD", testa( ).get( F_CODLIST ) ); break; case A_OFFERTE: - _condv.put( "TIPO", "O" ); - _condv.put( "COD", testa( ).get( F_CODCAMP ) ); + { + const TString16 codcamp(testa().get(F_CODCAMP)); + + if (codcamp.empty()) + return FALSE; + _condv.put("TIPO", "O"); + _condv.put("COD", codcamp); + } break; } if( _condv.read( ) == NOERR ) { _rcondv.setkey( 2 ); _rcondv.zero( ); - _rcondv.put( "TIPO", _condv.get( "TIPO" ) ); - _rcondv.put( "CATVEN", _condv.get( "CATVEN" ) ); - _rcondv.put( "TIPOCF", _condv.get( "TIPOCF" ) ); - _rcondv.put( "CODCF", _condv.get( "CODCF" ) ); + _rcondv.put( "TIPO", _condv.get( "TIPO")); + _rcondv.put( "CATVEN", _condv.get( "CATVEN")); + _rcondv.put( "TIPOCF", _condv.get( "TIPOCF")); + _rcondv.put( "CODCF", _condv.get( "CODCF")); + _rcondv.put("COD", _condv.get("COD")); if( _condv.get_bool( "GESTUM" ) ) - _rcondv.put( "UM", riga( ).get( FR_UMQTA ) ); - if( _condv.get_bool( "GESTSCAGL" ) ) - _rcondv.put( "QLIM", riga( ).get( FR_QTA ) ); + _rcondv.put( "UM", riga().get(FR_UMQTA)); + + const bool gest_scagl = _condv.get_bool("GESTSCAGL"); const TString16 seqricrighe( _condv.get( "SEQRIC" ) ); + bool found = FALSE; + + if (gest_scagl) + _rcondv.put("NSCAGL", 1); - for( int i = 0; i < seqricrighe.len( ); i ++ ) + for( int i = 0; !found && i < seqricrighe.len( ); i ++ ) { char ricerca = seqricrighe[ i ]; _rcondv.put( "TIPORIGA", ricerca ); switch( ricerca ) { - case 'A': - _rcondv.put( "CODRIGA", codriga); - if( _rcondv.read( ) == NOERR ) return TRUE; - if( _rcondv.prev() == NOERR && _rcondv.get("TIPORIGA")[0] == 'A') + case 'A': { - const TString cod_found(_rcondv.get("CODRIGA")); - - return cod_found.compare(codriga, cod_found.len()) == 0; + const TString codriga = riga().get(FR_CODART); + + _rcondv.put( "CODRIGA", codriga); + if (_rcondv.read() != NOERR && + _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; + _rcondv.put("CODRIGA", anamag().get( "RAGGFIS")); + _rcondv.read(); break; - case 'G': + case 'C': { - const TRectype rec_to_found(_rcondv.curr()); + 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; + _rcondv.put( "CODRIGA", anamag().get( "GRMERC1" ) ); + if (_rcondv.read( ) != NOERR ) + { + _rcondv.curr() = rec_to_found; + _rcondv.put( "CODRIGA", anamag().get( "GRMERC2" ) ); + if (_rcondv.read( ) != NOERR ) + { + _rcondv.curr() = rec_to_found; + _rcondv.put( "CODRIGA", anamag().get( "GRMERC3" ) ); + _rcondv.read( ); + } + } + } + break; + case 'L': + { + const TRectype rec_to_found(_rcondv.curr()); + + _rcondv.put( "CODRIGA", anamag().get("GRMERC1").left(3) ); + if (_rcondv.read( ) != NOERR ) + { + _rcondv.curr() = rec_to_found; + _rcondv.put( "CODRIGA", anamag().get("GRMERC2").left(3) ); + if (_rcondv.read( ) != NOERR ) + { + _rcondv.curr() = rec_to_found; + _rcondv.put( "CODRIGA", anamag().get("GRMERC3").left(3) ); + _rcondv.read( ); + } + } } break; default: - error_box("Tipo di ricerca righe %c non valido", ricerca ); break; - } + } + found = _rcondv.good(); } + if (found && gest_scagl) + { + TRectype rec(_rcondv.curr()); + int last_scagl = 0; + int scagl = _rcondv.get_int("NSCAGL"); + const real qta(_riga->get_real(FR_QTA)); + real qta_lim(_rcondv.get_real("QLIM")); + + while (_rcondv.good() && scagl > last_scagl && qta_lim > ZERO && qta > qta_lim) + { + if (_rcondv.next() == NOERR) + { + last_scagl = scagl; + scagl = _rcondv.get_int("NSCAGL"); + qta_lim =_rcondv.get_real("QLIM"); + rec = _rcondv.curr(); + } + } + _rcondv.read(rec); + } + + return found; } } // Ricerca fallita @@ -248,52 +334,223 @@ bool TCond_vendita::cerca( int tiporicerca ) } // Probabilmente dovrebbe lavorare sulla maschera, ma per ora la lasciamo cosl -void TCond_vendita::calcola( ) +void TCond_vendita::ricerca(bool full_load) { - 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 ) + TString codart = anamag().get( "CODART" ); + const TString codriga = riga().get( FR_CODART ); + + if(anamag().bad() || codriga != codart ) { - case 'N': - // Sconti di riga non gestiti - break; - case 'L': - // Percentuale su contratti/offerte/listini/anagrafica - if (condv_found) - set_sconto( _rcondv.get( "SCONTO" ) ); - else - if(cerca( A_ANAMAG )) - set_sconto( _anamag.get("SCONTO")); - break; - case 'A': - // Posiziono l'anagrafica - _sconti.setkey( 1 ); - _sconti.put( "TIPO", "R" ); - _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 ) - set_sconto( _sconti.get("SCONTO") ); - break; - case 'C': - set_sconto(clifo( ).get(LF_CFVEN, "SCONTO")); - break; - default: - error_box( FALSE, "Tipo di gestione sconti %c non valido!", gestione ); - break; + anamag().setkey(1); + anamag().put("CODART", codriga); + if (anamag().read() != NOERR) + { + if (full_load) + { + set_prezzo(ZERO); + set_sconto(""); + set_iva(""); + set_provv(ZERO); + } + return; + } + } + codart = umart().get( "CODART" ); + const TString16 umriga(riga().get(FR_UMQTA)); + const TString16 um(umart().get("UM")); + if (umart().bad() || codart != codriga || um != umriga) + { + umart().setkey(2); + umart().put("CODART", codriga); + umart().put("UM", um); + if (umart().read != NOERR) + umart().zero(); + } + + const bool found_condv = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI); + + if (found_condv) + set_prezzo(_rcondv.get_real("PREZZO"), _condv.get("CODVAL")); + else + if (full_load) + set_prezzo(umart().get_real("PREZZO")); + + + if (full_load) + { + if (_ivarid) + set_iva(anamag().get("CODIVAR")); + else + set_iva(anamag().get("CODIVA")); + } + + const char gestione = config_ditta().get_char( "GESSCORIGA", "ve" ); + + if (!full_load) + { + if (gestione == 'L' && found_condv) + set_sconto(_rcondv.get("SCONTO")); + } + else + { + switch (gestione) + { + case 'N': + // Sconti di riga non gestiti + set_sconto(""); + break; + case 'L': + // Percentuale su contratti/offerte/listini/anagrafica + if (found_condv) + set_sconto(_rcondv.get("SCONTO")); + else + set_sconto(anamag().get("SCONTO")); + break; + case 'A': + { + // Posiziono l'anagrafica + const char rigakey = config_ditta().get_char( "SCORIGAKEY", "ve" ); + + _sconti.setkey(1); + _sconti.put("TIPO", "R"); + if( config_ditta().get_bool("GESSCORIGACV", "ve")) + _sconti.put("CODCAT", clifo().get(LF_CFVEN, "CATVEN")); + if( config_ditta().get_bool("GESSCORIGAUM", "ve")) + _sconti.put("UM", riga().get( FR_UMQTA)); + _sconti.put("TIPORIGA", rigakey); + switch (rigakey) + { + case 'A': + _sconti.put("CODART", codriga); + _sconti.read(); + break; + case 'R': + _sconti.put("CODART", anamag().get("RAGGFIS")); + _sconti.read(); + break; + case 'C': + { + const TRectype rec_to_found(_sconti.curr()); + + _sconti.put( "CODART", anamag().get( "GRMERC1" ) ); + if (_sconti.read() != NOERR ) + { + _sconti.curr() = rec_to_found; + _sconti.put( "CODART", anamag().get( "GRMERC2" ) ); + if (_sconti.read() != NOERR ) + { + _sconti.curr() = rec_to_found; + _sconti.put( "CODART", anamag().get( "GRMERC3" ) ); + _sconti.read( ); + } + } + } + break; + case 'L': + { + const TRectype rec_to_found(_sconti.curr()); + + _sconti.put("CODART", anamag().get("GRMERC1").left(3)); + if (_sconti.read() != NOERR ) + { + _sconti.curr() = rec_to_found; + _sconti.put("CODART", anamag().get("GRMERC2").left(3)); + if (_sconti.read() != NOERR ) + { + _sconti.curr() = rec_to_found; + _sconti.put("CODART", anamag().get("GRMERC3").left(3)); + _sconti.read(); + } + } + } + break; + default: + error_box("Tipo di chiave righe sconti '%c' non valida!", rigakey); + break; + } + if (_sconti.bad()) + _sconti.zero(); + set_sconto(_sconti.get("SCONTO")); + } + break; + case 'C': + set_sconto(clifo().get(LF_CFVEN, "SCONTO")); + break; + default: + error_box("Tipo di gestione sconti '%c' non valido!", gestione ); + break; + } + } + + if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active()) + { + const TString16 codage(_testa->get(F_CODAG)); + + if (codage.not_empty()) + { + TTable age("AGE"); + + age.put("CODTAB", codage); + if (age.read() == NOERR) + { + char tipoprovv = age.get("S6")[0]; + + if (tipoprovv <= ' ') + tipoprovv = config_ditta().get_char( "AGETIPOPERC", "ve" ); + + if (!full_load) + { + if (tipoprovv == 'L' && found_condv) + set_provv(_rcondv.get_real("PERCPROVV")); + } + else + { + switch (tipoprovv) + { + case 'A': + set_provv(age.get_real("R0")); + break; + case 'C': + set_provv(real(clifo().get(LF_CFVEN, "PERCPROVV"))); + break; + case 'L': + if (found_condv) + set_provv(_rcondv.get_real("PERCPROVV")); + else + set_provv(anamag().get_real("PERCPROVV")); + break; + case 'V': + { + TString16 catven(testa().get(F_CATVEN)); + + if (catven.empty()) + catven = clifo().get(LF_CFVEN, "CATVEN"); + + if (catven.not_empty()) + { + TTable cve("%CVE"); + + cve.put("CODART", codage); + if (cve.read() == NOERR) + set_provv(cve.get_real("R0")); + } + } + break; + default: + error_box("Tipo di gestione provvigioni '%c' non valido!", tipoprovv ); + 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 ) +TCond_vendita::TCond_vendita(TCliFor& clifo, TConfig * ditta, TMask * testa, TMask * riga, + TLocalisamfile * anamag, TLocalisamfile * umart) + : _clifo(&clifo), _testa(testa), _riga(riga), + _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _sconti( LF_SCONTI ), + _anamag(anamag), _umart(umart), _config_ditta(ditta), _ivarid(FALSE) { - _clifo = &clifo; - _testa = testa; - _riga = riga; } diff --git a/ve/sconti.h b/ve/sconti.h index 11b1691ea..29699ae71 100755 --- a/ve/sconti.h +++ b/ve/sconti.h @@ -19,44 +19,54 @@ class TCond_vendita : public TObject { - TString _sconto; + TString80 _sconto; + TString16 _codiva; + bool _ivarid; real _prezzo; - bool _valid; - int _errorpos; - real _part; - TCliFor* _clifo; - // TRelation _condv; - // Invece che la relazione uso i due files, poichè mi interessa sempre - // solo una delle righe + real _provv; + real _molt_sconto; + TCliFor * _clifo; TLocalisamfile _condv; TLocalisamfile _rcondv; - TLocalisamfile _anamag; + TLocalisamfile * _anamag; TLocalisamfile _sconti; - TConfig _ditta; - TMask* _testa; - TMask* _riga; + TLocalisamfile * _umart; + TConfig * _config_ditta; + TMask * _testa; + TMask * _riga; - bool cerca( int tiporicerca ); + bool cerca(int tiporicerca); + +protected: + void set_prezzo(const real & prezzo,const char * val_rif = ""); + void set_provv(const real & provv); + void set_iva(const TString & codiva); + + TCliFor & clifo() const { CHECK(_clifo, "Cliente/fornitore non inizializzato"); return * _clifo; } + TConfig & config_ditta() const { CHECK(_clifo, "Configurazione ditta non inizializzata"); return * _config_ditta; } + TMask & testa() const { CHECK(_testa, "Maschera testata non inizializzata"); return * _testa; } + TMask & riga() const { CHECK(_testa, "Maschera testata non inizializzata"); return * _riga; } + TLocalisamfile & anamag() const { CHECK(_anamag, "Anagrafica di magazzino non inizializzata") ; return *_anamag; } + TLocalisamfile & umart() const { CHECK(_umart, "Anagrafica di unita' di misura magazzino non inizializzata") ; return *_umart; } public: + bool set_sconto( const char * exp, bool signal = FALSE ); + const TString& get_sconto() const { return _sconto; } + real sconto_val() const { return _molt_sconto;} + real get_prezzo() const { return _prezzo; } + real get_provv() const { return _provv; } + const TString & get_iva() const { return _codiva; } - 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 ); } + void set_config( TConfig * ditta){ _config_ditta = ditta; } + void set_testa( TMask * testa ){ _testa = testa; } + void set_riga( TMask * riga ){ _riga = riga; } + void set_anamag(TLocalisamfile & anamag) { _anamag = &anamag; } + void set_umart(TLocalisamfile & umart) { _umart = &umart; } + void ricerca(bool full_load = TRUE); + bool gestum() const { return _condv.get_bool("GESTUM"); } - 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(TCliFor & clifo, TConfig * _ditta = NULL, TMask * testa = NULL, TMask * riga = NULL, + TLocalisamfile * anamag = NULL, TLocalisamfile * umart = NULL); ~TCond_vendita() {} }; diff --git a/ve/tclifor.cpp b/ve/tclifor.cpp index f745125e2..f65a6f7dc 100755 --- a/ve/tclifor.cpp +++ b/ve/tclifor.cpp @@ -137,6 +137,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" ); set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" ); set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" ); + set(m, F_CATVEN, LF_CFVEN, "CATVEN"); } if ( occasionale ( ) ) { @@ -168,7 +169,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) const TString16 newcodval(m.get(F_CODVAL)); const TString16 newdatacambio(m.get(F_DATACAMBIO)); - if (newcodval.empty() || newdatacambio.empty()) + if ((m.id2pos(F_CAMBIO) >= 0) && (newcodval.empty() || newdatacambio.empty())) m.reset(F_CAMBIO); m.check_field(F_CODVAL); if (codval != newcodval || datacambio != newdatacambio) @@ -190,6 +191,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload ) m.check_field( F_CODVETT1 ); m.check_field( F_CODVETT2 ); m.check_field( F_CODVETT3 ); + m.check_field( F_CATVEN ); // imposta_dati_comune( m ); imposta_indirizzo_spedizione( m ); imposta_sconto_testa( m ); diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index c4b48794e..9893cd0ca 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -6,37 +6,39 @@ TMotore_application& app( ) { return ( TMotore_application& ) main_app( ); } void TMotore_application::init_query_mode( TMask& m ) { - _msk->set( F_CODNUM, _codnum); + _msk->set( F_CODNUM, _doc->numerazione()); _msk->field(F_CODNUM).set_focusdirty(TRUE); _msk->field(F_CODNUM).on_key(K_TAB); _msk->field(F_CODNUM).set_dirty(FALSE); - _msk->set( F_PROFILO, _profilo, TRUE); - _msk->set( F_TIPODOC, _tipodoc, TRUE); + _msk->set( F_TIPODOC, _doc->tipodoc(), TRUE); } void TMotore_application::init_insert_mode( TMask& m ) { TString tipocf( "A" ); tipocf[ 0 ] = app().tipocf(); - m.reset(); - m.set(F_PROFILO, _profilo); - m.set(F_CODNUM, _codnum); + + const TString16 codnum(m.get(F_CODNUM)); + const int anno = m.get_int(F_ANNO); + const char provv = m.get(F_PROVV)[0]; + const long numdoc = m.get_long(F_NDOC); + + _doc->read(provv, anno, codnum, numdoc); + _doc->head().put("TIPODOC", m.get(F_TIPODOC)); + 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_STATO, _statodoc); + m.set(F_STATO, _doc->head().get("STATO")); 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 + const int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof + TMask & emask = edit_mask(); + for( int i = 1; i <= ndefaults; i++ ) { TString16 chiave; @@ -44,10 +46,24 @@ void TMotore_application::init_insert_mode( TMask& m ) TToken_string valore( pro( ).get( chiave, "DEFAULT" ) ); int campo( valore.get_int( 0 ) ); TString default_val( valore.get( 1 ) ); - edit_mask( ).set( campo, default_val, TRUE ); + emask.set( campo, default_val, TRUE ); } } +void TMotore_application::update_profile() +{ + TFilename fn(_doc->tipo().profile_name()); + + fn.ext("ini"); + if (_pro && _pro->name() != fn) + { + delete _pro; + _pro = NULL; + } + if (_pro == NULL) + _pro = new TConfig( fn ); +} + int TMotore_application::user_function( int index ) { switch( index ) @@ -88,7 +104,7 @@ TMask *TMotore_application::ss_getmask( int numriga, TMask& fullmask, bool destr r->load(ss, riga); } TAssoc_array & row_masks = app()._row_masks; - TMask * row_mask = (TMask *) row_masks.objptr(tipo); + TVariable_mask * row_mask = (TVariable_mask *) row_masks.objptr(tipo); if (row_mask == NULL) { row_mask = r->getmask(); @@ -296,28 +312,6 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key ) return TRUE; } -/* bool TMotore_application::ndoc_handler( TMask_field& f, KEY key ) -{ - TMask& m = f.mask( ); - if ( key == K_TAB && m.is_running( ) ) - { - TLocalisamfile& doc = app( ).rel( ).lfile( ); - doc.zero( ); - doc.put( "CODNUM", m.get( F_CODNUM ) ); - doc.put( "PROVV", m.get( F_PROVV ) ); - doc.put( "ANNO", m.get( F_ANNO ) ); - doc.put( "NDOC", f.get( ) ); - if ( doc.read( ) == NOERR ) - { - m.set( F_TIPODOC, doc.get( "TIPODOC" ) ); - m.send_key(K_TAB, F_TIPODOC); - m.set( F_STATO, doc.get( "STATO" ) ); - m.stop_run( K_AUTO_ENTER ); - } - } - return TRUE; -} -*/ bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) { @@ -330,11 +324,6 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file(); const long codcf = atol(f.get()); -/* 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, "")) @@ -425,8 +414,7 @@ void TMotore_application::configura_sheet( TSheet_field& sheet, TConfig& config const int sconto_col = sheet.cid2index(FR_SCONTO); if (to_delete[sconto_col] == FALSE) { - TConfig ditta(CONFIG_DITTA); - const bool del = (ditta.get("GESSCORIGA") == "N"); + const bool del = (_config_ditta->get("GESSCORIGA") == "N"); to_delete.set(sconto_col, del); } @@ -439,99 +427,74 @@ void TMotore_application::configura_sheet( TSheet_field& sheet, TConfig& config } } -void TMotore_application::get_edit_mask( const char * profilo ) -{ - TFilename fn( profilo ); - - // query_mask( ).enable( DLG_NEWREC ); - fn.ext( "ini" ); - if ( _pro ) - { - if ( ( *_proname ) == fn ) - return; - delete _pro; - } - _pro = new TConfig( fn ); - _proname = new TFilename( fn ); - _proname->upper( ); - TVariable_mask * _msk1 = (TVariable_mask *) _doc_masks.objptr(_tipodoc); - const bool newmask = _msk1 == NULL; - - if (newmask) - { - _msk1 = new TVariable_mask( pro( ).get( "MSKFILE", "MAIN" ) ); // prof - _doc_masks.add(_tipodoc, _msk1); - } - _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) - { - TList_field& listbox = ( TList_field& ) _msk1->field( F_LBTIPORIGA ); - const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); //prof - TTable tabtr( "%TRI" ); - TToken_string keys( "" ), descrs( "" ); - for ( int i = 1; i <= numtr; i ++ ) - { - TString chiave; - TToken_string item; - chiave.format( "%d", i ); - tabtr.zero( ); - TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); // pro - tabtr.put( "CODTAB", tiporiga ); - if ( tabtr.read( ) == NOERR ) - { - keys.add( tabtr.get( "CODTAB" ) ); - descrs.add( tabtr.get( "S0" ) ); - } - else - error_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga ); - } - listbox.replace_items( keys, descrs ); - configura_sheet( *_sheet, *_pro ); - ((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask ); - if (_msk1->id2pos( F_OCCASEDIT ) > 0 ) - _msk1->set_handler( F_OCCASEDIT, occas_handler ); - _msk1->set_handler( F_CODCF, clifo_handler ); - _msk1->set_handler( F_CODPAG, condpag_hndl ); - _msk1->set_handler( F_DATAINSC, condpag_hndl ); -// _msk1->set_handler( 99, elabora_handler ); - int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof - for ( i = 1; i <= numhandler; i ++ ) - { - TString chiave; - chiave.format( "%d", i ); - TToken_string riga = pro( ).get( chiave, "HANDLERS" ); - user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) ); - } - } - // _msk1->set( F_MEMORIGA, "Riga1" ); -} - TMask* TMotore_application::get_mask( int mode ) -{ +{ switch ( mode ) { case MODE_INS: case MODE_MOD: - { - _profilo = _msk->get( F_PROFILO ); - _codnum = _msk->get( F_CODNUM ); - _tipodoc = _msk->get( F_TIPODOC ); - _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 ); + { + const TString16 tipodoc(_msk->get(F_TIPODOC)); + + _doc->head().put("TIPODOC", tipodoc); + + TVariable_mask * msk1 = (TVariable_mask *) _doc_masks.objptr(tipodoc); + + update_profile(); + + TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof + app( ).tipocf( tipocf[ 0 ] ); + if (msk1 == NULL) + { + msk1 = new TVariable_mask(_doc->tipo().mask_name()); // prof + _doc_masks.add(tipodoc, msk1); + _sheet = &( TSheet_field& )msk1->field( F_SHEET ); + sheet( ).set_notify( ss_handler ); + sheet().set_append(FALSE); + TList_field& listbox = ( TList_field& ) msk1->field( F_LBTIPORIGA ); + const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); //prof + TTable tabtr( "%TRI" ); + TToken_string keys( "" ), descrs( "" ); + for ( int i = 1; i <= numtr; i ++ ) + { + TString chiave; + TToken_string item; + chiave.format( "%d", i ); + tabtr.zero( ); + TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); // pro + tabtr.put( "CODTAB", tiporiga ); + if ( tabtr.read( ) == NOERR ) + { + keys.add( tabtr.get( "CODTAB" ) ); + descrs.add( tabtr.get( "S0" ) ); + } + else + error_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga ); + } + listbox.replace_items( keys, descrs ); + configura_sheet( *_sheet, *_pro ); + ((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask ); + if (msk1->id2pos( F_OCCASEDIT ) > 0 ) + msk1->set_handler( F_OCCASEDIT, occas_handler ); + msk1->set_handler( F_CODCF, clifo_handler ); + msk1->set_handler( F_CODPAG, condpag_hndl ); + msk1->set_handler( F_DATAINSC, condpag_hndl ); + // _msk1->set_handler( 99, elabora_handler ); + int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof + for ( i = 1; i <= numhandler; i ++ ) + { + TString chiave; + chiave.format( "%d", i ); + TToken_string riga = pro( ).get( chiave, "HANDLERS" ); + user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) ); + } + } + else + _sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET ); + return msk1; + } break; - } default: - if( _msk == NULL) - _msk = new TMask( "ve1000a" ); return _msk; break; } @@ -555,75 +518,63 @@ const char* TMotore_application::get_next_key( ) { TToken_string key; TMask& m = curr_mask( ); - const TString value = m.get( F_CODNUM ); - if (value.empty()) - return NULL; - TTable tabnum( "NUM" ); - tabnum.zero( ); - tabnum.put( "CODTAB", value ); - if ( tabnum.read( ) == NOERR ) + + if (value.not_empty()) { - // Se per questa numerazione h abilitata le numerazione automatica - if ( tabnum.get_bool ( "B1" ) ) + TTable tabnum( "NUM" ); + tabnum.zero( ); + tabnum.put( "CODTAB", value ); + if ( tabnum.read( ) == NOERR && tabnum.get_bool ( "B1" )) + // Se per questa numerazione h abilitata le numerazione automatica { - TLocalisamfile doc( LF_DOC ); - doc.zero( ); - doc.put( "CODNUM", value ); - doc.put( "ANNO", m.get( F_ANNO ) ); + TLocalisamfile doc(LF_DOC); + doc.zero(); + doc.put("CODNUM", value); + doc.put("ANNO", m.get(F_ANNO)); + doc.put("PROVV", m.get(F_PROVV)); + + TRectype cmp_rec(doc.curr()); // record campione + doc.put( "NDOC", 9999999L ); - // Se per questa numerazione h abilitata le numerazione provvisoria - if ( tabnum.get_bool ( "B0" ) ) - { - doc.put( "PROVV", "P" ); - } - else // Altrimenti ... - { - doc.put( "PROVV", "D" ); - } - if ( doc.read( _isgteq ) == NOERR ) - { - doc.prev( ); - } - long num = ( value == doc.get( "CODNUM" ) ) ? doc.get_long( "NDOC" ) : 0; - key.format( "%d|%d", F_NDOC, num + 1 ); - return key; + if (doc.read(_isgteq) == NOERR) + doc.prev(); + + const long num = ((doc.curr() == cmp_rec) ? doc.get_long( "NDOC" ) : 0) + 1; + + key.format( "%d|%d", F_NDOC, num); } } - return NULL; + return key; } int TMotore_application::read( TMask& m ) { - azzera_piedi( ); - int err = TRelation_application::read( m ); + azzera_piedi( ); + + TRectype & curr = _rel->lfile().curr(); + const int err = _doc->read(curr); + if ( err == NOERR ) - { - const char tipocf = m.get( F_TIPOCF )[ 0 ]; - 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( ); -/* - r.put( "CODNUM", _codnum); - r.put( "PROVV", _tiponum); - r.put( "ANNO", _anno); - r.put( "NDOC", _numdoc); -*/ - 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)); - _righe_rec->read( r ); + { + curr = _doc->head(); + m.autoload(*_rel); + const char tipocf = _doc->head().get("TIPOCF")[0]; + const long codcf = _doc->head().get_long("CODCF"); + const TString occas_cod(_doc->head().get("OCFPI")); + + clifo().load( tipocf, codcf, occas_cod); + clifo().update_mask( ( TVariable_mask& ) m, TRUE ); + TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET ); + f.destroy( ); - int last = _righe_rec->last_row( ); - for ( int i = 1; i <= last; i ++ ) + const int rows = _doc->rows(); + for (int i = 1; i <= rows; i++) { TToken_string& srow = f.row( i - 1 ); - TRectype& rec = _righe_rec->row( i, FALSE ); + TRectype& rec = (*_doc)[i]; + TRiga currentrow; currentrow.load( rec ); @@ -636,14 +587,6 @@ int TMotore_application::read( TMask& m ) return err; } -bool TMotore_application::check_key( TLocalisamfile& rdoc, TString16 codnum, bool provv, TString16 anno, TString16 ndoc ) -{ - return ( ( rdoc.get( "CODNUM" ) == codnum ) && - ( rdoc.get( "NDOC" ) == ndoc ) && - ( rdoc.get( "ANNO" ) == anno ) && - ( rdoc.get_bool( "PROVV" ) == provv ) ); -} - int TMotore_application::write( const TMask& m ) // C 90 { int err = esegui_procedura(OP_NUOVO); @@ -655,32 +598,25 @@ int TMotore_application::write( const TMask& m ) // C 90 err = app().clifo().write_occas(); if ( err == NOERR ) { - err = TRelation_application::write( m ); - if ( err == NOERR ) - { - TSheet_field& f = ss( ); - _righe_rec->destroy_rows( ); - ((TRectype &)_righe_rec->key()).zero(); - /* - _righe_rec->renum_key("CODNUM", _codnum); - _righe_rec->renum_key("PROVV", _tiponum); - _righe_rec->renum_key("ANNO", _anno); - _righe_rec->renum_key("NDOC", _numdoc); - */ - _righe_rec->renum_key( "CODNUM", m.get(F_CODNUM)); - _righe_rec->renum_key( "PROVV", m.get(F_PROVV)); - _righe_rec->renum_key( "ANNO", m.get(F_ANNO)); - _righe_rec->renum_key( "NDOC", m.get(F_NDOC)); - for ( int i = 0; i < f.items( ); i ++ ) - { - TToken_string& t = f.row( i ); - TRectype& rec = _righe_rec->row( i + 1, TRUE ); - store_riga( f, i, rec ); - } - err = _righe_rec->write( ); - } + m.autosave(*_rel); + _doc->head() = _rel->lfile().curr(); + TSheet_field& f = ss( ); + _doc->destroy_rows(); + for ( int i = 0; i < f.items( ); i ++ ) + { + TToken_string& t = f.row( i ); + TRectype& rec = _doc->add_row(); + store_riga( f, i, rec ); + } + err = _doc->write( ); + } + if (err == NOERR) + { + _rel->curr() = _doc->head(); + _rel->read(); // per posizionare correttamente la relazione } } + return err; } @@ -696,62 +632,30 @@ int TMotore_application::rewrite( const TMask& m ) // C 90 err = app( ).clifo( ).write_occas( ); if ( err == NOERR ) { - err = TRelation_application::rewrite( m ); - if ( err == NOERR ) - { - TSheet_field& f = ss( ); - _righe_rec->destroy_rows( ); - for ( int i = 0; i < f.items( ); i ++ ) - { - TToken_string& t = f.row( i ); - TRectype& rec = _righe_rec->row( i + 1, TRUE ); - store_riga( f, i, rec ); - } - err = _righe_rec->rewrite( ); - } + m.autosave(*_rel); + _doc->head() = _rel->lfile().curr(); + + TSheet_field& f = ss( ); + _doc->destroy_rows( ); + for ( int i = 0; i < f.items( ); i ++ ) + { + TToken_string& t = f.row( i ); + TRectype& rec = _doc->add_row(); + store_riga( f, i, rec ); + } + err = _doc->rewrite( ); } } return err; } -// La funzione si trova in ve0100b - -long TMotore_application::prossimo_numero( bool provv ) -{ - long ret; - TTable tabnum( "NUM" ); - - tabnum.read( ); - if ( provv ) - ret = tabnum.get_long( "I0" ) + 1; - else - ret = tabnum.get_long( "I1" ) + 1; - return ( ret ); -} - -int TMotore_application::avanza_numero( bool provv ) -{ - TTable tabnum( "NUM" ); - - int err = tabnum.read( ); - if ( err == NOERR ) - { - if ( provv ) - tabnum.put( "I0", tabnum.get_long( "I0" ) + 1 ); - else - tabnum.put( "I1", tabnum.get_long( "I1" ) + 1 ); - err = tabnum.rewrite( ); - } - return err; -} - bool TMotore_application::remove( void ) // C 80 { if ( ! valida_operazione( OP_CANCELLA ) ) return FALSE; int err = esegui_procedura(OP_CANCELLA); - return TRelation_application::remove() && ( _righe_rec->remove() == NOERR ); + return _doc->remove() == NOERR; } void TMotore_application::load_riga( TSheet_field& f, int numrig, TRectype& r ) @@ -802,16 +706,38 @@ void TMotore_application::store_riga( TSheet_field& f, int numrig, TRectype& r ) TToken_string& rigastr = f.row( numrig ); TRiga riga; riga.load(f, rigastr, &r); -// riga.set_numero( numrig + 1 ); riga.save( r ); } +void TMotore_application::open_files(int logicnum, ...) +{ + va_list marker; + va_start(marker, logicnum); + while (logicnum > 0) + { + CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum); + _file.add(new TLocalisamfile(logicnum), logicnum); + logicnum = va_arg(marker, int); + } +} + +void TMotore_application::on_firm_change() +{ + if (_config_ditta != NULL) + delete _config_ditta; + _config_ditta = new TConfig(CONFIG_DITTA); + condv().set_config(_config_ditta); + _doc_masks.destroy(); + _row_masks.destroy(); + TApplication::on_firm_change(); +} + bool TMotore_application::user_create( ) { - TConfig ditta( CONFIG_DITTA ); - + _config_ditta = new TConfig(CONFIG_DITTA); + // Controllo se sono cambiate le impostazioni delle vendite. - if (ditta.get_bool( "CHANGED", "ve" )) + if (_config_ditta->get_bool( "CHANGED", "ve" )) { // Se sono cambiate, rigenero tutte le maschere if (yesno_box( CHANGE_MESSAGE ) ) { @@ -825,22 +751,19 @@ bool TMotore_application::user_create( ) // Metto in relazione testata e righe _rel = new TRelation( LF_DOC ); - _rdoc = new TLocalisamfile(LF_RIGHEDOC); -// rel( ).add( LF_RIGHEDOC,"CODNUM=CODNUM|ANNO=ANNO|PROVV=PROVV|NDOC=NDOC" ); - - // Inizializzo il Record_array - _righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 ); + open_files(LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, 0); + _doc = new TDocumento; _clifor = new TCliForVendite( ); + _condv = new TCond_vendita(*_clifor, _config_ditta); + azzera_piedi( ); - _msk = new TMask( "ve1000a" ); -// query_mask( ).set_handler( F_NDOC, ndoc_handler ); + _msk = new TMask( "ve0100a" ); query_mask( ).set_handler( F_CODNUM, num_handler ); query_mask( ).set_handler( F_TIPODOC, tip_handler ); TConfig utente( CONFIG_USER ); - _codnum = utente.get( "CODNUM", "ve" ); - if (!_codnum.blank( )) - _tipodoc = utente.get( "TIPODOC", "ve" ); + _doc->head().put("CODNUM", utente.get("CODNUM")); + _doc->head().put("TIPODOC", utente.get("TIPODOC")); // La maschera di inserimento/modifica per ora non la so! // Viene letta dal profilo non appena trovato il record @@ -851,19 +774,19 @@ bool TMotore_application::user_destroy( ) { // Registro l'ultimo tipo documento e l'ultima numerazione TConfig utente( CONFIG_USER ); - utente.set( "CODNUM", _codnum, "ve" ); - utente.set( "TIPODOC", _tipodoc, "ve" ); + utente.set( "CODNUM", _doc->numerazione(), "ve" ); + utente.set( "TIPODOC", _doc->tipodoc(), "ve" ); + if (_config_ditta != NULL) + delete _config_ditta; // Distruggo la maschera di modifica if ( _msk != NULL ) delete _msk; // Distruggo la relazione + delete _doc; delete _rel; - delete _rdoc; - - // Distruggo il Record_array - delete _righe_rec; + delete _condv; return TRUE; } @@ -935,26 +858,9 @@ bool TMotore_application::stato_valido( int stato, int operazione ) return ( ret.get_pos( p ) != -1 ); } -/*void TMotore_application::setta_stato_corrente( int nuovostato ) - { - // warning_box( "Settaggio stati validi!\nStato corrente %s.\nStati validi %s.\nStato finale %s.", stato_corrente( ), stati_validi( operazione ), stato_finale( operazione ) ); - TString p; - p.format( "%d", nuovostato ); - - TLocalisamfile& doc = rel( ).lfile( LF_DOC ); - - p[ 0 ] += ( char ) nuovostato; - doc.put( "STATO", p ); - doc.rewrite( ); - query_mask( ).set( F_STATO, p ); - // warning_box( "Settaggio stati validi!\nStato corrente %s.\nStati validi %s.\nStato finale %s.", stato_corrente( ), stati_validi( operazione ), stato_finale( operazione ) ); - } */ - int TMotore_application::stato_corrente( ) { -// int i = query_mask( ).get_int( F_STATO ); -// return ( i == 0 ? NO_DOC_STATUS : i ); - return _statodoc; + return _doc->head().get_int("STATO"); } void TMotore_application::segnala_stato_non_valido( int operazione ) diff --git a/ve/ve0100.h b/ve/ve0100.h index 0ade89f6a..9612fcc75 100755 --- a/ve/ve0100.h +++ b/ve/ve0100.h @@ -131,44 +131,41 @@ // Definizione della classe dell'applicazione motore class TMotore_application : public TRelation_application { + + TArray _file; // Tutti i fiels da usare // Array di totalizzatori TPiede_documento _piede; - // Record array per la gestione delle righe - TRecord_array* _righe_rec; - - // Puntatore al profilo del documento caricato - TConfig* _pro; - - // Puntatore al nome, per evitare di ricrearlo se h uguale - TFilename* _proname; - - // Puntatore alla maschera di ricerca - TMask* _msk; + TDocumento * _doc; + + // Puntatore al profilo del documento caricato + TConfig * _pro; + TConfig * _config_ditta; + + // Puntatore alla maschera di ricerca + TMask * _msk; - // Puntatore alla maschera di modifica/inserimento ( dipende dal profilo ) - // TVariable_mask* _msk1; - // puntatore alla relazione - TRelation* _rel; - TLocalisamfile * _rdoc; + TRelation * _rel; // Puntatore allo sheet delle righe documento TSheet_field * _sheet; // Oggetto cliente per il motore - TCliForVendite* _clifor; + TCliForVendite * _clifor; + + TCond_vendita * _condv; // Indica se il documento ha come soggetto un liente o un ornitore char _tipocf; - TString16 _profilo; - TString16 _codnum; - TString16 _tipodoc; - int _anno; - TString16 _tiponum; - long _numdoc; - int _statodoc; +// TString16 _profilo; +// TString16 _codnum; +// TString16 _tipodoc; +// int _anno; +// TString16 _tiponum; +// long _numdoc; +// int _statodoc; // Array di maschere documento @@ -201,9 +198,6 @@ class TMotore_application : public TRelation_application void user_set_handler( int fieldid, int index, TMask* m = NULL ); - long prossimo_numero( bool provv ); - int avanza_numero( bool provv ); - void get_edit_mask( const char * profilo ); void azzera_piedi( ); void carica_piedi( ); void somma_piedi( ); @@ -214,8 +208,14 @@ class TMotore_application : public TRelation_application protected: + void open_files(int logicnum, ...); + void close_files() { _file.destroy(); } + virtual void on_firm_change(); + // Procedure e funzioni per la gestione della maschera e dei files - void read_rdoc( TMask& m ); + void read_rdoc( TMask& m ); + void update_profile(); + // formato dipendente dallo sheet ( sono le varie colonne ) void load_riga( TSheet_field& f, int numrig, TRectype& r ); @@ -224,7 +224,6 @@ protected: void save( TRelation* r ) const; void set_descr ( int numrig, const char* descr ); void carica_righe_libere( int from = -1 ); - bool check_key( TLocalisamfile& rdoc, TString16 codnum, bool provv, TString16 _anno, TString16 _ndoc ); // Procedure e funzioni per la gestione degli stati // void setta_stato_corrente( int nuovostato ); @@ -262,15 +261,15 @@ public: // Funzioni di accesso alle variabili private - TRecord_array& righe_rec( ) { CHECK( _righe_rec, "Record array delle righe nullo!" ); return * _righe_rec; } - TConfig& pro( ) { CHECK( _pro, "Profilo del documento nullo!" ); return *_pro; } - TFilename& proname( ) { CHECK( _proname, "Nome del profilo nullo!" ); return *_proname; } - TMask& query_mask( ) { CHECK( _msk, "Maschera di ricerca nulla!" ); return *_msk; } - TMask& edit_mask( ) { return (TMask &) _doc_masks[_tipodoc]; } - TRelation& rel( ) { CHECK( _rel, "Relazione nulla!" ); return *_rel; } - TSheet_field& sheet( ) { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; } - TCliForVendite& clifo( ) { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; } - TPiede_documento& piede( ){ return _piede; } + TConfig & pro() { CHECK( _pro, "Profilo del documento nullo!" ); return *_pro; } + const TFilename & proname() { return _pro->name(); } + TMask & query_mask() { CHECK( _msk, "Maschera di ricerca nulla!" ); return *_msk; } + TMask & edit_mask() { return (TMask &) _doc_masks[_doc->tipodoc()]; } + TRelation & rel() { CHECK( _rel, "Relazione nulla!" ); return *_rel; } + TSheet_field & sheet() { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; } + TCliForVendite & clifo() { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; } + TPiede_documento & piede() { return _piede; } + TCond_vendita & condv() { return *_condv; } // Operazione diff --git a/ve/ve0100c.cpp b/ve/ve0100c.cpp index 62210e142..b1d59c566 100755 --- a/ve/ve0100c.cpp +++ b/ve/ve0100c.cpp @@ -104,17 +104,3 @@ bool condpag_hndl( TMask_field& field, KEY key ) return TRUE; } -// handler per la validazione di una stringa/sconto -bool sconto_hndl( TMask_field& field, KEY key ) -{ - if (field.to_check(key, TRUE)) - { - 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/ve0200a.uml b/ve/ve0200a.uml index 640aed796..5c0d09fc2 100755 --- a/ve/ve0200a.uml +++ b/ve/ve0200a.uml @@ -8,7 +8,7 @@ BEGIN PROMPT -12 -1 "" END -BUTTON DLG_QUIT 10 2 +BUTTON DLG_QUIT 10 2 BEGIN PROMPT -22 -1 "" END @@ -117,7 +117,7 @@ BOOLEAN 111 BEGIN PROMPT 2 2 "Gestione archivio campagne" MESSAGE TRUE ENABLE,3@ -MESSAGE FALSE DISABLE,3@ +MESSAGE FALSE DISABLE,3@ FIELD GES[A_CAMPAGNE] END @@ -189,7 +189,7 @@ END ENDPAGE -PAGE "Tab. gestione sconti " 1 1 60 14 +PAGE "Tab. gestione sconti " 1 1 60 14 GROUPBOX DLG_NULL 78 10 BEGIN @@ -204,7 +204,7 @@ ITEM "P|Percentuale su anagrafica " ITEM "T|Gestione tabella sconti " ITEM "A|Gestione archivio sconti " FIELD GESSCO -END +END BOOLEAN 120 BEGIN @@ -291,7 +291,7 @@ ITEM "L|Codice linea " ITEM "C|Codice linea/categoria " ITEM "R|Codice raggruppamento fiscale " FIELD SCORIGAKEY -END +END BOOLEAN 129 BEGIN @@ -301,7 +301,7 @@ END BOOLEAN 130 BEGIN -PROMPT 2 13 "Gestione archivio sconti unità di misura " +PROMPT 2 13 "Gestione archivio sconti unita' di misura " FIELD GESSCOUM END diff --git a/ve/ve0200b.uml b/ve/ve0200b.uml index 8dc446aca..85bad70eb 100755 --- a/ve/ve0200b.uml +++ b/ve/ve0200b.uml @@ -8,7 +8,7 @@ BEGIN PROMPT -12 -1 "" END -BUTTON DLG_QUIT 10 2 +BUTTON DLG_QUIT 10 2 BEGIN PROMPT -22 -1 "" END @@ -37,19 +37,18 @@ FIELD GESSUBAGE GROUP 8 END -LIST F_TIPOPERC 33 +LIST F_TIPOPERC 25 BEGIN FIELD AGETIPOPERC PROMPT 2 3 "Tipo percentuale da proporre " -ITEM "V|Tab. categorie vendite agenti " -ITEM "A|Tab. agenti " -ITEM "C|Archivio clienti " -ITEM "L|Archivio listini o contratti " -ITEM "P|Provvigioni sulla tabella agenti " +ITEM "V|Categoria vendita" +ITEM "A|Agenti " +ITEM "C|Clienti " +ITEM "L|Condizioni di vendita" GROUP 1 -END +END -BOOLEAN F_GESARCHPROV +BOOLEAN F_GESARCHPROV BEGIN PROMPT 2 4 "Gestione archivio provvigioni " FIELD AGEARCPROVV @@ -61,28 +60,28 @@ BEGIN PROMPT 2 5 "Chiavi archivio provvigioni " FIELD AGEKEYPROVV[1] GROUP 1 -END +END STRING F_ARCHPROV2 4 BEGIN PROMPT 2 6 " " FIELD AGEKEYPROVV[2] GROUP 1 -END +END STRING F_ARCHPROV3 4 BEGIN PROMPT 2 7 " " FIELD AGEKEYPROVV[3] GROUP 1 -END +END STRING F_ARCHPROV4 4 BEGIN PROMPT 2 8 " " FIELD AGEKEYPROVV[4] GROUP 1 -END +END LIST F_TIPOLIQPROV 41 BEGIN @@ -419,7 +418,7 @@ END ENDPAGE -PAGE "Tabella arrotondamenti " 1 1 60 14 +PAGE "Tabella arrotondamenti " 1 1 60 14 GROUPBOX DLG_NULL 78 9 BEGIN @@ -430,79 +429,79 @@ NUMBER DLG_NULL 9 BEGIN PROMPT 2 1 "Arrot. prezzi: fino a lire " FIELD ARRLIV[ 1 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 42 1 "" FIELD ARRARG[ 1 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 29 2 "" FIELD ARRLIV[ 2 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 42 2 "" FIELD ARRARG[ 2 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 29 3 "" FIELD ARRLIV[ 3 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 42 3 "" FIELD ARRARG[ 3 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 29 4 "" FIELD ARRLIV[ 4 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 42 4 "" FIELD ARRARG[ 4 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 29 5 "" FIELD ARRLIV[ 5 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 42 5 "" FIELD ARRARG[ 5 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 29 6 "" FIELD ARRLIV[ 6 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 42 6 "" FIELD ARRARG[ 6 ] -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 29 7 "oltre " FIELD ARRARG[ 7 ] -END +END ENDPAGE diff --git a/ve/ve0200c.uml b/ve/ve0200c.uml index b38aa2ce8..d6108a224 100755 --- a/ve/ve0200c.uml +++ b/ve/ve0200c.uml @@ -8,7 +8,7 @@ BEGIN PROMPT -12 -1 "" END -BUTTON DLG_QUIT 10 2 +BUTTON DLG_QUIT 10 2 BEGIN PROMPT -22 -1 "" END @@ -27,50 +27,50 @@ STRING DLG_NULL 3 BEGIN PROMPT 2 1 "Codice tabella sconto cliente " FIELD SCOPRCOD -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 3 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN PROMPT 2 5 "Cod. contabilità " FIELD SCOPRCODCON[1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 5 "" +PROMPT 29 5 "" FIELD SCOPRCODCON[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 5 "" +PROMPT 35 5 "" FIELD SCOPRCODCON[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 5 "" -END +PROMPT 47 5 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 7 "Num. campo piede documento " +PROMPT 2 7 "Num. campo piede documento " FIELD SCOPRNPIEDE -END +END STRING DLG_NULL 26 BEGIN -PROMPT 34 7 "" -END +PROMPT 34 7 "" +END ENDPAGE -PAGE "Tabella gestione sconto ad importo " 1 1 60 14 +PAGE "Tabella gestione sconto ad importo " 1 1 60 14 GROUPBOX DLG_NULL 78 9 BEGIN @@ -81,46 +81,46 @@ STRING DLG_NULL 3 BEGIN PROMPT 2 1 "Codice tabella sconto ad importo " FIELD SCOIMCOD -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 3 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN PROMPT 2 5 "Cod. contabilità " FIELD SCOIMCODCON[1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 5 "" +PROMPT 29 5 "" FIELD SCOIMCODCON[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 5 "" +PROMPT 35 5 "" FIELD SCOIMCODCON[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 5 "" -END +PROMPT 47 5 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 7 "Num. campo piede documento " +PROMPT 2 7 "Num. campo piede documento " FIELD SCOIMNPIEDE -END +END STRING DLG_NULL 26 BEGIN -PROMPT 34 7 "" -END +PROMPT 34 7 "" +END ENDPAGE diff --git a/ve/ve0200d.uml b/ve/ve0200d.uml index 88588a70c..b6e49e952 100755 --- a/ve/ve0200d.uml +++ b/ve/ve0200d.uml @@ -9,14 +9,14 @@ BEGIN PROMPT -12 -1 "" END -BUTTON DLG_QUIT 10 2 +BUTTON DLG_QUIT 10 2 BEGIN PROMPT -22 -1 "" END ENDPAGE -PAGE "Tabella gestione spese d'incasso " 1 1 60 14 +PAGE "Tabella gestione spese d'incasso " 1 1 60 14 GROUPBOX DLG_NULL 78 17 BEGIN @@ -27,127 +27,127 @@ BOOLEAN DLG_NULL BEGIN PROMPT 2 1 "Addebito spese d'incasso " FIELD SPINADD -END +END STRING DLG_NULL 3 BEGIN PROMPT 2 2 "Codice tabelle spese " FIELD SPINCODSP -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 3 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN PROMPT 2 4 "Cod. Iva " FIELD SPINCODIVA -END +END STRING DLG_NULL 26 BEGIN -PROMPT 29 4 "" -END +PROMPT 29 4 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 5 "Cod. contabilità " +PROMPT 2 5 "Cod. contabilita' " FIELD SPINCODCON[ 1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 5 "" +PROMPT 29 5 "" FIELD SPINCODCON[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 5 "" +PROMPT 35 5 "" FIELD SPINCODCON[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 5 "" -END +PROMPT 47 5 "" +END BOOLEAN DLG_NULL BEGIN PROMPT 2 6 "Incasso prima rata " FIELD SPININCPR -END +END STRING DLG_NULL 2 BEGIN PROMPT 2 7 "Num. campo piede documento " FIELD SPINNPIEDE -END +END STRING DLG_NULL 26 BEGIN -PROMPT 34 7 "" -END +PROMPT 34 7 "" +END NUMBER DLG_NULL 9 BEGIN PROMPT 2 8 "Importo spese per rimesse dirette " FIELD SPINIMRD -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 2 9 "Importo spese per tratte " FIELD SPINIMTR -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 2 10 "Importo spese per ricevute bancarie " FIELD SPINIMRB -END +END NUMBER DLG_NULL 9 BEGIN PROMPT 2 11 "Importo spese per cessioni " FIELD SPINIMCES -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 12 "Importo spese per pagheṛ " +PROMPT 2 12 "Importo spese per paghero' " FIELD SPINIMPAG -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 12 "Importo spese per lettere di credito " +PROMPT 2 12 "Importo spese per lettere di credito " FIELD SPINIMLET -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 13 "Importo spese per tratte accettate " +PROMPT 2 13 "Importo spese per tratte accettate " FIELD SPINIMTA -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 14 "Importo spese per R.I.D. " +PROMPT 2 14 "Importo spese per R.I.D. " FIELD SPINIMRID -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 15 "Importo spese per bonifici " +PROMPT 2 15 "Importo spese per bonifici " FIELD SPINIMBON -END +END ENDPAGE -PAGE "Tabella gestione spese d'incasso " 1 1 60 14 +PAGE "Tabella gestione spese d'incasso " 1 1 60 14 GROUPBOX DLG_NULL 78 19 BEGIN @@ -158,185 +158,185 @@ BOOLEAN DLG_NULL BEGIN PROMPT 2 1 "Addebito spese bolli ricevute bancarie " FIELD SPBRBADD -END +END STRING DLG_NULL 3 BEGIN PROMPT 2 2 "Codice tabelle spese " FIELD SPBRBCODSP -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 3 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 4 "Cod. Iva " +PROMPT 2 4 "Cod. Iva " FIELD SPBRBCODIVA -END +END STRING DLG_NULL 26 BEGIN -PROMPT 29 4 "" -END +PROMPT 29 4 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 5 "Cod. contabilità " +PROMPT 2 5 "Cod. contabilita' " FIELD SPBRBCODCONT[1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 5 "" +PROMPT 29 5 "" FIELD SPBRBCODCONT[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 5 "" +PROMPT 35 5 "" FIELD SPBRBCODCONT[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 5 "" -END +PROMPT 47 5 "" +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 6 "Incasso prima rata " +PROMPT 2 6 "Incasso prima rata " FIELD SPBRBINCPR -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 7 "Num. campo piede documento " +PROMPT 2 7 "Num. campo piede documento " FIELD SPBRBNPIEDE END STRING DLG_NULL 26 BEGIN -PROMPT 34 7 "" -END +PROMPT 34 7 "" +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 8 "Scaglione " +PROMPT 2 8 "Scaglione " FIELD SPBRBSCA[1] -END +END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 8 "Importo " +PROMPT 25 8 "Importo " FIELD SPBRBIMP[1] -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 9 "Scaglione " +PROMPT 2 9 "Scaglione " FIELD SPBRBSCA[2] -END +END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 9 "Importo " +PROMPT 25 9 "Importo " FIELD SPBRBIMP[2] -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 10 "Scaglione " +PROMPT 2 10 "Scaglione " FIELD SPBRBSCA[3] -END +END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 10 "Importo " +PROMPT 25 10 "Importo " FIELD SPBRBIMP[3] -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 11 "Scaglione " +PROMPT 2 11 "Scaglione " FIELD SPBRBSCA[4] -END +END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 11 "Importo " +PROMPT 25 11 "Importo " FIELD SPBRBIMP[4] -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 12 "Scaglione " +PROMPT 2 12 "Scaglione " FIELD SPBRBSCA[5] -END +END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 12 "Importo " +PROMPT 25 12 "Importo " FIELD SPBRBIMP[5] -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 13 "Scaglione " +PROMPT 2 13 "Scaglione " FIELD SPBRBSCA[6] -END +END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 13 "Importo " +PROMPT 25 13 "Importo " FIELD SPBRBIMP[6] -END +END NUMBER DLG_NULL 9 BEGIN -PROMPT 2 14 "Scaglione " +PROMPT 2 14 "Scaglione " FIELD SPBRBSCA[7] END NUMBER DLG_NULL 6 BEGIN -PROMPT 25 14 "Importo " +PROMPT 25 14 "Importo " FIELD SPBRBIMP[7] -END +END STRING DLG_NULL 5 BEGIN PROMPT 2 15 "Importo minimo R.B./1000 " FIELD SPBRBIMPMINRB -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 16 "Cod. pag. alternativo " +PROMPT 2 16 "Cod. pag. alternativo " FIELD SPBRBCODPAGALT -END +END STRING DLG_NULL 30 BEGIN -PROMPT 36 16 "" -END +PROMPT 36 16 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 17 "Classif. pag. RB a richiesta " +PROMPT 2 17 "Classif. pag. RB a richiesta " FIELD SPBRBCLAPAGRB -END +END STRING DLG_NULL 30 BEGIN -PROMPT 36 17 "" -END +PROMPT 36 17 "" +END ENDPAGE -PAGE "Tabella gestione spese d'incasso " 1 1 60 14 +PAGE "Tabella gestione spese d'incasso " 1 1 60 14 GROUPBOX DLG_NULL 78 11 BEGIN @@ -347,85 +347,85 @@ BOOLEAN DLG_NULL BEGIN PROMPT 2 1 "Addebito bolli fatture esenti " FIELD SPBFEADD -END +END STRING DLG_NULL 3 BEGIN PROMPT 2 2 "Codice tabelle spese " FIELD SPBFECODSP -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 3 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 4 "Cod. Iva " +PROMPT 2 4 "Cod. Iva " FIELD SPBFECODIVA -END +END STRING DLG_NULL 26 BEGIN -PROMPT 29 4 "" -END +PROMPT 29 4 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 5 "Cod. contabilità " +PROMPT 2 5 "Cod. contabilità " FIELD SPBFECODCONT[1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 5 "" +PROMPT 29 5 "" FIELD SPBFECODCONT[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 5 "" +PROMPT 35 5 "" FIELD SPBFECODCONT[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 5 "" -END +PROMPT 47 5 "" +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 6 "Incasso prima rata " +PROMPT 2 6 "Incasso prima rata " FIELD SPBFEINCPR -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 7 "Num. campo piede documento " +PROMPT 2 7 "Num. campo piede documento " FIELD SPBFENPIEDE -END +END STRING DLG_NULL 26 BEGIN -PROMPT 34 7 "" -END +PROMPT 34 7 "" +END STRING DLG_NULL 9 BEGIN -PROMPT 2 8 "Importo minimo fattura " +PROMPT 2 8 "Importo minimo fattura " FIELD SPBFEIMPMINFAT -END +END STRING DLG_NULL 6 BEGIN -PROMPT 2 9 "Importo bollo " +PROMPT 2 9 "Importo bollo " FIELD SPBFEIMPBOLLO -END +END ENDPAGE -PAGE "Tabella gestione bolli tratte Italia " 1 1 60 14 +PAGE "Tabella gestione bolli tratte Italia " 1 1 60 14 GROUPBOX DLG_NULL 78 14 BEGIN @@ -436,113 +436,113 @@ BOOLEAN DLG_NULL BEGIN PROMPT 2 1 "Addebito bolli su tratte Italia " FIELD SPTRADD -END +END STRING DLG_NULL 3 BEGIN PROMPT 2 2 "Codice tabelle spese " FIELD SPTRCODSP -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 3 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 4 "Cod. Iva " +PROMPT 2 4 "Cod. Iva " FIELD SPTRCODIVA -END +END STRING DLG_NULL 26 BEGIN -PROMPT 29 4 "" -END +PROMPT 29 4 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 5 "Cod. contabilità " +PROMPT 2 5 "Cod. contabilità " FIELD SPTRCODCON[1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 5 "" +PROMPT 29 5 "" FIELD SPTRCODCON[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 5 "" +PROMPT 35 5 "" FIELD SPTRCODCON[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 5 "" -END +PROMPT 47 5 "" +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 6 "Incasso prima rata " +PROMPT 2 6 "Incasso prima rata " FIELD SPTRINCPR -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 7 "Num. campo piede documento " +PROMPT 2 7 "Num. campo piede documento " FIELD SPTRNPIEDE -END +END STRING DLG_NULL 26 BEGIN -PROMPT 34 7 "" -END +PROMPT 34 7 "" +END NUMBER DLG_NULL 5 2 BEGIN -PROMPT 2 8 "Percentuale spese tratte " +PROMPT 2 8 "Percentuale spese tratte " FIELD SPTRPERCSPTR -END +END STRING DLG_NULL 5 BEGIN -PROMPT 2 9 "Importo minimo bollo " +PROMPT 2 9 "Importo minimo bollo " FIELD SPTRIMPMINBOL -END +END STRING DLG_NULL 5 BEGIN -PROMPT 2 10 "Importo minimo tratte /1000 " +PROMPT 2 10 "Importo minimo tratte /1000 " FIELD SPTRIMPMINTR -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 11 "Condizione pagam. alternativa " +PROMPT 2 11 "Condizione pagam. alternativa " FIELD SPTRCODPAGALT -END +END STRING DLG_NULL 30 BEGIN -PROMPT 42 11 "" -END +PROMPT 42 11 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 12 "Classif. pagamento TR a richiesta " +PROMPT 2 12 "Classif. pagamento TR a richiesta " FIELD SPTRCLASPAG -END +END STRING DLG_NULL 30 BEGIN -PROMPT 42 12 "" -END +PROMPT 42 12 "" +END ENDPAGE -PAGE "Tabella gestione bolli tratte estero " 1 1 60 14 +PAGE "Tabella gestione bolli tratte estero " 1 1 60 14 GROUPBOX DLG_NULL 78 10 BEGIN @@ -553,75 +553,75 @@ STRING DLG_NULL 3 BEGIN PROMPT 2 1 "Codice tabella spesa tratta estera " FIELD SPTECODSP -END +END STRING DLG_NULL 30 BEGIN PROMPT 2 2 "Descrizione " -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 3 "Cod. Iva " +PROMPT 2 3 "Cod. Iva " FIELD SPTECODIVA -END +END STRING DLG_NULL 26 BEGIN -PROMPT 29 3 "" -END +PROMPT 29 3 "" +END STRING DLG_NULL 2 BEGIN -PROMPT 2 4 "Cod. contabilità " +PROMPT 2 4 "Cod. contabilità " FIELD SPTECODCON[1,2] -END +END STRING DLG_NULL 2 BEGIN -PROMPT 29 4 "" +PROMPT 29 4 "" FIELD SPTECODCON[3,4] -END +END STRING DLG_NULL 6 BEGIN -PROMPT 35 4 "" +PROMPT 35 4 "" FIELD SPTECODCON[5,10] -END +END STRING DLG_NULL 26 BEGIN -PROMPT 47 4 "" -END +PROMPT 47 4 "" +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 5 "Incasso prima rata " +PROMPT 2 5 "Incasso prima rata " FIELD SPTEINCPR -END +END STRING DLG_NULL 2 BEGIN -PROMPT 2 6 "Num. campo piede documento " +PROMPT 2 6 "Num. campo piede documento " FIELD SPTENPIEDE -END +END STRING DLG_NULL 26 BEGIN -PROMPT 34 6 "" -END +PROMPT 34 6 "" +END NUMBER DLG_NULL 5 2 BEGIN -PROMPT 2 7 "Percentuale spese tratte " +PROMPT 2 7 "Percentuale spese tratte " FIELD SPTEPERCSPTR -END +END STRING DLG_NULL 5 BEGIN -PROMPT 2 8 "Importo minimo bollo " +PROMPT 2 8 "Importo minimo bollo " FIELD SPTEIMPMINBOL -END +END ENDPAGE diff --git a/ve/ve0200e.uml b/ve/ve0200e.uml index 708f0a605..58bc1c3ac 100755 --- a/ve/ve0200e.uml +++ b/ve/ve0200e.uml @@ -8,14 +8,14 @@ BEGIN PROMPT -12 -1 "" END -BUTTON DLG_QUIT 10 2 +BUTTON DLG_QUIT 10 2 BEGIN PROMPT -22 -1 "" END ENDPAGE -PAGE "Tabella descrizione codice articolo " 1 1 60 14 +PAGE "Tabella descrizione codice articolo " 1 1 60 14 GROUPBOX DLG_NULL 78 18 BEGIN @@ -25,185 +25,185 @@ END TEXT DLG_NULL BEGIN PROMPT 2 1 "Descr. Cod. " -END +END TEXT DLG_NULL BEGIN PROMPT 14 1 "Descrizione " -END +END TEXT DLG_NULL BEGIN PROMPT 48 1 "Lungh. campi " -END +END TEXT DLG_NULL BEGIN PROMPT 63 1 "Tipo campi " -END +END TEXT DLG_NULL BEGIN PROMPT 2 2 "Cod. art. " -END +END STRING DLG_NULL 30 BEGIN PROMPT 14 2 "" FIELD CODARTDES -END +END STRING DLG_NULL 2 BEGIN PROMPT 48 2 "" FIELD CODARTLUN[1] -END +END STRING DLG_NULL 2 BEGIN PROMPT 52 2 "" FIELD CODARTLUN[2] -END +END STRING DLG_NULL 2 BEGIN PROMPT 56 2 "" FIELD CODARTLUN[3] -END +END STRING DLG_NULL 2 BEGIN PROMPT 63 2 "" FIELD CODARTPIC[1] -END +END STRING DLG_NULL 2 BEGIN PROMPT 67 2 "" FIELD CODARTPIC[2] -END +END STRING DLG_NULL 2 BEGIN PROMPT 71 2 "" FIELD CODARTPIC[3] -END +END TEXT DLG_NULL BEGIN PROMPT 2 3 "I° indice " -END +END STRING DLG_NULL 30 BEGIN PROMPT 14 3 "" FIELD INDARTDES[1] -END +END STRING DLG_NULL 2 BEGIN PROMPT 48 3 "" FIELD INDARTLUN[1] -END +END STRING DLG_NULL 2 BEGIN PROMPT 63 3 "" FIELD INDARTPIC[1] -END +END TEXT DLG_NULL BEGIN PROMPT 2 4 "II° indice " -END +END STRING DLG_NULL 30 BEGIN PROMPT 14 4 "" FIELD INDARTDES[2] -END +END STRING DLG_NULL 2 BEGIN PROMPT 48 4 "" FIELD INDARTLUN[2] -END +END STRING DLG_NULL 2 BEGIN PROMPT 63 4 "" FIELD INDARTPIC[2] -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 6 "Gestione articoli in lingua " +PROMPT 2 6 "Gestione articoli in lingua " FIELD ARTGESLIN -END +END NUMBER DLG_NULL 1 BEGIN -PROMPT 5 7 "Codice lingua n.1 " +PROMPT 5 7 "Codice lingua n.1 " FIELD ARTCODLIN[1] -END +END NUMBER DLG_NULL 1 BEGIN -PROMPT 5 8 "Codice lingua n.2 " +PROMPT 5 8 "Codice lingua n.2 " FIELD ARTCODLIN[2] -END +END NUMBER DLG_NULL 1 BEGIN -PROMPT 5 9 "Codice lingua n.3 " +PROMPT 5 9 "Codice lingua n.3 " FIELD ARTCODLIN[3] -END +END NUMBER DLG_NULL 1 BEGIN -PROMPT 5 10 "Codice lingua n.4 " +PROMPT 5 10 "Codice lingua n.4 " FIELD ARTCODLIN[4] -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 11 "Gestione più magazzini " +PROMPT 2 11 "Gestione più magazzini " FIELD ARTGESMAG -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 12 "Gestione depositi " +PROMPT 2 12 "Gestione depositi " FIELD ARTGESDEP -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 13 "Gestione commesse " +PROMPT 2 13 "Gestione commesse " FIELD ARTGESCOMM -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 14 "Gestione quantità in decimali " +PROMPT 2 14 "Gestione quantita' in decimali " FIELD ARTGESQDEC -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 15 "Gestione valuta " +PROMPT 2 15 "Gestione valuta " FIELD ARTGESVAL -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 16 "Ripetizione primo indice " +PROMPT 2 16 "Ripetizione primo indice " FIELD ARTRIPIND -END +END ENDPAGE -PAGE "Tabella personalizzazione anagrafico articoli " 1 1 60 14 +PAGE "Tabella personalizzazione anagrafico articoli " 1 1 60 14 GROUPBOX DLG_NULL 78 18 BEGIN @@ -214,7 +214,7 @@ BOOLEAN DLG_NULL BEGIN PROMPT 2 1 "Gestione descrizioni estese " FIELD ARTGESDESCEST -END +END LIST DLG_NULL 35 BEGIN @@ -229,77 +229,73 @@ BOOLEAN DLG_NULL BEGIN PROMPT 2 3 "Gestione articoli per taglia " FIELD ARTGESTAGLIA -END +END STRING DLG_NULL 10 BEGIN PROMPT 2 4 "Descrizione campi chiave " FIELD ARTDESCHI[1] -END +END STRING DLG_NULL 10 BEGIN PROMPT 2 5 "Descrizione campi chiave " FIELD ARTDESCHI[2] -END +END BOOLEAN DLG_NULL BEGIN -PROMPT 2 6 "Gestione più unità di misura " +PROMPT 2 6 "Gestione piu' unita' di misura " FIELD ARTGESUM -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 7 "Gestione secondo codice iva " FIELD ARTGESCODIVA -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 8 "Gestione campi peso lordo/netto " FIELD ARTGESPLN -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 9 "Gestione campo aspetto dei beni " FIELD ARTGESASPBEN -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 10 "Gestione campo codice gruppo articolo " FIELD ARTGESCODGR -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 11 "Gestione campo distinta base " FIELD ARTGESDB -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 12 "Gestione campo categorie vendite " FIELD ARTGESCATVEN -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 13 "Gestione campo categorie acquisti " FIELD ARTGESCATACQ -END +END BOOLEAN DLG_NULL BEGIN PROMPT 2 14 "Gestione codice fornitore " FIELD ARTGESCODFOR -END +END ENDPAGE - - ENDMASK - - diff --git a/ve/ve0300a.src b/ve/ve0300a.src index fc0d339a0..cb9f3b97a 100755 --- a/ve/ve0300a.src +++ b/ve/ve0300a.src @@ -525,7 +525,7 @@ FLAG=Z USE=%BAN SE CODTAB?="?????" INPUT=CODTAB[1,5] F_CODABIA DISPLAY="Cod. Istit." CODTAB[1,5]~"Cod. Fil." CODTAB[6,10]~"Denominazione@50" S0 -OUTPUT=F_CODABIA CODTAB[1,5]~F_CODCABA CODTAB[6,10]~F_DESBANAPP S0 +OUTPUT=F_CODABIA CODTAB[1,5]~F_DESBANAPP S0 [CODCABA] GROUP=600 @@ -540,7 +540,7 @@ FLAG=Z USE=%BAN SE CODTAB?="??????????" INPUT=CODTAB[1,5] F_CODABIA~CODTAB[6,10] F_CODCABA DISPLAY=@F_CODABIA -OUTPUT=@F_CODABIA +OUTPUT=F_CODABIA CODTAB[1,5]~F_CODCABA CODTAB[6,10]~F_DESBANAPP S0 [DESBANAPP] GROUP=600 @@ -568,7 +568,7 @@ FLAG=Z USE=@F_CODABIA INPUT=CODTAB[1,5] F_CODABIP DISPLAY="Cod. Istit." CODTAB[1,5]~"Cod. Fil." CODTAB[6,10]~"Denominazione@50" S0 -OUTPUT=F_CODABIP CODTAB[1,5]~F_CODCABP CODTAB[6,10]~F_DESBANPRE S0 +OUTPUT=F_CODABIP CODTAB[1,5]~F_DESBANPRE S0 [CODCABP] GROUP=700 @@ -583,7 +583,7 @@ FLAG=Z USE=@F_CODCABA INPUT=CODTAB[1,5] F_CODABIP~CODTAB[6,10] F_CODCABP DISPLAY=@F_CODABIP -OUTPUT=@F_CODABIP +OUTPUT=F_CODABIP CODTAB[1,5]~F_CODCABP CODTAB[6,10]~F_DESBANPRE S0 [DESBANPRE] GROUP=700 @@ -903,7 +903,7 @@ TYPE=T_STRINGA PROMPT="Agente " SIZE=5 FLAG=U -USE=%AGE +USE=AGE INPUT=CODTAB F_CODAG DISPLAY="Codice" CODTAB~"Descrizione@50" S0 OUTPUT=F_CODAG CODTAB~F_DESAG S0 @@ -918,7 +918,7 @@ MSKID=F_DESAG TYPE=T_STRINGA PROMPT="" SIZE=50 -USE=%AGE KEY 2 +USE=AGE KEY 2 INPUT=S0 F_DESAG DISPLAY="Descrizione@50" S0~"Codice" CODTAB OUTPUT=F_CODAG CODTAB~F_DESAG S0 @@ -934,7 +934,7 @@ TYPE=T_STRINGA PROMPT="Agente da vis. " SIZE=5 FLAG=U -USE=%AGE +USE=AGE INPUT=CODTAB F_CODAGVIS DISPLAY="Codice" CODTAB~"Descrizione@50" S0 OUTPUT=F_CODAGVIS CODTAB~F_DESAGVIS S0 @@ -949,7 +949,7 @@ MSKID=F_DESAGVIS TYPE=T_STRINGA PROMPT="" SIZE=50 -USE=%AGE KEY 2 +USE=AGE KEY 2 INPUT=S0 F_DESAGVIS DISPLAY="Descrizione@50" S0~"Codice" CODTAB OUTPUT=F_CODAGVIS CODTAB~F_DESAGVIS S0 diff --git a/ve/ve2400.uml b/ve/ve2400.uml index ef19a461a..2c6d2fdf6 100755 --- a/ve/ve2400.uml +++ b/ve/ve2400.uml @@ -461,7 +461,7 @@ BEGIN PROMPT 2 4 "Raggrupp. fiscale " FIELD LF_ANAMAG->RAGGFIS USE %RFA - JOIN %ASF ALIAS 200 INTO CODTAB=S8 + JOIN %ASF ALIAS 200 INTO CODTAB=S8 INPUT CODTAB F_RAGGFIS DISPLAY "Codice " CODTAB DISPLAY "Descrizione@40" S0 @@ -519,7 +519,7 @@ END NUMBER F_PROVV 5 2 BEGIN - FIELD LF_ANAMAG->PROVV + FIELD LF_ANAMAG->PERCPROVV PROMPT 2 7 "Provvigione " NUM_EXPR (#F_PROVV>=0)&&(#F_PROVV<=100) WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100" @@ -552,4 +552,4 @@ ENDMASK #include "ve2400a.uml" #include "ve2400b.uml" #include "ve2400c.uml" - + diff --git a/ve/velib01.cpp b/ve/velib01.cpp index 1ce30d6be..3bca07a31 100755 --- a/ve/velib01.cpp +++ b/ve/velib01.cpp @@ -116,17 +116,17 @@ int TDocumento::read(const TRectype& rec) { _head = rec; // Inizializza i campi chiave in ogni caso + TRectype* key = new TRectype(LF_RIGHEDOC); + + key->put("CODNUM", _head.get("CODNUM")); + key->put("ANNO", _head.get("ANNO")); + key->put("PROVV", _head.get("PROVV")); + key->put("NDOC", _head.get("NDOC")); + TLocalisamfile doc(LF_DOC); int err = _head.read(doc); - - TRectype* key = new TRectype(LF_RIGHEDOC); - key->put("CODNUM", doc.get("CODNUM")); - key->put("ANNO", doc.get("ANNO")); - key->put("PROVV", doc.get("PROVV")); - key->put("NUMDOC", doc.get("NUMDOC")); - if (err == NOERR) - err = _rows.read(key); + _rows.read(key); else { _head = rec; @@ -146,7 +146,7 @@ int TDocumento::read(char provv, int anno, const char* codnum, long numdoc) rec.put("CODNUM", codnum); rec.put("ANNO", anno); rec.put("PROVV", provv); - rec.put("NUMDOC", numdoc); + rec.put("NDOC", numdoc); return read(rec); } @@ -154,28 +154,43 @@ int TDocumento::read(char provv, int anno, const char* codnum, long numdoc) int TDocumento::write(bool re) const { TLocalisamfile doc(LF_DOC); - int err = re ? _head.rewrite(doc) : _head.write(doc); - if (err != NOERR) - err = re ? _head.write(doc) : _head.rewrite(doc); - if (err == NOERR) - err = _rows.write(re); + int err = NOERR; + + if (re) + { + err = _rows.write(re); + if (err == NOERR) + { + err = _head.rewrite(doc); + if (err != NOERR) + err = _head.write(doc); + } + } + else + { + err = _head.write(doc); + if (err != NOERR) + err = _head.rewrite(doc); + if (err == NOERR) + err = _rows.write(re); + } return err; } int TDocumento::remove() const { TLocalisamfile doc(LF_DOC); - int err = _head.remove(doc); + int err = _rows.remove(); if (err == NOERR) - err = _rows.remove(); + err = _head.remove(doc); return err; } const TTipo_documento& TDocumento::tipo() const { - const char* tipodoc = _head.get("TIPODOC"); + const TString16 tipodoc(_head.get("TIPODOC")); CHECK(*tipodoc, "Tipo documento nullo"); - TTipo_documento* o = (TTipo_documento*)_tipi.objptr(tipodoc); + TTipo_documento * o = (TTipo_documento*)_tipi.objptr(tipodoc); if (o == NULL) { o = new TTipo_documento(tipodoc); diff --git a/ve/velib01.h b/ve/velib01.h index de7c27923..fad606b91 100755 --- a/ve/velib01.h +++ b/ve/velib01.h @@ -21,7 +21,7 @@ protected: int read(const char* tipodoc); public: - TObject* dup() const { return new TTipo_documento(tipodoc()); } + TObject* dup() const { return new TTipo_documento(codice()); } public: enum TCondizione_uguaglianza @@ -69,9 +69,9 @@ public: const TTipo_documento & tipo() const; const TString & tipodoc() { return _head.get("TIPODOC"); } const TDate & data() const { return _head.get_date("DATADOC"); } - const TString & numerazione() { return _head.get("CODNUM"); } + const TString & numerazione() const { return _head.get("CODNUM"); } int anno() const { return _head.get_int("ANNO"); } - char tipo_numerazione() { return _head.get_int("PROVV"); } + char tipo_numerazione() const { return _head.get_int("PROVV"); } long numero() const { return _head.get_long("NDOC"); } TDocumento (); diff --git a/ve/verig.uml b/ve/verig.uml index 3dc1e21ba..652f4e070 100755 --- a/ve/verig.uml +++ b/ve/verig.uml @@ -165,6 +165,7 @@ ENDIF IFDEF(FL_CODART) FLAGS FL_CODART ENDIF + ADD RUN ve2 -3 END ENDIF @@ -256,6 +257,7 @@ ENDIF DISPLAY "Descrizione@50" DESCR DISPLAY "Codice@20" CODART OUTPUT FR_DESCR DESCR + ADD RUN ve2 -3 END ENDIF diff --git a/ve/veuml.h b/ve/veuml.h index 6ab68d7cc..741dc7dae 100755 --- a/ve/veuml.h +++ b/ve/veuml.h @@ -72,7 +72,6 @@ #define F_G2 168 #define F_DATAAGG 169 // GESTITO DAL MOTORE #define F_UTENTE 170 // GESTITO DAL MOTORE -#define F_PROFILO 171 // GESTITO DAL MOTORE #define F_TIPODOC 172 // GESTITO DAL MOTORE #define F_DESNUM 173 // GESTITO DAL MOTORE #define F_TIPIDOCS 174 // GESTITO DAL MOTORE