454 lines
12 KiB
C++
Executable File
454 lines
12 KiB
C++
Executable File
#ifndef __RIGHEDOC_H
|
|
#include "righedoc.h"
|
|
#endif
|
|
|
|
#ifndef __VE0100_H
|
|
#include "ve0100.h"
|
|
#endif
|
|
|
|
#ifndef __VERIG_H
|
|
#include "verig.h"
|
|
#endif
|
|
|
|
#ifndef __VE0100C_H
|
|
#include "ve0100c.h"
|
|
#endif
|
|
|
|
#ifndef __SCONTI_H
|
|
#include "sconti.h"
|
|
#endif
|
|
|
|
static void row_set_handler( TMask& m, const int field, const int index )
|
|
{
|
|
switch ( index )
|
|
{
|
|
case 1:
|
|
m.set_handler( field, dummy_hndl );
|
|
break;
|
|
default:
|
|
yesnofatal_box( FALSE, "Funzione di handler sulla riga non definita( %d ).", index );
|
|
}
|
|
}
|
|
|
|
HIDDEN TString16 curr_um;
|
|
HIDDEN real curr_fc(1.0);
|
|
|
|
HIDDEN bool codart_handler( TMask_field& f, KEY key )
|
|
{
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask();
|
|
TMask & mask = app().edit_mask();
|
|
TCond_vendita & condv = app().condv();
|
|
|
|
condv.set_testa(&mask);
|
|
condv.set_riga(&row_mask);
|
|
|
|
TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file();
|
|
TLocalisamfile & umart = ((TEdit_field &) row_mask.field(FR_UMQTA)).browse()->cursor()->file();
|
|
|
|
condv.set_anamag(anamag);
|
|
condv.set_umart(umart);
|
|
TString80 codart(f.get());
|
|
anamag.setkey(1);
|
|
anamag.put("CODART", codart);
|
|
if (anamag.read() != NOERR)
|
|
{
|
|
TLocalisamfile codalt(LF_CODCORR);
|
|
|
|
codalt.setkey(2);
|
|
codalt.put("CODARTALT", codart);
|
|
if (codalt.read() == NOERR)
|
|
{
|
|
codart = codalt.get("CODART");
|
|
anamag.zero();
|
|
anamag.put("CODART", codart);
|
|
if (anamag.read() == NOERR)
|
|
f.set(codart);
|
|
}
|
|
}
|
|
|
|
if (anamag.good())
|
|
{
|
|
const TString16 lingua = mask.get(F_CODLIN);
|
|
const TString codart(row_mask.get(FR_CODART));
|
|
TString desc(anamag.get("DESCR"));
|
|
|
|
if (lingua.not_empty())
|
|
{
|
|
TLocalisamfile deslin(LF_DESLIN);
|
|
|
|
deslin.setkey(2);
|
|
deslin.put("CODART", codart);
|
|
deslin.put("CODLIN", lingua);
|
|
if (deslin.read() == NOERR)
|
|
desc = deslin.get("DESCR");
|
|
}
|
|
row_mask.set(FR_DESCR, desc);
|
|
|
|
umart.setkey(1);
|
|
umart.zero();
|
|
umart.put("CODART", codart);
|
|
if (umart.read(_isgteq) == NOERR && codart == umart.get("CODART"))
|
|
{
|
|
curr_um = umart.get("UM");
|
|
curr_fc = umart.get_real("FC");
|
|
}
|
|
else
|
|
{
|
|
curr_um.cut(0);
|
|
curr_fc = 1.0;
|
|
}
|
|
row_mask.set(FR_UMQTA, curr_um);
|
|
}
|
|
|
|
condv.ricerca();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
HIDDEN bool umart_handler( TMask_field& f, KEY key )
|
|
{
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
TMask & mask = app().edit_mask();
|
|
TLocalisamfile & anamag = ((TEdit_field &) row_mask.field(FR_CODART)).browse()->cursor()->file();
|
|
TLocalisamfile & umart = ((TEdit_field &) f).browse()->cursor()->file();
|
|
TCond_vendita & condv = app().condv();
|
|
|
|
condv.set_testa(&mask);
|
|
condv.set_riga(&row_mask);
|
|
condv.set_anamag(anamag);
|
|
condv.set_umart(umart);
|
|
condv.ricerca(FALSE);
|
|
|
|
const TString16 um(f.get());
|
|
real fc(1.0);
|
|
|
|
if (um.not_empty() && curr_um.not_empty() && um != curr_um)
|
|
{
|
|
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;
|
|
}
|
|
|
|
HIDDEN bool qta_handler( TMask_field& f, KEY key )
|
|
{
|
|
// Se qualcuno cerca di modificare la maschera
|
|
if ( key == K_TAB && f.focusdirty())
|
|
{
|
|
TMask& row_mask = f.mask( );
|
|
TMask & mask = app().edit_mask();
|
|
TLocalisamfile & anamag = ((TEdit_field &) row_mask.field(FR_CODART)).browse()->cursor()->file();
|
|
TLocalisamfile & umart = ((TEdit_field &) row_mask.field(FR_UMQTA)).browse()->cursor()->file();
|
|
TCond_vendita & condv = app().condv();
|
|
|
|
condv.set_testa(&mask);
|
|
condv.set_riga(&row_mask);
|
|
condv.set_anamag(anamag);
|
|
condv.set_umart(umart);
|
|
condv.ricerca(FALSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r)
|
|
{
|
|
if (r)
|
|
_data = *r;
|
|
_data.put( "STATORIGA", row.get( f.cid2index(FR_STATORIGA) ) );
|
|
_data.put( "TIPORIGA", row.get( f.cid2index(FR_TIPORIGA )) );
|
|
TString16 codmag(row.get(f.cid2index(FR_CODMAG)));
|
|
|
|
codmag.left_just(3);
|
|
codmag << row.get( f.cid2index(FR_CODDEP ));
|
|
_data.put( "CODMAG", codmag);
|
|
_data.put( "CODART", row.get( f.cid2index(FR_CODART )) );
|
|
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 )) );
|
|
_data.put( "QTAEVASA", row.get( f.cid2index(FR_QTAEVASA )) );
|
|
_data.put( "RIGAEVASA", row.get( f.cid2index(FR_RIGAEVASA )) );
|
|
_data.put( "TARA", row.get( f.cid2index(FR_TARA )) );
|
|
_data.put( "PNETTO", row.get( f.cid2index(FR_PNETTO )) );
|
|
_data.put( "NCOLLI", row.get( f.cid2index(FR_NCOLLI )) );
|
|
_data.put( "DAEVADERE", row.get( f.cid2index(FR_DAEVADERE )) );
|
|
_data.put( "SCONTO", row.get( f.cid2index(FR_SCONTO )) );
|
|
_data.put( "PERCPROV", row.get( f.cid2index(FR_PERCPROV )) );
|
|
_data.put( "IMPFISSO", row.get( f.cid2index(FR_IMPFISSO )) );
|
|
_data.put( "CODIVA", row.get( f.cid2index(FR_CODIVA )) );
|
|
_data.put( "ADDIVA", row.get( f.cid2index(FR_ADDIVA )) );
|
|
_data.put( "ASPBENI", row.get( f.cid2index(FR_ASPBENI )) );
|
|
carica_profilo( );
|
|
_piede.destroy( );
|
|
// somma( _piede );
|
|
_data.put( "G1", _piede.string( ) );
|
|
if (r)
|
|
*r = _data;
|
|
|
|
}
|
|
|
|
void TRiga::save(TSheet_field & f, TToken_string& row )
|
|
{
|
|
row.add( _data.get( "STATORIGA" ), f.cid2index(FR_STATORIGA ));
|
|
row.add( _data.get( "TIPORIGA" ), f.cid2index(FR_TIPORIGA ));
|
|
const TString codmag(_data.get("CODMAG"));
|
|
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 ));
|
|
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 ));
|
|
row.add( _data.get( "QTAEVASA" ), f.cid2index(FR_QTAEVASA ));
|
|
row.add( _data.get( "RIGAEVASA" ), f.cid2index(FR_RIGAEVASA ));
|
|
row.add( _data.get( "TARA" ), f.cid2index(FR_TARA ));
|
|
row.add( _data.get( "PNETTO" ), f.cid2index(FR_PNETTO ));
|
|
row.add( _data.get( "NCOLLI" ), f.cid2index(FR_NCOLLI ));
|
|
row.add( _data.get( "DAEVADERE" ), f.cid2index(FR_DAEVADERE ));
|
|
row.add( _data.get( "SCONTO" ), f.cid2index(FR_SCONTO ));
|
|
row.add( _data.get( "PERCPROV" ), f.cid2index(FR_PERCPROV ));
|
|
row.add( _data.get( "IMPFISSO" ), f.cid2index(FR_IMPFISSO ));
|
|
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 ));
|
|
}
|
|
|
|
void TRiga::load( const TRectype& rec )
|
|
{
|
|
_data = rec;
|
|
carica_profilo( );
|
|
}
|
|
|
|
void TRiga::save( TRectype& rec )
|
|
{
|
|
rec = _data;
|
|
}
|
|
|
|
void TRiga::carica_profilo( )
|
|
{
|
|
if( _pro )
|
|
delete _pro;
|
|
TFilename proname("verig");
|
|
proname << _data.get("TIPORIGA");
|
|
proname.ext( "ini" );
|
|
_pro = new TConfig( proname );
|
|
}
|
|
|
|
void TRiga::configura_sheet( TSheet_field& f, int numriga )
|
|
{
|
|
int ncols = _pro->get_int( "NCOLS", "COLUMNS" );
|
|
// Disabilita tutte le colonne
|
|
f.disable_cell ( numriga, -1 );
|
|
// Abilita le colonne indicate nel profilo della riga
|
|
for( int i = 1; i <= ncols; i ++ )
|
|
{
|
|
TString16 chiave;
|
|
chiave.format( "%d", i );
|
|
int coltoenable = _pro->get_int( chiave, "COLUMNS" );
|
|
f.enable_cell ( numriga, coltoenable);
|
|
}
|
|
}
|
|
|
|
TVariable_mask * TRiga::getmask( )
|
|
{
|
|
|
|
TString16 msk("verig");
|
|
msk << _data.get("TIPORIGA");
|
|
TVariable_mask * mask = new TVariable_mask( msk );
|
|
int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" );
|
|
for( int i = 1; i <= numhandler; i ++ )
|
|
{
|
|
TString chiave;
|
|
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_QTA, qta_handler );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return mask;
|
|
}
|
|
|
|
|
|
void TRiga::edit_keys( const KEY key, TPiede_documento& nuovo )
|
|
{
|
|
static TPiede_documento vecchio;
|
|
|
|
switch( key )
|
|
{
|
|
// Inizio modifica
|
|
case K_SPACE:
|
|
vecchio.destroy( );
|
|
// somma( vecchio );
|
|
break;
|
|
|
|
// Cancellazione
|
|
case K_DEL:
|
|
// Toglie i vecchi valori
|
|
nuovo.sottrai( vecchio );
|
|
break;
|
|
|
|
// Modifica
|
|
case K_ENTER:
|
|
// Toglie i vecchi valori
|
|
nuovo.sottrai( vecchio );
|
|
// Aggiunge i nuovi all
|
|
// somma( nuovo );
|
|
break;
|
|
}
|
|
}
|
|
|
|
TRiga::~TRiga( )
|
|
{
|
|
if( _pro )
|
|
delete _pro;
|
|
}
|
|
|
|
|
|
void TPiede_documento::somma( TPiede_documento& tosum, bool add )
|
|
{
|
|
tosum.restart( );
|
|
THash_object* curr = tosum.get_hashobj( );
|
|
while( curr )
|
|
{
|
|
TString16 key( curr->key( ) );
|
|
if( add )
|
|
somma( key, ( real& )curr->obj( ) );
|
|
else
|
|
sottrai( key, ( real& )curr->obj( ) );
|
|
curr = tosum.get_hashobj( );
|
|
}
|
|
}
|
|
|
|
void TPiede_documento::somma( TString16& piede, const real& importo )
|
|
{
|
|
if( is_key( piede ) )
|
|
{
|
|
real& attuale = ( real& ) operator []( piede );
|
|
attuale += importo;
|
|
}
|
|
else
|
|
add( piede, importo );
|
|
}
|
|
|
|
TToken_string& TPiede_documento::string( )
|
|
{
|
|
TToken_string ret;
|
|
|
|
ret.separator( '~' );
|
|
restart( );
|
|
THash_object* curr = get_hashobj( );
|
|
while( curr )
|
|
{
|
|
ret.add( curr->key( ) );
|
|
ret.add( (( real& ) curr->obj( )).string( ) );
|
|
curr = get_hashobj( );
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
void TPiede_documento::load( TToken_string& s )
|
|
{
|
|
s.separator( '~' );
|
|
for( int i = 0; i < s.items( ); i+=2 )
|
|
{
|
|
TString16 piede = s.get( i );
|
|
TString num = s.get( i + 1 );
|
|
real valore( num );
|
|
add( piede, valore );
|
|
}
|
|
}
|
|
|
|
real& TPiede_documento::get( TString16& piede )
|
|
{
|
|
static real zero( "0.0" );
|
|
|
|
if( is_key( piede ) )
|
|
{
|
|
return ( real& ) find( piede );
|
|
}
|
|
else
|
|
return zero;
|
|
} |