#ifndef __TCLIFOR_H #include "tclifor.h" #endif #ifndef __CONFIG_H #include "config.h" #endif #ifndef __VEUML1_H #include "veuml1.h" #endif #ifndef __VE1000O_H #include "ve1000o.h" #endif 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 ); }; const TString& TData_picker::get( const int file, const TString& fieldname ) { return lfile( file ).get( fieldname ); } int TData_picker::get_int( const int file, const TString& fieldname ) { return lfile( file ).get_int( fieldname ); } long TData_picker::get_long( const int file, const TString& fieldname ) { return lfile( file ).get_long( fieldname ); } bool TData_picker::get_bool( const int file, const TString& fieldname ) { return lfile( file ).get_bool( fieldname ); } int TCliFor::write_occas( ) { if( !occasionale( ) ) return NOERR; TRelation occas( LF_OCCAS ); occas_mask( ).autosave( occas ); return occas.write( ); } TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" ) { _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 ) { _tipocf = tipocf; _codcf = codcf; zero( ); 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( ) ) { TRelation occrel( LF_OCCAS ); occrel.curr( ).zero( ); occrel.curr( ).put( "CFPI", ocfpi ); occrel.read( ); occas_mask( ).autoload( occrel ); } } void TCliForVendite::update_mask( TMask& m, bool onload ) { TString16 stato; // Setta i campi che appartengono al file LF_CLIFO bool occas = occasionale( ); m.show( F_OCFPI, occas ); m.show( F_OCCASEDIT, occas ); // In forse per l'Occasionale, sicuri per il Normale m.show( F_COFI, !occas ); m.show( F_STATOPAIVA, !occas ); m.show( F_PAIVA, !occas ); set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" ); if( !onload ) { set( m, F_CODVAL, LF_CLIFO, "CODVAL" ); set( m, F_CODLIN, LF_CLIFO, "CODLIN" ); set( m, F_CODPAG, LF_CLIFO, "CODPAG" ); set( m, F_CODABIA, LF_CLIFO, "CODABI" ); set( m, F_CODCABA, LF_CLIFO, "CODCAB" ); // Setta i campi che appartengono al file LF_CFVEN set( m, F_CODABIP, LF_CFVEN, "CODABIPR" ); set( m, F_CODCABP, LF_CFVEN, "CODCABPR" ); set( m, F_RAGGR, LF_CFVEN, "RAGGDOC" ); set( m, F_CODINDSP, LF_CFVEN, "CODINDSP" ); set( m, F_CODAG, LF_CFVEN, "CODAG" ); set( m, F_CODSPMEZZO, LF_CFVEN, "CODSPMEZZO" ); set( m, F_CODPORTO, LF_CFVEN, "CODPORTO" ); set( m, F_CODNOTESP1, LF_CFVEN, "CODNOTESP1" ); set( m, F_CODNOTESP2, LF_CFVEN, "CODNOTESP2" ); set( m, F_CODVETT1, LF_CFVEN, "CODVETT1" ); set( m, F_CODVETT2, LF_CFVEN, "CODVETT2" ); set( m, F_CODVETT3, LF_CFVEN, "CODVETT3" ); set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" ); set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" ); set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" ); } if ( occasionale ( ) ) { m.set( F_COFI, "" ); m.set( F_PAIVA, "" ); 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 ) ); m.set( F_CIVCF, occas_mask( ).get( O_NUMERO ) ); m.set( F_CAPCF, occas_mask( ).get( O_CAP ) ); m.set( F_COMCF, occas_mask( ).get( O_COMUNE ) ); m.set( F_STATOCF, stato = occas_mask( ).get( O_STATO ) ); } else { set( m, F_COFI, LF_CLIFO, "COFI" ); set( m, F_INDCF, LF_CLIFO, "INDCF" ); set( m, F_CIVCF, LF_CLIFO, "CIVCF" ); set( m, F_STATOPAIVA, LF_CLIFO, "STATOPAIV" ); set( m, F_PAIVA, LF_CLIFO, "PAIV" ); set( m, F_LOCALITACF, LF_CLIFO, "LOCALITACF" ); set( m, F_CAPCF, LF_CLIFO, "CAPCF" ); set( m, F_COMCF, LF_CLIFO, "COMCF" ); stato = get( LF_CLIFO, "STATOCF" ); m.set( F_STATOCF, stato ); } if ( !stato.blank( ) ) m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) ); m.check_field( F_CODPAG ); m.check_field( F_CODLIN ); // m.check_field( F_CODABIA ); m.check_field( F_CODCABA ); // m.check_field( F_CODABIP ); m.check_field( F_CODCABP ); m.check_field( F_CODINDSP ); m.check_field( F_CODAG ); m.check_field( F_CODSPMEZZO ); m.check_field( F_CODPORTO ); m.check_field( F_CODNOTESP1 ); m.check_field( F_CODNOTESP2 ); m.check_field( F_CODVETT1 ); m.check_field( F_CODVETT2 ); m.check_field( F_CODVETT3 ); imposta_dati_comune( m ); imposta_indirizzo_spedizione( m ); imposta_sconto_testa( m ); imposta_valuta( m ); } void TCliFor::edita_occasionale( ) { CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" ); _occas_mask.run( ); }; bool TCliFor::occas_code_handler(TMask_field& f, KEY key) { if (key == K_TAB) { const char* code = f.get(); if (*code) { TRelation occas(LF_OCCAS); occas.lfile().put("CFPI", code); if (occas.read(_isequal) == NOERR) { f.mask().autoload(occas); f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni f.mask().send_key(K_TAB, O_COMUNENAS); } } } return TRUE; } void TCliForVendite::imposta_dati_comune( TMask& m ) { TLocalisamfile comuni(LF_COMUNI); comuni.setkey( 1 ); if( occasionale( ) ) { comuni.put( "COM", occas_mask( ).get( O_COMUNE )); comuni.put( "STATO", occas_mask( ).get( O_STATO ) ); } else { comuni.put( "COM", get( LF_CLIFO, "COMCF" )); comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) ); } comuni.read( ); 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( ) ) { 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 ) ); // Sugli occasionali non c'è la località m.set( F_LOCALITASP, "" ); m.set( F_CAPSP, occas_mask( ).get( O_CAP ) ); m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) ); m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) ); } else { TString16 codindsp( m.get( F_CODINDSP ) ); if( codindsp.blank( ) ) { m.set( F_RAGSOCSP, "" ); m.set( F_INDSP, "" ); m.set( F_CIVSP, "" ); m.set( F_LOCALITASP, "" ); m.set( F_CAPSP, "" ); m.set( F_COMSP, "" ); m.set( F_STATOSP, "" ); return; } else { TLocalisamfile indsped( LF_INDSP ); indsped.setkey( 1 ); 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 ( !stato.blank( ) ) 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( ); 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; 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 } 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; } } void TCliForVendite::imposta_valuta( TMask& m ) { TConfig ditta( CONFIG_DITTA ); if( ditta.get_bool( "GESVALAC", "ve" ) ) { TTable cambi( "%CAM" ); cambi.zero( ); TString16 val( m.get( F_CODVAL ) ); TString16 codtab( ( const char * ) val ); codtab << m.get( F_DATADOC ); cambi.put( "CODTAB", codtab ); const int result = cambi.read( _isgteq ); if( result == _iseof ) cambi.prev( ); codtab = cambi.get( "CODTAB" ); if ( codtab.sub( 0, 2 ) == val ) { m.set( F_CAMBIO, cambi.get( "R10" ) ); m.set( F_DATACAMBIO, cambi.get( "D0" ) ); return; } } TTable valuta( "VAL" ); valuta.zero( ); valuta.put( "CODTAB", m.get( F_CODVAL ) ); if( valuta.read( ) == NOERR ) { m.set( F_CAMBIO, valuta.get( "R10" ) ); m.set( F_DATACAMBIO, valuta.get( "D0" ) ); } }