Correzzioni al 24/07/96

git-svn-id: svn://10.65.10.50/trunk@3244 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-07-25 13:05:29 +00:00
parent 1c6c8197d6
commit 10b13bec8e
14 changed files with 807 additions and 584 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -17,59 +17,47 @@
#include <config.h>
#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

View File

@ -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 )

View File

@ -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

View File

@ -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 )

View File

@ -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

View File

@ -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;
}

View File

@ -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, "<D><P> " );
_m->prompt( 100, 100, "<D><P> " );
_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;
}

View File

@ -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

View File

@ -118,4 +118,4 @@ HEIGHT=4
[0]
HEIGHT =

View File

@ -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