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:
parent
1c6c8197d6
commit
10b13bec8e
@ -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
|
||||
|
@ -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
|
||||
|
192
ve/righedoc.cpp
192
ve/righedoc.cpp
@ -29,39 +29,143 @@ static void row_set_handler( TMask& m, const int field, const int index )
|
||||
yesnofatal_box( FALSE, "Funzione di handler sulla riga non definita( %d ).", index );
|
||||
}
|
||||
}
|
||||
|
||||
static bool riga_des_handler( TMask_field& f, KEY key )
|
||||
|
||||
HIDDEN TString16 curr_um;
|
||||
HIDDEN real curr_fc(1.0);
|
||||
|
||||
HIDDEN bool codart_handler( TMask_field& f, KEY key )
|
||||
{
|
||||
TMask& m = f.mask( );
|
||||
// Se qualcuno cerca di modificare la maschera
|
||||
if ( key == K_SPACE && m.is_running( ) )
|
||||
{
|
||||
TString val( f.get( ) );
|
||||
if ( val.len( ) >= 49 )
|
||||
if ( key == K_TAB && f.focusdirty())
|
||||
{
|
||||
TMask& row_mask = f.mask( );
|
||||
TMask & mask = app().edit_mask();
|
||||
TCond_vendita condv(app().clifo(), &mask, &row_mask);
|
||||
|
||||
condv.calcola();
|
||||
row_mask.set(FR_SCONTO, condv.get_sconto());
|
||||
row_mask.set(FR_PREZZO, condv.get_prezzo());
|
||||
|
||||
const TString16 lingua = mask.get(F_CODLIN);
|
||||
TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file();
|
||||
|
||||
if (anamag.bad() || (anamag.get("CODART") != f.get()))
|
||||
{
|
||||
TMask m1( "VE1000C" );
|
||||
m1.set( 101, f.get( ) );
|
||||
KEY k = m1.run( );
|
||||
if ( k == K_SAVE )
|
||||
f.set( m1.get( 101 ) );
|
||||
anamag.zero();
|
||||
anamag.put("CODART", f.get());
|
||||
if (anamag.read() != NOERR)
|
||||
anamag.zero();
|
||||
}
|
||||
if (anamag.curr().empty())
|
||||
{
|
||||
TLocalisamfile codalt(LF_CODCORR);
|
||||
|
||||
codalt.setkey(2);
|
||||
codalt.put("CODARTALT", f.get());
|
||||
if (codalt.read() == NOERR)
|
||||
{
|
||||
const TString80 codart(codalt.get("CODART"));
|
||||
anamag.zero();
|
||||
anamag.put("CODART", codart);
|
||||
if (anamag.read() == NOERR)
|
||||
f.set(codart);
|
||||
else
|
||||
anamag.zero();
|
||||
}
|
||||
}
|
||||
}
|
||||
TString desc(anamag.get("DESCR"));
|
||||
|
||||
if (lingua.not_empty())
|
||||
{
|
||||
TLocalisamfile deslin(LF_DESLIN);
|
||||
|
||||
deslin.setkey(2);
|
||||
deslin.put("CODART", row_mask.get(FR_CODART));
|
||||
deslin.put("CODLIN", lingua);
|
||||
if (deslin.read() == NOERR)
|
||||
desc = deslin.get("DESCR");
|
||||
}
|
||||
row_mask.set(FR_DESCR, desc);
|
||||
TLocalisamfile umart(LF_UMART);
|
||||
|
||||
umart.zero();
|
||||
umart.put("CODART", row_mask.get(FR_CODART));
|
||||
TRectype cmp_rec(umart.curr());
|
||||
curr_um.cut(0);
|
||||
curr_fc = 1.0;
|
||||
if (umart.read(_isgteq) == NOERR && umart.curr() == cmp_rec)
|
||||
{
|
||||
curr_um = umart.get("UM");
|
||||
curr_fc = umart.get_real("FC");
|
||||
row_mask.set(FR_UMQTA, curr_um);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool riga_art_handler( TMask_field& f, KEY key )
|
||||
|
||||
HIDDEN bool umart_handler( TMask_field& f, KEY key )
|
||||
{
|
||||
TMask& m = f.mask( );
|
||||
// Se qualcuno cerca di modificare la maschera
|
||||
if ( key == K_TAB ) // && m.is_running( ) )
|
||||
if ( key == K_TAB && f.focusdirty())
|
||||
{
|
||||
TSconto_riga r( app( ).clifo( ), &app( ).edit_mask( ), &m );
|
||||
r.calcola( );
|
||||
f.mask( ).set( FR_SCONTO, r.get( ) );
|
||||
}
|
||||
TMask& row_mask = f.mask( );
|
||||
TCond_vendita condv(app().clifo(), &app().edit_mask(), &row_mask);
|
||||
if (condv.gestum())
|
||||
{
|
||||
condv.calcola();
|
||||
row_mask.set(FR_SCONTO, condv.get_sconto());
|
||||
row_mask.set(FR_PREZZO, condv.get_prezzo());
|
||||
}
|
||||
const TString16 um(f.get());
|
||||
real fc(1.0);
|
||||
|
||||
if (um.not_empty() && curr_um.not_empty() && um != curr_um)
|
||||
{
|
||||
TLocalisamfile umart(LF_UMART);
|
||||
|
||||
umart.setkey(2);
|
||||
umart.put("CODART", row_mask.get(FR_CODART));
|
||||
umart.put("UM", um);
|
||||
if (umart.read() == NOERR)
|
||||
{
|
||||
real qta(row_mask.get_real(FR_QTA));
|
||||
qta *= curr_fc;
|
||||
fc = umart.get_real("FC");
|
||||
qta /= fc;
|
||||
row_mask.set(FR_QTA, qta);
|
||||
}
|
||||
|
||||
}
|
||||
curr_um = um;
|
||||
curr_fc = fc;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HIDDEN bool descr_handler( TMask_field& f, KEY key )
|
||||
{
|
||||
if (key == K_TAB && f.focusdirty())
|
||||
{
|
||||
const TString s(f.get());
|
||||
if (s.find('\n') < 0)
|
||||
{
|
||||
TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file();
|
||||
|
||||
anamag.zero();
|
||||
anamag.setkey(2);
|
||||
anamag.put("DESCR", ((TZoom_field &) f).get_first_line());
|
||||
if (anamag.read() == NOERR)
|
||||
{
|
||||
f.mask().set(FR_CODART, anamag.get("CODART"));
|
||||
f.mask().field(FR_CODART).set_dirty();
|
||||
f.mask().check_field(FR_CODART);
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r)
|
||||
{
|
||||
@ -75,7 +179,22 @@ void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r)
|
||||
codmag << row.get( f.cid2index(FR_CODDEP ));
|
||||
_data.put( "CODMAG", codmag);
|
||||
_data.put( "CODART", row.get( f.cid2index(FR_CODART )) );
|
||||
_data.put( "DESCR", row.get( f.cid2index(FR_DESCR )) );
|
||||
TString s(row.get(f.cid2index(FR_DESCR)));
|
||||
int split_pos = s.find('\n');
|
||||
if (split_pos > 0)
|
||||
{
|
||||
_data.put( "DESCR", s.left(split_pos));
|
||||
_data.put("DESCLUNGA", "X");
|
||||
s.ltrim(split_pos);
|
||||
_data.put("DESCEST", s);
|
||||
}
|
||||
else
|
||||
{
|
||||
_data.put("DESCR", s);
|
||||
_data.put("DESCLUNGA", "");
|
||||
_data.zero("DESCEST");
|
||||
}
|
||||
|
||||
_data.put( "PREZZO", row.get( f.cid2index(FR_PREZZO )) );
|
||||
_data.put( "UMQTA", row.get( f.cid2index(FR_UMQTA )) );
|
||||
_data.put( "QTA", row.get( f.cid2index(FR_QTA )) );
|
||||
@ -94,7 +213,7 @@ void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r)
|
||||
carica_profilo( );
|
||||
_piede.destroy( );
|
||||
somma( _piede );
|
||||
// _piede.put( "G1", _piede.string( ) );
|
||||
_data.put( "G1", _piede.string( ) );
|
||||
if (r)
|
||||
*r = _data;
|
||||
|
||||
@ -108,7 +227,10 @@ void TRiga::save(TSheet_field & f, TToken_string& row )
|
||||
row.add( codmag.left(3), f.cid2index(FR_CODMAG ));
|
||||
row.add( codmag.mid(3), f.cid2index(FR_CODDEP ));
|
||||
row.add( _data.get( "CODART" ), f.cid2index(FR_CODART ));
|
||||
row.add( _data.get( "DESCR" ), f.cid2index(FR_DESCR ));
|
||||
TString s(_data.get("DESCR"));
|
||||
if (_data.get_bool("DESCLUNGA"))
|
||||
s << _data.get("DESCEST");
|
||||
row.add(s, f.cid2index(FR_DESCR ));
|
||||
row.add( _data.get( "UMQTA" ), f.cid2index(FR_UMQTA ));
|
||||
row.add( _data.get( "PREZZO" ), f.cid2index(FR_PREZZO ));
|
||||
row.add( _data.get( "QTA" ), f.cid2index(FR_QTA ));
|
||||
@ -124,7 +246,7 @@ void TRiga::save(TSheet_field & f, TToken_string& row )
|
||||
row.add( _data.get( "CODIVA" ), f.cid2index(FR_CODIVA ));
|
||||
row.add( _data.get( "ADDIVA" ), f.cid2index(FR_ADDIVA ));
|
||||
row.add( _data.get( "ASPBENI" ), f.cid2index(FR_ASPBENI ));
|
||||
// row.add( _piede.string( ), f.cid2index(FR_G1 )); rimettere
|
||||
// row.add( _piede.string( ), f.cid2index(FR_G1 ));
|
||||
}
|
||||
|
||||
void TRiga::load( const TRectype& rec )
|
||||
@ -245,8 +367,28 @@ TMask * TRiga::getmask( )
|
||||
chiave.format( "%d", i );
|
||||
TToken_string riga = _pro->get( chiave, "HANDLERS" );
|
||||
row_set_handler( *mask, riga.get_int( 0 ), riga.get_int( 1 ) );
|
||||
}
|
||||
const TMask_field & f = mask->field(FR_CODART);
|
||||
if (f.is_edit())
|
||||
{
|
||||
TBrowse * browse = ((TEdit_field &) f).browse();
|
||||
|
||||
if (browse )
|
||||
{
|
||||
TCursor * cur = browse->cursor();
|
||||
CHECK(cur, "Null cursor in CODART check");
|
||||
if (cur)
|
||||
{
|
||||
const int num = cur->file().num();
|
||||
if (num == LF_ANAMAG)
|
||||
{
|
||||
mask->set_handler( FR_CODART, codart_handler );
|
||||
mask->set_handler( FR_UMQTA, umart_handler );
|
||||
mask->set_handler( FR_DESCR, descr_handler );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mask->set_handler( FR_DESCR, riga_des_handler );
|
||||
return mask;
|
||||
}
|
||||
|
||||
|
172
ve/sconti.cpp
172
ve/sconti.cpp
@ -24,9 +24,9 @@
|
||||
|
||||
#define A_ANAMAG 0
|
||||
|
||||
const real TSconto::cento( "100" );
|
||||
HIDDEN const real CENTO(100.0);
|
||||
|
||||
void TSconto::set( const TString& exp, bool signal )
|
||||
void TCond_vendita::set_sconto( const char * exp, bool signal )
|
||||
{
|
||||
TString work( exp );
|
||||
TString goodexp;
|
||||
@ -34,6 +34,12 @@ void TSconto::set( const TString& exp, bool signal )
|
||||
|
||||
// Elimina gli spazi molesti
|
||||
work.strip_spaces( );
|
||||
if (work.empty())
|
||||
{
|
||||
_sconto = "";
|
||||
return;
|
||||
}
|
||||
|
||||
// Per ora nessun errore
|
||||
_errorpos = -1;
|
||||
|
||||
@ -57,7 +63,7 @@ void TSconto::set( const TString& exp, bool signal )
|
||||
{
|
||||
// Aggiunge il numero alla sequenza
|
||||
real newval( num );
|
||||
_part = _part * ( cento + newval ) / cento;
|
||||
_part = _part * ( CENTO + newval ) / CENTO;
|
||||
if( newval >= 0 )
|
||||
goodexp << '+';
|
||||
goodexp << num;
|
||||
@ -111,12 +117,12 @@ void TSconto::set( const TString& exp, bool signal )
|
||||
{
|
||||
// Aggiunge l'ultimo numero preso
|
||||
real lastval( num );
|
||||
_part = _part * ( cento + lastval ) / cento;
|
||||
_part = _part * ( CENTO + lastval ) / CENTO;
|
||||
if( lastval >= 0 )
|
||||
goodexp << '+';
|
||||
goodexp << num;
|
||||
// Assegna la nuova espressione formattata bene
|
||||
_exp = goodexp;
|
||||
_sconto = goodexp;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -125,35 +131,28 @@ void TSconto::set( const TString& exp, bool signal )
|
||||
}
|
||||
}
|
||||
|
||||
real TSconto::sconto( )
|
||||
real TCond_vendita::sconto_val( )
|
||||
{
|
||||
CHECK(is_valid( ),"Tentativo di usare uno sconto non valido!" );
|
||||
return ( ( _part * cento ) - cento );
|
||||
return ( ( _part * CENTO ) - CENTO );
|
||||
}
|
||||
|
||||
|
||||
TSconto_riga::TSconto_riga( TCliFor& clifo, TMask * testa, TMask * riga ) : _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _anamag( LF_ANAMAG ), _sconti( LF_SCONTI ), _ditta( CONFIG_DITTA )
|
||||
bool TCond_vendita::cerca( int tiporicerca )
|
||||
{
|
||||
_clifo = &clifo;
|
||||
_testa = testa;
|
||||
_riga = riga;
|
||||
}
|
||||
|
||||
bool TSconto_riga::cerca_condv( int tiporicerca )
|
||||
{
|
||||
TString s1 = _anamag.get( "CODART" );
|
||||
TString s2 = riga( ).get( FR_CODART );
|
||||
if( s1 != s2 )
|
||||
TString codart = _anamag.get( "CODART" );
|
||||
TString codriga = riga( ).get( FR_CODART );
|
||||
if( codriga != codart )
|
||||
{
|
||||
_anamag.setkey( 1 );
|
||||
_anamag.zero( );
|
||||
_anamag.put( "CODART", riga( ).get( FR_CODART ) );
|
||||
int ret = _anamag.read( );
|
||||
CHECK( ret == NOERR, "Articolo non trovato in anagrafica di magazzino!" );
|
||||
_anamag.put( "CODART", codriga );
|
||||
if (_anamag.read( ) != NOERR)
|
||||
_anamag.zero();
|
||||
}
|
||||
if( tiporicerca == A_ANAMAG )
|
||||
// Se ricercavo per anagrafica, ho gi` finito
|
||||
return TRUE;
|
||||
return !_anamag.curr().empty();
|
||||
if( _ditta.get_bool( "GES", "ve", tiporicerca ) )
|
||||
{
|
||||
// Se h attiva la gestione contratti ...
|
||||
@ -163,19 +162,13 @@ bool TSconto_riga::cerca_condv( int tiporicerca )
|
||||
{
|
||||
case A_CONTRATTI:
|
||||
_condv.put( "TIPO", "C" );
|
||||
_condv.blank( "CATVEN" );
|
||||
if( _ditta.get_bool( "GESSCONCC", "ve" ) )
|
||||
{
|
||||
// Se in ditta h abilitata la gestione del cliente in chiave
|
||||
// al contratto, lo carico con gioia
|
||||
_condv.put( "TIPOCF", clifo( ).tipocf( ) );
|
||||
_condv.put( "CODCF", clifo( ).codcf( ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_condv.blank( "TIPOCF" );
|
||||
_condv.blank( "CODCF" );
|
||||
}
|
||||
_condv.put( "CODCF", clifo( ).codcf( ) );
|
||||
}
|
||||
_condv.put( "COD", testa( ).get( F_CODCONT ) );
|
||||
break;
|
||||
case A_LISTINI:
|
||||
@ -187,19 +180,10 @@ bool TSconto_riga::cerca_condv( int tiporicerca )
|
||||
_condv.put( "TIPOCF", clifo( ).tipocf( ) );
|
||||
_condv.put( "CODCF", clifo( ).codcf( ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_condv.blank( "TIPOCF" );
|
||||
_condv.blank( "CODCF" );
|
||||
}
|
||||
_condv.blank( "CATVEN" );
|
||||
_condv.put( "COD", testa( ).get( F_CODLIST ) );
|
||||
break;
|
||||
case A_OFFERTE:
|
||||
_condv.put( "TIPO", "O" );
|
||||
_condv.blank( "CATVEN" );
|
||||
_condv.blank( "TIPOCF" );
|
||||
_condv.blank( "CODCF" );
|
||||
_condv.put( "COD", testa( ).get( F_CODCAMP ) );
|
||||
break;
|
||||
}
|
||||
@ -212,22 +196,11 @@ bool TSconto_riga::cerca_condv( int tiporicerca )
|
||||
_rcondv.put( "TIPOCF", _condv.get( "TIPOCF" ) );
|
||||
_rcondv.put( "CODCF", _condv.get( "CODCF" ) );
|
||||
if( _condv.get_bool( "GESTUM" ) )
|
||||
{
|
||||
_rcondv.put( "UM", riga( ).get( FR_UMQTA ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_rcondv.blank( "UM" );
|
||||
}
|
||||
if( _condv.get_bool( "GESTSCA" ) )
|
||||
{
|
||||
if( _condv.get_bool( "GESTSCAGL" ) )
|
||||
_rcondv.put( "QLIM", riga( ).get( FR_QTA ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
_rcondv.blank( "QLIM" );
|
||||
}
|
||||
const TString16 seqricrighe( _condv.get( "SEQRIC" ) );
|
||||
|
||||
for( int i = 0; i < seqricrighe.len( ); i ++ )
|
||||
{
|
||||
|
||||
@ -236,84 +209,91 @@ bool TSconto_riga::cerca_condv( int tiporicerca )
|
||||
switch( ricerca )
|
||||
{
|
||||
case 'A':
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "CODART" ) );
|
||||
_rcondv.put( "CODRIGA", codriga);
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
if( _rcondv.prev() == NOERR && _rcondv.get("TIPORIGA")[0] == 'A')
|
||||
{
|
||||
const TString cod_found(_rcondv.get("CODRIGA"));
|
||||
|
||||
return cod_found.compare(codriga, cod_found.len()) == 0;
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "RAGGFIS" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
break;
|
||||
case 'G':
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC1" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC2" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC3" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
case 'G':
|
||||
{
|
||||
const TRectype rec_to_found(_rcondv.curr());
|
||||
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC1" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
_rcondv.curr() = rec_to_found;
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC2" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
_rcondv.curr() = rec_to_found;
|
||||
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC3" ) );
|
||||
if( _rcondv.read( ) == NOERR ) return TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
CHECK( FALSE, "Tipo di ricerca righe non valido!" );
|
||||
error_box("Tipo di ricerca righe %c non valido", ricerca );
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Ricerca fallita
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
// Ricerca fallita
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
// La ricerca non h gestita, impossibile trovarlo ...
|
||||
return FALSE;
|
||||
// Ricerca fallita
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Probabilmente dovrebbe lavorare sulla maschera, ma per ora la lasciamo cosl
|
||||
void TSconto_riga::calcola( )
|
||||
void TCond_vendita::calcola( )
|
||||
{
|
||||
char gestione = _ditta.get_char( "GESSCORIGA", "ve" );
|
||||
bool trovato = TRUE;
|
||||
const char gestione = _ditta.get_char( "GESSCORIGA", "ve" );
|
||||
|
||||
set_sconto("");
|
||||
const bool condv_found = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
|
||||
set_prezzo(condv_found ? _rcondv.get_real( "PREZZO") : ZERO);
|
||||
|
||||
switch( gestione )
|
||||
{
|
||||
case 'N':
|
||||
// Sconti di riga non gestiti
|
||||
set( "" );
|
||||
break;
|
||||
case 'L':
|
||||
// Percentuale su contratti/offerte/listini/anagrafica
|
||||
trovato = cerca_condv( A_CONTRATTI );
|
||||
if( !trovato ) trovato = cerca_condv( A_OFFERTE );
|
||||
if( !trovato ) trovato = cerca_condv( A_LISTINI );
|
||||
if( !trovato )
|
||||
set( _rcondv.get( "SCONTO" ) );
|
||||
// Percentuale su contratti/offerte/listini/anagrafica
|
||||
if (condv_found)
|
||||
set_sconto( _rcondv.get( "SCONTO" ) );
|
||||
else
|
||||
{
|
||||
if( cerca_condv( A_ANAMAG ) )
|
||||
set( _anamag.get( "SCONTO" ) );
|
||||
else
|
||||
CHECK( FALSE, "Sconto non trovato!( 1 )" );
|
||||
}
|
||||
if(cerca( A_ANAMAG ))
|
||||
set_sconto( _anamag.get("SCONTO"));
|
||||
break;
|
||||
case 'A':
|
||||
// Posiziono l'anagrafica
|
||||
cerca_condv( A_ANAMAG );
|
||||
_sconti.setkey( 1 );
|
||||
_sconti.put( "TIPO", "R" );
|
||||
_sconti.put( "CODART", _anamag.get( "CODART" ) );
|
||||
_sconti.put( "CODART", riga().get(FR_CODART));
|
||||
if( _ditta.get_bool( "GESSCORIGACV", "ve" ) )
|
||||
{
|
||||
_sconti.put( "CODCAT", clifo( ).get( LF_CFVEN, "SCONTO" ) );
|
||||
}
|
||||
if( _ditta.get_bool( "GESSCORIGAUM", "ve" ) )
|
||||
{
|
||||
_sconti.put( "UM", riga( ).get( FR_UMQTA ) );
|
||||
}
|
||||
if( _sconti.read( ) == NOERR )
|
||||
// Bravo, hai vinto una bambolina
|
||||
set( _sconti.get( "SCONTO" ) );
|
||||
else
|
||||
CHECK( FALSE, "Sconto non trovato!( 2 )" );
|
||||
set_sconto( _sconti.get("SCONTO") );
|
||||
break;
|
||||
case 'C':
|
||||
set( clifo( ).get( LF_CFVEN, "SCONTO" ) );
|
||||
set_sconto(clifo( ).get(LF_CFVEN, "SCONTO"));
|
||||
break;
|
||||
default:
|
||||
error_box( FALSE, "Tipo di gestione sconti %c non valido!", gestione );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
TCond_vendita::TCond_vendita( TCliFor& clifo, TMask * testa, TMask * riga ) : _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _anamag( LF_ANAMAG ), _sconti( LF_SCONTI ), _ditta( CONFIG_DITTA )
|
||||
{
|
||||
_clifo = &clifo;
|
||||
_testa = testa;
|
||||
_riga = riga;
|
||||
}
|
||||
|
||||
|
78
ve/sconti.h
78
ve/sconti.h
@ -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
|
||||
|
226
ve/tclifor.cpp
226
ve/tclifor.cpp
@ -16,19 +16,12 @@
|
||||
|
||||
const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field )
|
||||
{
|
||||
if( table != _tablename )
|
||||
{
|
||||
delete _table;
|
||||
_table = new TTable( table );
|
||||
_tablename = table;
|
||||
}
|
||||
if( codtab != _table->curr( ).get( "CODTAB" ) )
|
||||
{
|
||||
_table->zero( );
|
||||
_table->put( "CODTAB", codtab );
|
||||
_table->read( );
|
||||
}
|
||||
return _table->get( field );
|
||||
TTable tab(table);
|
||||
tab.zero();
|
||||
tab.put( "CODTAB", codtab);
|
||||
if (tab.read() != NOERR)
|
||||
tab.zero();
|
||||
return tab.get( field );
|
||||
};
|
||||
|
||||
const TString& TData_picker::get( const int file, const TString& fieldname )
|
||||
@ -52,39 +45,53 @@ bool TData_picker::get_bool( const int file, const TString& fieldname )
|
||||
}
|
||||
|
||||
int TCliFor::write_occas( )
|
||||
{
|
||||
if( !occasionale( ) )
|
||||
return NOERR;
|
||||
TRelation occas( LF_OCCAS );
|
||||
occas_mask( ).autosave( occas );
|
||||
return occas.write( );
|
||||
{
|
||||
int err = NOERR;
|
||||
if(occasionale())
|
||||
{
|
||||
TRelation occas( LF_OCCAS );
|
||||
occas_mask( ).autosave( occas );
|
||||
err = occas.write( );
|
||||
if (err == _isreinsert)
|
||||
err = occas.rewrite();
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" )
|
||||
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" ),
|
||||
_tipocf(' '), _codcf(0L)
|
||||
{
|
||||
_occas_mask.set_handler( O_CODICE, occas_code_handler );
|
||||
add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" );
|
||||
}
|
||||
|
||||
void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
|
||||
{
|
||||
bool TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
|
||||
{
|
||||
_valid = FALSE;
|
||||
|
||||
_tipocf = tipocf;
|
||||
_codcf = codcf;
|
||||
zero( );
|
||||
zero( );
|
||||
if (tipocf == ' ' || codcf == 0L)
|
||||
return TRUE;
|
||||
curr( ).put( "TIPOCF", tipocf );
|
||||
curr( ).put( "CODCF", codcf );
|
||||
lfile( ).setkey( 1 );
|
||||
if( read( ) != NOERR )
|
||||
yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf );
|
||||
_occas = curr().get_bool( "OCCAS" );
|
||||
if ( occasionale( ) )
|
||||
if( read( ) == NOERR )
|
||||
{
|
||||
TRelation occrel( LF_OCCAS );
|
||||
occrel.curr( ).zero( );
|
||||
occrel.curr( ).put( "CFPI", ocfpi );
|
||||
occrel.read( );
|
||||
occas_mask( ).autoload( occrel );
|
||||
}
|
||||
_occas = curr().get_bool( "OCCAS" );
|
||||
if ( occasionale( ) )
|
||||
{
|
||||
TRelation occrel( LF_OCCAS );
|
||||
occrel.curr().zero();
|
||||
occrel.curr().put( "CFPI", ocfpi );
|
||||
if (occrel.read() != NOERR)
|
||||
occrel.curr().zero();
|
||||
occas_mask().autoload( occrel );
|
||||
}
|
||||
_valid = TRUE;
|
||||
}
|
||||
return _valid;
|
||||
}
|
||||
|
||||
void TCliForVendite::update_mask( TMask& m, bool onload )
|
||||
@ -98,8 +105,9 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
|
||||
// In forse per l'Occasionale, sicuri per il Normale
|
||||
m.show( F_COFI, !occas );
|
||||
m.show( F_STATOPAIVA, !occas );
|
||||
m.show( F_PAIVA, !occas );
|
||||
m.show( F_PAIVA, !occas );
|
||||
set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" );
|
||||
m.enable(F_RAGSOC, !occas);
|
||||
if( !onload )
|
||||
{
|
||||
set( m, F_CODVAL, LF_CLIFO, "CODVAL" );
|
||||
@ -128,6 +136,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
|
||||
{
|
||||
m.set( F_COFI, "" );
|
||||
m.set( F_PAIVA, "" );
|
||||
m.set( F_LOCALITACF, "");
|
||||
m.set( F_OCFPI, occas_mask( ).get( O_CODICE ) );
|
||||
m.set( F_RAGSOC, occas_mask( ).get( O_RAGSOC ) );
|
||||
m.set( F_INDCF, occas_mask( ).get( O_INDIRIZZO ) );
|
||||
@ -149,8 +158,9 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
|
||||
stato = get( LF_CLIFO, "STATOCF" );
|
||||
m.set( F_STATOCF, stato );
|
||||
}
|
||||
if ( !stato.blank( ) )
|
||||
m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) );
|
||||
// m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) );
|
||||
m.check_field(F_COMCF);
|
||||
m.check_field(F_STATOCF);
|
||||
m.check_field( F_CODPAG );
|
||||
m.check_field( F_CODLIN );
|
||||
// m.check_field( F_CODABIA );
|
||||
@ -166,7 +176,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
|
||||
m.check_field( F_CODVETT1 );
|
||||
m.check_field( F_CODVETT2 );
|
||||
m.check_field( F_CODVETT3 );
|
||||
imposta_dati_comune( m );
|
||||
// imposta_dati_comune( m );
|
||||
imposta_indirizzo_spedizione( m );
|
||||
imposta_sconto_testa( m );
|
||||
imposta_valuta( m );
|
||||
@ -212,18 +222,21 @@ void TCliForVendite::imposta_dati_comune( TMask& m )
|
||||
comuni.put( "COM", get( LF_CLIFO, "COMCF" ));
|
||||
comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) );
|
||||
}
|
||||
comuni.read( );
|
||||
if (comuni.read() != NOERR)
|
||||
comuni.zero();
|
||||
m.set( F_DENCOM, comuni.get( "DENCOM" ) );
|
||||
m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_indirizzo_spedizione( TMask& m )
|
||||
{
|
||||
TString16 stato;
|
||||
if( occasionale( ) )
|
||||
TString16 stato;
|
||||
const bool occas = occasionale();
|
||||
|
||||
m.enable( F_CODINDSP , !occas);
|
||||
if( occas )
|
||||
{
|
||||
m.set( F_CODINDSP, "" );
|
||||
m.disable( F_CODINDSP );
|
||||
m.set( F_RAGSOCSP, occas_mask( ).get( O_RAGSOC ) );
|
||||
m.set( F_INDSP, occas_mask( ).get( O_INDIRIZZO ) );
|
||||
m.set( F_CIVSP, occas_mask( ).get( O_NUMERO ) );
|
||||
@ -231,11 +244,14 @@ void TCliForVendite::imposta_indirizzo_spedizione( TMask& m )
|
||||
m.set( F_LOCALITASP, "" );
|
||||
m.set( F_CAPSP, occas_mask( ).get( O_CAP ) );
|
||||
m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) );
|
||||
m.check_field(F_COMSP);
|
||||
m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) );
|
||||
m.check_field(F_STATOSP);
|
||||
}
|
||||
/*
|
||||
else
|
||||
{
|
||||
TString16 codindsp( m.get( F_CODINDSP ) );
|
||||
const TString codindsp( m.get( F_CODINDSP ) );
|
||||
if( codindsp.blank( ) )
|
||||
{
|
||||
m.set( F_RAGSOCSP, "" );
|
||||
@ -254,99 +270,91 @@ void TCliForVendite::imposta_indirizzo_spedizione( TMask& m )
|
||||
indsped.put( "TIPOCF", _tipocf );
|
||||
indsped.put( "CODCF", _codcf );
|
||||
indsped.put( "CODIND", atoi( codindsp ) );
|
||||
if( indsped.read( ) != NOERR )
|
||||
yesnofatal_box( "Indirizzo di spedizione non trovato!" );
|
||||
m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) );
|
||||
m.set( F_INDSP, indsped.get( "INDIR" ) );
|
||||
m.set( F_CIVSP, indsped.get( "CIV" ) );
|
||||
m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) );
|
||||
m.set( F_CAPSP, indsped.get( "CAP" ) );
|
||||
m.set( F_COMSP, indsped.get( "COM" ) );
|
||||
m.set( F_STATOSP, stato = indsped.get( "STATO" ) );
|
||||
if( indsped.read( ) == NOERR )
|
||||
{
|
||||
m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) );
|
||||
m.set( F_INDSP, indsped.get( "INDIR" ) );
|
||||
m.set( F_CIVSP, indsped.get( "CIV" ) );
|
||||
m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) );
|
||||
m.set( F_CAPSP, indsped.get( "CAP" ) );
|
||||
m.set( F_COMSP, indsped.get( "COM" ) );
|
||||
m.set( F_STATOSP, stato = indsped.get( "STATO" ) );
|
||||
}
|
||||
else
|
||||
error_box( "Indirizzo di spedizione non trovato!" );
|
||||
}
|
||||
}
|
||||
if ( !stato.blank( ) )
|
||||
m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) );
|
||||
m.check_field(F_COMSP);
|
||||
m.check_field(F_STATOSP);
|
||||
m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) );
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey( 1 );
|
||||
comuni.put( "COM", m.get( F_COMSP ) );
|
||||
comuni.put( "STATO", m.get( F_STATOSP ) );
|
||||
comuni.read( );
|
||||
if (comuni.read( ) != NOERR)
|
||||
comuni.zero();
|
||||
m.set( F_DENCOMSP, comuni.get( "DENCOM" ) );
|
||||
m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );
|
||||
*/
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_sconto_testa( TMask& m )
|
||||
{
|
||||
TConfig ditta( CONFIG_DITTA );
|
||||
TString16 codsconto;
|
||||
TString16 codart;
|
||||
TConfig ditta(CONFIG_DITTA);
|
||||
|
||||
char tipogestione = ditta.get( "GESSCO", "ve" )[ 0 ];
|
||||
const char tipogestione = ditta.get("GESSCO", "ve")[ 0 ];
|
||||
switch( tipogestione )
|
||||
{
|
||||
case 'N': // Sconti non gestiti: pussa via!
|
||||
return;
|
||||
break;
|
||||
case 'P': // Percentuale su anagrafica cliente
|
||||
m.set( F_SCONTOPERC, get( LF_CFVEN, "SCONTO" ) );
|
||||
return;
|
||||
break;
|
||||
case 'T': // Gestione tabella sconti
|
||||
codsconto = get( LF_CFVEN, "CODSCC" );
|
||||
if( !codsconto.blank( ) )
|
||||
{
|
||||
// ARCHIVIO SVCONTI PER SCONTO CLIENTE
|
||||
// TLocalisamfile sconti( LF_SCONTI );
|
||||
// sconti.setkey( 1 );
|
||||
// sconti.zero( );
|
||||
// sconti.put( "TIPO", "D" );
|
||||
// sconti.put( "CODCAT", codsconto );
|
||||
// if( sconti.read( ) == NOERR )
|
||||
// m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
|
||||
// else
|
||||
// message_box( "Sconto non trovato nella tabella sconti!" );
|
||||
TTable sconti( "%SCC" );
|
||||
sconti.setkey( 1 );
|
||||
sconti.zero( );
|
||||
// sconti.put( "TIPO", "D" );
|
||||
sconti.put( "CODTAB", codsconto );
|
||||
if( sconti.read( ) == NOERR )
|
||||
m.set( F_SCONTOPERC, sconti.get( "S1" ) );
|
||||
#ifdef DBG
|
||||
else
|
||||
message_box( "Sconto non trovato nella tabella sconti!" );
|
||||
#endif
|
||||
const TString16 codsconto(get(LF_CFVEN, "CODSCC"));
|
||||
|
||||
if (codsconto.not_empty())
|
||||
{
|
||||
TTable sconti("%SCC");
|
||||
sconti.setkey(1);
|
||||
sconti.zero();
|
||||
// sconti.put( "TIPO", "D" );
|
||||
sconti.put("CODTAB", codsconto);
|
||||
if (sconti.read( ) == NOERR)
|
||||
m.set(F_SCONTOPERC, sconti.get("S1"));
|
||||
}
|
||||
}
|
||||
return;
|
||||
break;
|
||||
case 'A': // Gestione archivio sconti
|
||||
TLocalisamfile sconti( LF_SCONTI );
|
||||
sconti.setkey( 1 );
|
||||
sconti.zero( );
|
||||
sconti.put( "TIPO", "I" );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 1 ) )
|
||||
sconti.put( "CODCAT", get( LF_CFVEN, "CATVEN" ) );
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 2 ) )
|
||||
codart << get( LF_CFVEN, "CODSCC" );
|
||||
else
|
||||
codart << " ";
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 3 ) )
|
||||
codart << get( LF_CFVEN, "CODZONA" );
|
||||
else
|
||||
codart << " ";
|
||||
if( ditta.get_bool( "SCOKEY", "ve", 4 ) )
|
||||
codart << get( LF_CLIFO, "CODPAG" );
|
||||
sconti.put( "CODART", codart );
|
||||
if( sconti.read( ) == NOERR )
|
||||
m.set( F_SCONTOPERC, sconti.get( "SCONTO" ) );
|
||||
#ifdef DBG
|
||||
else
|
||||
message_box( FALSE, "Sconto non trovato nell'archivio sconti!" );
|
||||
#endif
|
||||
return;
|
||||
break;
|
||||
{
|
||||
TString16 codart;
|
||||
TLocalisamfile sconti( LF_SCONTI );
|
||||
|
||||
sconti.setkey(1);
|
||||
sconti.zero();
|
||||
sconti.put("TIPO", "I");
|
||||
if(ditta.get_bool("SCOKEY", "ve", 1))
|
||||
sconti.put("CODCAT", get( LF_CFVEN, "CATVEN"));
|
||||
if(ditta.get_bool("SCOKEY", "ve", 2))
|
||||
codart = get( LF_CFVEN, "CODSCC" );
|
||||
else
|
||||
codart = " ";
|
||||
if( ditta.get_bool("SCOKEY", "ve", 3))
|
||||
codart << get(LF_CFVEN, "CODZONA");
|
||||
else
|
||||
codart << " ";
|
||||
if( ditta.get_bool("SCOKEY", "ve", 4))
|
||||
codart << get(LF_CLIFO, "CODPAG");
|
||||
sconti.put("CODART", codart);
|
||||
if(sconti.read() == NOERR)
|
||||
m.set(F_SCONTOPERC, sconti.get( "SCONTO"));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void TCliForVendite::imposta_valuta( TMask& m )
|
||||
|
10
ve/tclifor.h
10
ve/tclifor.h
@ -20,13 +20,9 @@
|
||||
|
||||
class TData_picker : public TRelation
|
||||
{
|
||||
private:
|
||||
|
||||
TTable* _table;
|
||||
TString16 _tablename;
|
||||
|
||||
public:
|
||||
TData_picker( const int mainfile ) : TRelation ( mainfile ) { }
|
||||
virtual ~TData_picker() {}
|
||||
const TString& get( const TString& table, const TString& codtab, const TString& field );
|
||||
const TString& get( const int file, const TString& fieldname );
|
||||
int get_int( const int file, const TString& fieldname );
|
||||
@ -41,6 +37,7 @@ private:
|
||||
|
||||
bool _occas;
|
||||
TMask _occas_mask;
|
||||
bool _valid;
|
||||
|
||||
protected:
|
||||
|
||||
@ -50,7 +47,7 @@ protected:
|
||||
public:
|
||||
|
||||
TCliFor( );
|
||||
void load( const char tipocf, const long codcf, const TString& ocfpi );
|
||||
bool load( const char tipocf, const long codcf, const TString& ocfpi );
|
||||
bool occasionale( ){ return get_bool( LF_CLIFO, "OCCAS" ); };
|
||||
TMask& occas_mask( ){ return _occas_mask; };
|
||||
static bool occas_code_handler(TMask_field& f, KEY key);
|
||||
@ -58,6 +55,7 @@ public:
|
||||
void edita_occasionale( );
|
||||
char tipocf( ){ return _tipocf; }
|
||||
long codcf( ){ return _codcf; }
|
||||
bool ok() { return _valid;}
|
||||
};
|
||||
|
||||
class TCliForVendite : public TCliFor
|
||||
|
115
ve/ve0100.cpp
115
ve/ve0100.cpp
@ -17,7 +17,8 @@ TTipo_documento::TTipo_documento(const char * tipodoc)
|
||||
|
||||
TConfig * p = create_profile();
|
||||
|
||||
_mask = new TVariable_mask( p->get( "MSKFILE", "MAIN" ) );
|
||||
_mask = new TVariable_mask( p->get( "MSKFILE", "MAIN" ) );
|
||||
|
||||
delete p;
|
||||
}
|
||||
|
||||
@ -47,16 +48,21 @@ void TMotore_application::init_insert_mode( TMask& m )
|
||||
m.reset();
|
||||
m.set(F_PROFILO, _profilo);
|
||||
m.set(F_CODNUM, _codnum);
|
||||
m.field(F_CODNUM).set_focusdirty(TRUE);
|
||||
m.field(F_CODNUM).on_key(K_TAB);
|
||||
m.set(F_TIPODOC, _tipodoc);
|
||||
m.field(F_TIPODOC).set_focusdirty(TRUE);
|
||||
m.field(F_TIPODOC).on_key(K_TAB);
|
||||
m.set(F_ANNO, _anno);
|
||||
m.set(F_PROVV, _tiponum);
|
||||
m.set(F_NDOC, _numdoc);
|
||||
|
||||
m.set( F_DATAINSC, m.get( F_DATADOC ) );
|
||||
m.set( F_TIPOCF, tipocf , TRUE);
|
||||
m.set(F_STATO, _statodoc);
|
||||
const TString16 data_doc(m.get( F_DATADOC));
|
||||
|
||||
m.set(F_DATAINSC,data_doc);
|
||||
m.set( F_DATACAMBIO, data_doc);
|
||||
clifo( ).occas_mask( ).reset( );
|
||||
// m.set( F_TIPOCF, tipocf , TRUE);
|
||||
int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof
|
||||
for( int i = 1; i <= ndefaults; i++ )
|
||||
{
|
||||
@ -304,10 +310,12 @@ bool TMotore_application::elabora_handler( TMask_field& f, KEY key )
|
||||
|
||||
bool TMotore_application::occas_handler( TMask_field& f, KEY key )
|
||||
{
|
||||
if ( key == K_SPACE && f.mask( ).is_running( ) )
|
||||
TMask & m = f.mask();
|
||||
if ( key == K_SPACE && m.is_running( ) )
|
||||
{
|
||||
TMask& om = app( ).clifo( ). occas_mask( );
|
||||
om.run( );
|
||||
if (om.run( ) != K_ESC)
|
||||
app().clifo().update_mask(m);
|
||||
f.set_focus( );
|
||||
}
|
||||
return TRUE;
|
||||
@ -376,43 +384,34 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key )
|
||||
*/
|
||||
|
||||
bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
|
||||
{
|
||||
if (f.to_check(key))
|
||||
{
|
||||
TMask& m = f.mask( );
|
||||
|
||||
const char cf = app( ).tipocf( );
|
||||
TLocalisamfile& clifo = ( ( TEdit_field& )f ).browse( )->cursor( )->file( );
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
return TRUE;
|
||||
if (f.to_check(key, TRUE))
|
||||
{
|
||||
const char cf = app().tipocf();
|
||||
TMask& m = f.mask();
|
||||
TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file();
|
||||
const long codcf = atol(f.get());
|
||||
|
||||
if ( clifo.get_char( "TIPOCF" ) != cf || clifo.get( "CODCF" ) != f.get( ) )
|
||||
{
|
||||
clifo.setkey( 1 );
|
||||
clifo.put( "TIPOCF", cf );
|
||||
clifo.put( "CODCF", f.get( ) );
|
||||
clifo.read( );
|
||||
}
|
||||
const TEdit_field& c = ( const TEdit_field& )f;
|
||||
const TBrowse* b = c.browse( );
|
||||
const TLocalisamfile& i = b->cursor( )->file( );
|
||||
// Tabella File
|
||||
const char* sf = i.tab( ) ? "B2" : "SOSPESO";
|
||||
const bool suspended = i.get_bool( sf );
|
||||
if ( suspended )
|
||||
{
|
||||
sf = f.get( );
|
||||
return f.error_box( "Il codice '%s' e' sospeso e non puo' essere utilizzato", sf );
|
||||
}
|
||||
// Disabilitazioni varie, ma le demando all'oggetto cliente
|
||||
if (key == K_TAB)
|
||||
/* clifo.setkey( 1 );
|
||||
clifo.put( "TIPOCF", cf );
|
||||
clifo.put( "CODCF", codcf );
|
||||
if (clifo.read( ) != NOERR)
|
||||
clifo.zero(); */
|
||||
if ( clifo.get_bool("SOSPESO") )
|
||||
return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", codcf );
|
||||
if (app().clifo().load( cf, codcf, ""))
|
||||
{
|
||||
app().clifo( ).load( cf, atol( f.get( ) ), "" );
|
||||
app().clifo( ).update_mask( m );
|
||||
if( f.mask( ).id2pos( F_OCCASEDIT ) > 0 )
|
||||
{
|
||||
if ( app( ).clifo( ).occasionale( ) && app( ).clifo( ).occas_mask( ).get( O_CODICE ).empty( ) )
|
||||
app().clifo().update_mask(m, !m.is_running());
|
||||
if( f.mask().id2pos(F_OCCASEDIT) > 0 && f.to_check(key))
|
||||
{
|
||||
if ( app().clifo().occasionale() && app().clifo().occas_mask().get(O_CODICE).empty() )
|
||||
m.send_key( K_SPACE, F_OCCASEDIT ); // Lancia maschera occasionali
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -516,6 +515,7 @@ void TMotore_application::get_edit_mask( const char * profilo )
|
||||
}
|
||||
_sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET );
|
||||
sheet( ).set_notify( ss_handler );
|
||||
sheet().set_append(FALSE);
|
||||
TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof
|
||||
app( ).tipocf( tipocf[ 0 ] );
|
||||
if (newmask)
|
||||
@ -538,7 +538,7 @@ void TMotore_application::get_edit_mask( const char * profilo )
|
||||
descrs.add( tabtr.get( "S0" ) );
|
||||
}
|
||||
else
|
||||
yesnofatal_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga );
|
||||
error_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga );
|
||||
}
|
||||
listbox.replace_items( keys, descrs );
|
||||
configura_sheet( *_sheet, *_pro );
|
||||
@ -576,6 +576,7 @@ TMask* TMotore_application::get_mask( int mode )
|
||||
_anno = _msk->get_int(F_ANNO);
|
||||
_tiponum = _msk->get(F_PROVV);
|
||||
_numdoc = _msk->get_long(F_NDOC);
|
||||
_statodoc = _msk->get_int(F_STATO);
|
||||
get_edit_mask( _profilo );
|
||||
TMask & emask = edit_mask();
|
||||
return( &emask );
|
||||
@ -655,6 +656,7 @@ int TMotore_application::read( TMask& m )
|
||||
clifo( ).load( tipocf, m.get_int( F_CODCF ), rel( ).curr( ).get( "OCFPI" ) );
|
||||
clifo( ).update_mask( ( TVariable_mask& ) m, TRUE );
|
||||
// TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC );
|
||||
_statodoc = m.get_int(F_STATO);
|
||||
TRectype r(_rdoc->curr( ));
|
||||
r.zero( );
|
||||
/*
|
||||
@ -666,7 +668,7 @@ int TMotore_application::read( TMask& m )
|
||||
r.put( "CODNUM", m.get(F_CODNUM));
|
||||
r.put( "PROVV", m.get(F_PROVV));
|
||||
r.put( "ANNO", m.get(F_ANNO));
|
||||
r.put( "NDOC", m.get(F_NDOC));
|
||||
r.put( "NDOC", m.get(F_NDOC));
|
||||
_righe_rec->read( r );
|
||||
TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET );
|
||||
f.destroy( );
|
||||
@ -859,6 +861,21 @@ void TMotore_application::store_riga( TSheet_field& f, int numrig, TRectype& r )
|
||||
|
||||
bool TMotore_application::user_create( )
|
||||
{
|
||||
TConfig ditta( CONFIG_DITTA );
|
||||
|
||||
// Controllo se sono cambiate le impostazioni delle vendite.
|
||||
if (ditta.get_bool( "CHANGED", "ve" ))
|
||||
{ // Se sono cambiate, rigenero tutte le maschere
|
||||
if (yesno_box( CHANGE_MESSAGE ) )
|
||||
{
|
||||
TExternal_app generazione( "ve0 -3 -all" );
|
||||
|
||||
generazione.run();
|
||||
}
|
||||
else
|
||||
message_box("Attenzione i profili dei documenti potrebbero\n non essere aggiornati");
|
||||
}
|
||||
|
||||
// Metto in relazione testata e righe
|
||||
_rel = new TRelation( LF_DOC );
|
||||
_rdoc = new TLocalisamfile(LF_RIGHEDOC);
|
||||
@ -867,17 +884,6 @@ bool TMotore_application::user_create( )
|
||||
// Inizializzo il Record_array
|
||||
_righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 );
|
||||
|
||||
TConfig ditta( CONFIG_DITTA );
|
||||
|
||||
// Controllo se sono cambiate le impostazioni delle vendite.
|
||||
if ( ditta.get_bool( "CHANGED", "ve" ) )
|
||||
{ // Se sono cambiate, rigenero tutte le maschere
|
||||
if ( !yesno_box( CHANGE_MESSAGE ) )
|
||||
return FALSE;
|
||||
TExternal_app motore2( "VE0 -3 -all" );
|
||||
motore2.run( );
|
||||
ditta.set( "CHANGED", "", "ve" );
|
||||
}
|
||||
_clifor = new TCliForVendite( );
|
||||
azzera_piedi( );
|
||||
_msk = new TMask( "ve1000a" );
|
||||
@ -999,8 +1005,9 @@ bool TMotore_application::stato_valido( int stato, int operazione )
|
||||
|
||||
int TMotore_application::stato_corrente( )
|
||||
{
|
||||
int i = query_mask( ).get_int( F_STATO );
|
||||
return ( i == 0 ? NO_DOC_STATUS : i );
|
||||
// int i = query_mask( ).get_int( F_STATO );
|
||||
// return ( i == 0 ? NO_DOC_STATUS : i );
|
||||
return _statodoc;
|
||||
}
|
||||
|
||||
void TMotore_application::segnala_stato_non_valido( int operazione )
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
400
ve/ve0300.cpp
400
ve/ve0300.cpp
@ -228,7 +228,7 @@ private:
|
||||
TMaschera *_m;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
// Carica un file di tabella in un TString array
|
||||
void carica_tabella( const TFilename& fn, TString_array& tabella );
|
||||
|
||||
@ -395,15 +395,16 @@ protected:
|
||||
public:
|
||||
|
||||
TMaschera& maschera( ){ return generatore( ).maschera( ); }
|
||||
TMask_generator& generatore( ){ CHECK( _mg, "Generatore nullo!" ); return *_mg; }
|
||||
void generatore( TMask_generator& mg ){ _mg = &mg; }
|
||||
void id( int id ){ _id = id; }
|
||||
int id( ){ return _id; }
|
||||
void height( int h ){ _height = h; }
|
||||
int height( ){ return _height; }
|
||||
void present( bool p ){ _present = p; }
|
||||
bool present( ){ return _present; }
|
||||
TArray& campi( ){ return _fields; }
|
||||
TMask_generator& generatore( ) const { CHECK( _mg, "Generatore nullo!" ); return *_mg; }
|
||||
void generatore( TMask_generator& mg ) { _mg = &mg; }
|
||||
void id( int id ) { _id = id; }
|
||||
int id( ) const { return _id; }
|
||||
void height( int h ) { _height = h; }
|
||||
int height( ) const { return _height; }
|
||||
void present( bool p ) { _present = p; }
|
||||
bool present( ) const { return _present; }
|
||||
TArray& campi( ) { return _fields; }
|
||||
virtual TObject* dup() const;
|
||||
|
||||
TGruppo ( int i );
|
||||
TGruppo ( int i, int height );
|
||||
@ -414,11 +415,9 @@ public:
|
||||
|
||||
class TField : public TObject
|
||||
{
|
||||
protected:
|
||||
|
||||
TString _nome;
|
||||
// Gruppo di appartenenza
|
||||
TGruppo *_grp;
|
||||
TGruppo * _grp;
|
||||
|
||||
int _gruppo;
|
||||
int _id;
|
||||
@ -433,23 +432,24 @@ public:
|
||||
|
||||
TField( TString& campo, TConfig& pro );
|
||||
TField( );
|
||||
virtual TObject* dup() const;
|
||||
|
||||
void genera( );
|
||||
void configura( TConfig& pro );
|
||||
|
||||
void x( int x ){ _x = x; }
|
||||
void y( int y ){ _y = y; }
|
||||
void gruppo( int gruppo ){ _gruppo = gruppo; }
|
||||
void grp( TGruppo& grp ){ _grp = &grp; }
|
||||
void gruppo(int gruppo) { _gruppo = gruppo; }
|
||||
void grp(TGruppo * grp) { _grp = grp; }
|
||||
void id( int id ){ _id = id; }
|
||||
void type( int type ){ _type = type; }
|
||||
void size( int size ){ _size = size; }
|
||||
void stato( int stato ){ _stato = stato; }
|
||||
int x( ){ return _x; }
|
||||
int y( ){ return _y; }
|
||||
int gruppo( ){ return _gruppo; }
|
||||
TGruppo& grp( ) const { return *_grp; }
|
||||
int id( ){ return _id; }
|
||||
void type( int type ) { _type = type; }
|
||||
void size( int size ) { _size = size; }
|
||||
void stato( int stato ) { _stato = stato; }
|
||||
int x( ) const { return _x; }
|
||||
int y( ) const { return _y; }
|
||||
int gruppo( ) const{ return _gruppo; }
|
||||
TGruppo& grp( ) const { CHECK(_grp, "NULL group in field"); return *_grp; }
|
||||
int id( ) const { return _id; }
|
||||
int type( ){ return _type; }
|
||||
int size( ){ return _size; }
|
||||
int stato( ){ return _stato; }
|
||||
@ -484,17 +484,17 @@ public:
|
||||
TToken_string& items( ){ return _items; }
|
||||
TToken_string& configs( ){ return _configs; }
|
||||
|
||||
TConfig& profilo( ) { return grp( ).generatore( ).profilo( ); }
|
||||
TConfig& ditta( ) { return grp( ).generatore( ).ditta( ); }
|
||||
TConfig& groupsini( ) { return grp( ).generatore( ).groupsini( ); }
|
||||
TConfig& fieldsini( ) { return grp( ).generatore( ).fieldsini( ); }
|
||||
TConfig& profilo( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().profilo(); }
|
||||
TConfig& ditta( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().ditta(); }
|
||||
TConfig& groupsini( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().groupsini(); }
|
||||
TConfig& fieldsini( ) { CHECK(_grp, "NULL group in field"); return grp().generatore().fieldsini(); }
|
||||
|
||||
};
|
||||
|
||||
void TGruppo::add( TField * field )
|
||||
{
|
||||
_fields.add( field );
|
||||
field->grp( *this );
|
||||
_fields.add(field);
|
||||
field->grp(this);
|
||||
}
|
||||
|
||||
TGruppo::TGruppo( int i )
|
||||
@ -513,32 +513,54 @@ TGruppo::TGruppo( int i, int height )
|
||||
static void genera_campo( const TObject& campo )
|
||||
{
|
||||
// Per evitare 3000 casts ...
|
||||
TField& cmp = ( TField& )campo;
|
||||
TField& cmp = (TField&) campo;
|
||||
|
||||
cmp.configura( cmp.grp( ).generatore( ).profilo( ) );
|
||||
cmp.genera( );
|
||||
cmp.configura(cmp.grp().generatore().profilo());
|
||||
cmp.genera();
|
||||
}
|
||||
|
||||
static void verifica_campo( const TObject& campo )
|
||||
{
|
||||
// Per evitare 3000 casts ...
|
||||
TField& cmp = ( TField& )campo;
|
||||
|
||||
int stato = cmp.stato_reale( );
|
||||
cmp.stato( stato );
|
||||
if( cmp.stato( ) != S_NASCOSTO )
|
||||
cmp.grp( ).present( TRUE );
|
||||
TField & cmp = (TField&) campo;
|
||||
TGruppo & gruppo = cmp.grp();
|
||||
|
||||
cmp.stato(cmp.stato_reale());
|
||||
if (!gruppo.present() && cmp.stato() != S_NASCOSTO)
|
||||
gruppo.present(TRUE);
|
||||
}
|
||||
|
||||
HIDDEN TProgind * _bar;
|
||||
|
||||
static void genera_gruppo( const TObject& gruppo )
|
||||
{
|
||||
// Per evitare 3000 casts ...
|
||||
TGruppo& grp = ( TGruppo& )gruppo;
|
||||
TGruppo & grp = (TGruppo &) gruppo;
|
||||
|
||||
grp.present( FALSE );
|
||||
grp.campi( ).for_each( verifica_campo );
|
||||
if( grp.present( ) )
|
||||
grp.genera( );
|
||||
grp.present(FALSE);
|
||||
grp.campi().for_each(verifica_campo);
|
||||
do_events();
|
||||
if(grp.present())
|
||||
grp.genera();
|
||||
if (_bar)
|
||||
_bar->addstatus(1);
|
||||
|
||||
}
|
||||
|
||||
TObject* TGruppo::dup() const
|
||||
|
||||
{
|
||||
TGruppo* g = new TGruppo(id(), height());
|
||||
|
||||
g->generatore(generatore());
|
||||
g->present(present());
|
||||
g->_fields = _fields;
|
||||
TArray & fields = g->campi();
|
||||
const int items = fields.items();
|
||||
|
||||
for (int i = 0; i < items; i++)
|
||||
((TField &)fields[i]).grp(g);
|
||||
return g;
|
||||
}
|
||||
|
||||
void TGruppo::genera( )
|
||||
@ -603,6 +625,8 @@ TField::TField( )
|
||||
_x = 0;
|
||||
_y = 0;
|
||||
_gruppo = 0;
|
||||
_stato = 0;
|
||||
_grp = NULL;
|
||||
_id = 0;
|
||||
_type = 0;
|
||||
_size = 0;
|
||||
@ -626,7 +650,34 @@ TField::TField( )
|
||||
_items.separator( '@' );
|
||||
}
|
||||
|
||||
int TField::stato_reale( )
|
||||
TObject* TField::dup() const
|
||||
{
|
||||
TField * f = new TField;
|
||||
|
||||
f->_nome = _nome;
|
||||
f->_fieldname = _fieldname;
|
||||
f->_x = _x;
|
||||
f->_y = _y;
|
||||
f->_gruppo = _gruppo;
|
||||
f->_stato = _stato;
|
||||
f->_type = _type;
|
||||
f->_size = _size;
|
||||
f->_prompt = _prompt;
|
||||
f->_flag = _flag;
|
||||
f->_help = _help;
|
||||
f->_warning = _warning;
|
||||
f->_use = _use;
|
||||
f->_id = _id;
|
||||
f->_input = _input;
|
||||
f->_display = _display;
|
||||
f->_output = _output;
|
||||
f->_special = _special;
|
||||
f->_items = _items;
|
||||
f->_configs = _configs;
|
||||
return f;
|
||||
}
|
||||
|
||||
int TField::stato_reale()
|
||||
{
|
||||
// Strategia al 28/08/95
|
||||
// Se il campo, nel file .INI di definizione dei campi, h legato a qualche voce in
|
||||
@ -635,44 +686,58 @@ int TField::stato_reale( )
|
||||
// Controlla poi la impostazione per il gruppo, come impostato nel file .INI
|
||||
// e nella sezione CONFIGS nel .INI di definizione dei gruppi.
|
||||
// Utilizza poi la minore delle due.
|
||||
TToken_string config( fieldsini( ).get( "CONFIGS", _nome ) );
|
||||
TString reale;
|
||||
int items = config.items( );
|
||||
int stato = S_OBBLIGATORIO;
|
||||
for ( int i = 0; i < items; i += 3 )
|
||||
{ TString chiave = config.get( i );
|
||||
TString valore = config.get( i + 1 );
|
||||
TString reale = ditta( ).get( chiave, "ve" );
|
||||
int pos = chiave.find( '[' );
|
||||
if ( pos >= 0 )
|
||||
|
||||
{
|
||||
TToken_string config(fieldsini().get( "CONFIGS", _nome ));
|
||||
const int items = config.items();
|
||||
|
||||
for ( int i = 0; i < items; i += 3 )
|
||||
{
|
||||
TString index = chiave.sub( pos + 1, chiave.find( ']' ) );
|
||||
chiave = chiave.sub( 0, pos );
|
||||
reale = ditta( ).get( chiave, "ve", atoi( index ) );
|
||||
TString80 chiave(config.get(i));
|
||||
const TString80 valore(config.get(i + 1));
|
||||
const int pos = chiave.find( '[' );
|
||||
int index = -1;
|
||||
|
||||
if ( pos >= 0 )
|
||||
{
|
||||
index = atoi(chiave.sub(pos + 1, chiave.find( ']')));
|
||||
chiave.cut(pos);
|
||||
}
|
||||
if ( valore == ditta( ).get( chiave, "ve", index))
|
||||
stato = config.get_int(i + 2);
|
||||
}
|
||||
else
|
||||
reale = ditta( ).get( chiave, "ve" );
|
||||
if ( reale == valore )
|
||||
stato = atoi( ( char * ) config.get( i + 2 ) );
|
||||
};
|
||||
TToken_string riga_profilo( grp( ).generatore( ).profilo( ).get( _nome, "PROFILO" ) );
|
||||
int stato_profilo = riga_profilo.get_int( P_STATO );
|
||||
stato = ( stato < stato_profilo )? stato : stato_profilo;
|
||||
TString gruppo ( fieldsini( ).get( "GROUP", _nome ) );
|
||||
gruppo.trim( );
|
||||
config = ( groupsini( ).get( "CONFIGS", gruppo ) );
|
||||
items = config.items( );
|
||||
int stato_gruppo = S_OBBLIGATORIO;
|
||||
for ( i = 0; i < items; i += 3 )
|
||||
{ TString chiave = config.get( i );
|
||||
TString valore = config.get( i + 1 );
|
||||
reale = ditta( ).get( chiave, "ve" );
|
||||
if ( reale == valore )
|
||||
stato_gruppo = atoi( ( char * ) config.get( i + 2 ) );
|
||||
};
|
||||
stato = ( stato < stato_gruppo )? stato : stato_gruppo;
|
||||
int stato_gruppo_profilo = grp( ).generatore( ).profilo( ).get_int( gruppo, "PROFILOGRUPPO" );
|
||||
stato = ( stato < stato_gruppo_profilo )? stato : stato_gruppo_profilo;
|
||||
}
|
||||
|
||||
TToken_string riga_profilo(grp().generatore().profilo().get(_nome, "PROFILO"));
|
||||
const int stato_profilo = riga_profilo.get_int(P_STATO);
|
||||
|
||||
if (stato > stato_profilo )
|
||||
stato = stato_profilo;
|
||||
|
||||
if (stato > S_NASCOSTO)
|
||||
{
|
||||
const TString80 gruppo(fieldsini().get("GROUP", _nome));
|
||||
TToken_string config(groupsini().get("CONFIGS", gruppo));
|
||||
const int items = config.items( );
|
||||
int stato_gruppo = S_OBBLIGATORIO;
|
||||
|
||||
for ( int i = 0; i < items; i += 3 )
|
||||
{
|
||||
const TString80 chiave = config.get( i );
|
||||
const TString80 valore = config.get( i + 1 );
|
||||
|
||||
if (valore == ditta( ).get( chiave, "ve"))
|
||||
stato_gruppo = config.get_int(i + 2);
|
||||
};
|
||||
if (stato > stato_gruppo)
|
||||
stato = stato_gruppo;
|
||||
|
||||
const int stato_gruppo_profilo = grp().generatore().profilo().get_int(gruppo, "PROFILOGRUPPO");
|
||||
|
||||
if (stato > stato_gruppo_profilo)
|
||||
stato = stato_gruppo_profilo;
|
||||
}
|
||||
return stato;
|
||||
}
|
||||
|
||||
@ -692,7 +757,7 @@ void TField::configura( TConfig& pro )
|
||||
|
||||
void TField::genera( )
|
||||
{
|
||||
TMaschera& m = grp( ).maschera( );
|
||||
TMaschera& m = grp().maschera();
|
||||
TString s;
|
||||
|
||||
if ( _stato == S_NASCOSTO )
|
||||
@ -754,15 +819,37 @@ TMask_generator::TMask_generator( const TString& profilo ) : _fieldsini( "ve0300
|
||||
param.lower( );
|
||||
if( param == "-all" )
|
||||
{
|
||||
TRelation rel("%TIP");
|
||||
TCursor t( &rel );
|
||||
long count = t.items( );
|
||||
TProgind bar( count, "Generazione delle maschere", FALSE, TRUE);
|
||||
for( t = 0; t.pos( ) < count; ++t )
|
||||
TString_array profiles;
|
||||
|
||||
{
|
||||
genera( t.curr( ).get( "S4" ) );
|
||||
bar.addstatus(1);
|
||||
TAssoc_array profiles_array;
|
||||
TRelation rel("%TIP");
|
||||
TCursor t( &rel );
|
||||
long count = t.items();
|
||||
|
||||
for( t = 0; t.pos( ) < count; ++t )
|
||||
{
|
||||
const TString profile_name(t.curr().get("S4"));
|
||||
TFilename profile(profile_name);
|
||||
|
||||
profile.ext("ini");
|
||||
if (fexist(profile) && !profiles_array.is_key(profile_name))
|
||||
profiles_array.add(profile_name);
|
||||
}
|
||||
profiles_array.get_keys(profiles);
|
||||
}
|
||||
|
||||
TProgind bar( profiles.items(), "Generazione automatica profili", FALSE, TRUE);
|
||||
const int items = profiles.items();
|
||||
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
const TString &profile = profiles.row(i);
|
||||
|
||||
genera(profile);
|
||||
bar.addstatus(1);
|
||||
}
|
||||
_ditta.set( "CHANGED", "", "ve" );
|
||||
}
|
||||
else genera( profilo );
|
||||
}
|
||||
@ -1014,7 +1101,8 @@ void TMask_generator::genera( const TString& profilo )
|
||||
{
|
||||
int i, last;
|
||||
TString temp_s;
|
||||
TFilename proname( profilo ),
|
||||
TFilename proname( profilo );
|
||||
|
||||
// All'inizio il gruppo h 'chiuso'
|
||||
_groupopen = FALSE;
|
||||
|
||||
@ -1022,14 +1110,18 @@ void TMask_generator::genera( const TString& profilo )
|
||||
proname.ext( "ini" );
|
||||
|
||||
// Se il file di profilo non esiste, esci con un errore fatale
|
||||
if ( !fexist( proname ) )
|
||||
fatal_box( "Il file %s non esiste!", ( const char * )proname );
|
||||
if (!fexist( proname))
|
||||
{
|
||||
error_box( "Il profilo %s non esiste!", ( const char * )profilo);
|
||||
return;
|
||||
}
|
||||
|
||||
_pro = new TConfig( proname );
|
||||
|
||||
TFilename _mskname( _pro->get( "MSKFILE", "MAIN") );
|
||||
_mskname.ext( "msk" );
|
||||
|
||||
|
||||
do_events();
|
||||
// Mi serve per ordinare i gruppi a seconda del documento
|
||||
TAssoc_array grouporder;
|
||||
|
||||
@ -1038,31 +1130,31 @@ void TMask_generator::genera( const TString& profilo )
|
||||
// Definizione della toolbar
|
||||
_m->outline( "TOOLBAR \"\" 0 20 0 2" );
|
||||
|
||||
_m->control( T_BOTTONE, 18, 802 );
|
||||
_m->control( T_BOTTONE, DLG_SAVEREC, 1002 );
|
||||
_m->begin( );
|
||||
_m->prompt( -15, -1, "~Registra" );
|
||||
_m->message( "EXIT,20082" );
|
||||
_m->end( );
|
||||
|
||||
_m->control( T_BOTTONE, 17, 802 );
|
||||
_m->control( T_BOTTONE, DLG_DELREC, 1002 );
|
||||
_m->begin( );
|
||||
_m->prompt( -25, -1, "~Elimina" );
|
||||
_m->message( "EXIT,127" );
|
||||
_m->end( );
|
||||
|
||||
_m->control( T_BOTTONE, 99, 802 );
|
||||
_m->control( T_BOTTONE, 99, 1002 );
|
||||
_m->begin( );
|
||||
_m->prompt( -35, -1, "E~labora" );
|
||||
_m->message( "EXIT,345" );
|
||||
_m->end( );
|
||||
|
||||
_m->control( T_BOTTONE, 24, 802 );
|
||||
_m->control( T_BOTTONE, DLG_PRINT, 1002 );
|
||||
_m->begin( );
|
||||
_m->prompt( -45, -1 );
|
||||
_m->message( "EXIT,346" );
|
||||
_m->end( );
|
||||
|
||||
_m->control( T_BOTTONE, 2, 802 );
|
||||
_m->control( T_BOTTONE, DLG_CANCEL, 1002 );
|
||||
_m->begin( );
|
||||
_m->prompt( -55, -1 );
|
||||
_m->message( "EXIT,27" );
|
||||
@ -1072,6 +1164,7 @@ void TMask_generator::genera( const TString& profilo )
|
||||
_m->end( );
|
||||
|
||||
|
||||
do_events();
|
||||
// Header della prima pagina
|
||||
|
||||
_m->pagina( _m->page( ));
|
||||
@ -1089,8 +1182,9 @@ void TMask_generator::genera( const TString& profilo )
|
||||
temp_s.format("CODTAB %d", F_CODNUM);
|
||||
_m->input(temp_s);
|
||||
_m->display("\"Codice\" CODTAB~\"Descrizione@50\" S0");
|
||||
temp_s.format("%d CODTAB~%d S0~%d S2", F_CODNUM, F_DESNUM, F_TIPIDOCS);
|
||||
_m->output(temp_s);
|
||||
temp_s.format("%d S0", F_DESNUM);
|
||||
_m->output(temp_s);
|
||||
_m->check(S_NORMALE);
|
||||
_m->flag( "GDU" );
|
||||
_m->message( "CO,2@" );
|
||||
_m->end( );
|
||||
@ -1098,7 +1192,7 @@ void TMask_generator::genera( const TString& profilo )
|
||||
_m->control( T_STRINGA, F_DESNUM, 50 );
|
||||
_m->begin( );
|
||||
_m->prompt( 24, 1 );
|
||||
_m->flag( "GDU" );
|
||||
_m->flag( "GD" );
|
||||
_m->message( "CO,3@" );
|
||||
_m->end( );
|
||||
|
||||
@ -1110,30 +1204,35 @@ void TMask_generator::genera( const TString& profilo )
|
||||
temp_s.format("CODTAB %d", F_TIPODOC);
|
||||
_m->input(temp_s);
|
||||
_m->display("\"Codice\" CODTAB~\"Descrizione@50\" S0");
|
||||
temp_s.format("%d CODTAB~%d S0~%d S4", F_TIPODOC, F_DESTIPODOC, F_PROFILO);
|
||||
temp_s.format("%d S0", F_DESTIPODOC);
|
||||
_m->output(temp_s);
|
||||
_m->check(S_NORMALE);
|
||||
_m->flag( "GDU" );
|
||||
_m->message( "CO,4@" );
|
||||
_m->end( );
|
||||
|
||||
_m->control( T_STRINGA, F_TIPOCF, 1 );
|
||||
_m->control( T_LISTA, F_TIPOCF, 9 );
|
||||
_m->begin( );
|
||||
_m->prompt( 2, 2, "Tipo CF " );
|
||||
_m->prompt( 100, 100, "" );
|
||||
_m->field( "TIPOCF" );
|
||||
_m->flag( "H" );
|
||||
if ( _pro->get( "TIPOCF", "MAIN" ) == "C" )
|
||||
_m->item("C|Cliente");
|
||||
else
|
||||
_m->item("F|Fornitore");
|
||||
_m->flag( "D" );
|
||||
_m->end( );
|
||||
|
||||
_m->control( T_STRINGA, F_PROVV, 1 );
|
||||
_m->begin( );
|
||||
_m->prompt( 2, 2, "<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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -118,4 +118,4 @@ HEIGHT=4
|
||||
|
||||
[0]
|
||||
HEIGHT =
|
||||
|
||||
|
||||
|
12
ve/verig.uml
12
ve/verig.uml
@ -73,10 +73,11 @@ ENDIF
|
||||
OUTPUT FR_CODMAG CODTAB[1,3]
|
||||
OUTPUT FR_DESMAG S0
|
||||
IFDEF(CH_CODMAG)
|
||||
CHECKTYPE CH_CODMAG
|
||||
ELSEIF
|
||||
CHECKTYPE CH_CODMAG
|
||||
ELSE
|
||||
CHECKTYPE NORMAL
|
||||
ENDIF
|
||||
ENDIF
|
||||
WARNING "Magazzino assente"
|
||||
FLAGS "U"
|
||||
IFDEF(FL_CODMAG)
|
||||
FLAGS FL_CODMAG
|
||||
@ -123,6 +124,7 @@ IFDEF(CH_CODDEP)
|
||||
ELSEIF
|
||||
CHECKTYPE NORMAL
|
||||
ENDIF
|
||||
WARNING "Deposito assente"
|
||||
IFDEF(FL_CODDEP)
|
||||
FLAGS FL_CODDEP
|
||||
ENDIF
|
||||
@ -156,12 +158,9 @@ ENDIF
|
||||
DISPLAY "Codice@20" CODART
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FR_CODART CODART
|
||||
OUTPUT FR_DESCR DESCR
|
||||
WARNING "Articolo assente"
|
||||
IFDEF(CH_CODART)
|
||||
CHECKTYPE CH_CODART
|
||||
ELSEIF
|
||||
CHECKTYPE REQUIRED
|
||||
ENDIF
|
||||
IFDEF(FL_CODART)
|
||||
FLAGS FL_CODART
|
||||
@ -256,7 +255,6 @@ ENDIF
|
||||
INPUT DESCR FR_DESCR
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Codice@20" CODART
|
||||
OUTPUT FR_CODART CODART
|
||||
OUTPUT FR_DESCR DESCR
|
||||
END
|
||||
ENDIF
|
||||
|
Loading…
x
Reference in New Issue
Block a user