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