#ifndef __TCLIFOR_H #include "tclifor.h" #endif #ifndef __CONFIG_H #include "config.h" #endif #ifndef __VEUML1_H #include "veuml1.h" #endif #ifndef __VE0100_H #include "ve0100.h" #endif #ifndef __VE0100O_H #include "ve0100o.h" #endif #ifndef __TABUTIL_H #include #endif #ifndef __VEINI_H #include "veini.h" #endif #ifndef __VELIB01_H #include #endif const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& 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 ) { 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( ) { 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( "ve0100o" ), _tipocf(' '), _codcf(0L) { _occas_mask.set_handler( O_CODICE, occas_code_handler ); add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" ); } bool TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi ) { _valid = FALSE; _tipocf = tipocf; _codcf = codcf; zero( ); if (tipocf == ' ' || codcf == 0L) return TRUE; curr( ).put( "TIPOCF", tipocf ); curr( ).put( "CODCF", codcf ); lfile( ).setkey( 1 ); if( read( ) == NOERR ) { _occas = curr().get_bool( "OCCAS" ); if ( occasionale( ) ) { TRelation occrel( LF_OCCAS ); occrel.curr().zero(); occrel.curr().put( "CFPI", ocfpi ); if (occrel.read(_isequal) != NOERR) occrel.curr().zero(); occas_mask().autoload( occrel ); } _valid = TRUE; } return _valid; } void TCliForVendite::update_mask( TMask& m, bool onload ) { TString16 stato; const TString16 codval(m.get(F_CODVAL)); const TString16 datacambio(m.get(F_DATACAMBIO1)); // Setta i campi che appartengono al file LF_CLIFO // const bool occas = app().config_ditta().get_bool("GESOCCAS") && occasionale(); const bool occas = occasionale(); 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" ); m.enable(F_RAGSOC, !occas); if(!onload) { if (m.id2pos(F_CODVAL) >= 0 && m.field(F_CODVAL).active()) set( m, F_CODVAL, LF_CLIFO, "CODVAL" ); if (m.id2pos(F_CODVAL1) >= 0 && m.field(F_CODVAL1).active()) set( m, F_CODVAL1, LF_CLIFO, "CODVAL" ); if (m.id2pos(F_CODLIN) >= 0 && m.field(F_CODLIN).active()) 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_CODNOTE, LF_CFVEN, "CODNOTE" ); 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, "PERCSPINC" ); set( m, F_ADDBOLLI, LF_CFVEN, "ADDBOLLI" ); set(m, F_CATVEN, LF_CFVEN, "CATVEN"); if (m.id2pos(F_CODLIST) >= 0 && m.field(F_CODLIST).active()) set(m, F_CODLIST, LF_CFVEN, "CODLIST"); if (m.id2pos(F_CODLIST1) >= 0 && m.field(F_CODLIST1).active()) set(m, F_CODLIST1, LF_CFVEN, "CODLIST"); if (m.id2pos(F_CODAG) >= 0 && m.field(F_CODAG).active()) set(m, F_CODAG, LF_CFVEN, "CODAG"); set(m, F_CODZON, LF_CFVEN, "CODZONA"); set(m, F_RAGGR, LF_CFVEN, "RAGGDOC"); } // if ( occasionale ( ) ) TMask & occ_mask = occas_mask(); if (occas) { m.set( F_COFI, "" ); m.set( F_PAIVA, "" ); m.set( F_LOCALITACF, ""); m.set( F_OCFPI, occ_mask.get( O_CODICE ) ); m.set( F_RAGSOC, occ_mask.get( O_RAGSOC ) ); m.set( F_INDCF, occ_mask.get( O_INDIRIZZO ) ); m.set( F_CIVCF, occ_mask.get( O_NUMERO ) ); m.set( F_CAPCF, occ_mask.get( O_CAP ) ); m.set( F_COMCF, occ_mask.get( O_COMUNE ) ); m.set( F_STATOCF, stato = occ_mask.get( O_STATO ) ); } else { occ_mask.reset(); 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 ); } const TString16 newcodval(m.get(F_CODVAL)); const TString16 newdatacambio(m.get(F_DATACAMBIO1)); if ((m.id2pos(F_CAMBIO) >= 0) && (newcodval.empty() || newdatacambio.empty())) m.reset(F_CAMBIO); if (m.id2pos(F_CODVAL) >= 0 && m.field(F_CODVAL).active()) m.check_field(F_CODVAL); if (m.id2pos(F_CODVAL1) >= 0 && m.field(F_CODVAL1).active()) m.check_field(F_CODVAL1); if (m.id2pos(F_DATACAMBIO1) >= 0 && m.field(F_DATACAMBIO1).active() && (codval != newcodval || datacambio != newdatacambio)) m.check_field(F_DATACAMBIO1); m.check_field(F_COMCF); m.check_field(F_STATOCF); m.check_field( F_CODPAG ); if (m.id2pos(F_CODLIN) >= 0 && m.field(F_CODLIN).active()) m.check_field( F_CODLIN ); // m.check_field( F_CODABIA ); m.check_field( F_CODCABA ); // m.check_field( F_CODABIP ); if (m.id2pos(F_CODLIST) >= 0 && m.field(F_CODLIST).active()) m.check_field( F_CODLIST ); if (m.id2pos(F_CODLIST1) >= 0 && m.field(F_CODLIST1).active()) m.check_field( F_CODLIST1); m.check_field( F_CODCABP ); m.check_field( F_CODINDSP ); if (m.id2pos(F_CODAG) >= 0 && m.field(F_CODAG).active()) 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_CODNOTE ); m.check_field( F_CODVETT1 ); m.check_field( F_CODVETT2 ); m.check_field( F_CODVETT3 ); m.check_field( F_CATVEN ); m.check_field( F_CODZON ); const bool gescontr = app().config_ditta().get_bool("GES", "ve", 2); const bool contr_enabled = get_bool(LF_CFVEN, "GESTCONTR"); m.enable(F_CODCONT1, contr_enabled && gescontr); m.enable(F_CODCONT, contr_enabled && gescontr); if (!onload) { imposta_indirizzo_spedizione( m ); imposta_sconto_testa( m ); imposta_spese(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_indirizzo_spedizione( TMask& m ) { TString16 stato; const bool occas = occasionale(); m.enable( F_CODINDSP , !occas); if( occas ) { m.set( 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.check_field(F_COMSP); m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) ); m.check_field(F_STATOSP); } } void TCliForVendite::imposta_sconto_testa( TMask& m ) { TConfig & ditta = app().config_ditta(); const char tipogestione = ditta.get("GESSCO", "ve")[ 0 ]; switch( tipogestione ) { case 'N': // Sconti non gestiti: pussa via! break; case 'P': // Percentuale su anagrafica cliente m.set( F_SCONTOPERC, get( LF_CFVEN, "SCONTO" ) ); break; case 'T': // Gestione tabella sconti { 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")); } } break; case 'A': // Gestione archivio sconti { 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_spese( TMask& m ) { TSheet_field & sh = (TSheet_field &) m.field(F_SHEET); TDocumento & doc = app().doc(); TString16 name("CODSP0"); TString_array spese; for (int i = 1; i <= 4; i++) { name.rtrim(1); name << i; const TString16 s(get(LF_CFVEN, name)); if (s.not_empty()) spese.add(s); } m.autosave(*app().get_relation()); doc.update_spese_aut(spese, FALSE, &sh); sh.force_update(); }