diff --git a/ve/bollaf.src b/ve/bollaf.src index ba854c2c7..a737afd83 100755 --- a/ve/bollaf.src +++ b/ve/bollaf.src @@ -38,7 +38,7 @@ STATIVALIDI=1,2,3,4,5 STATOFINALE=N [CANCELLAZIONE] -STATIVALIDI = 6,7 +STATIVALIDI = 1,2,3,4,5 STATOFINALE = 4 REMOVE = 0 diff --git a/ve/clifor.cpp b/ve/clifor.cpp new file mode 100755 index 000000000..e2aea48a7 --- /dev/null +++ b/ve/clifor.cpp @@ -0,0 +1,413 @@ +#include "clifor.h" + +#ifndef __CONFIG_H +#include "config.h" +#endif + +#ifndef __VE0100_H +#include "ve0100.h" +#endif + +#ifndef __VE0100O_H +#include "ve0100o.h" +#endif + +#ifndef __VEINI_H +#include "veini.h" +#endif + +#ifndef __VELIB_H +#include "velib.h" +#endif + +TOccasionale::TOccasionale() : TRectype(LF_OCCAS) +{ + _cod = new TRecfield(*this, OCC_CFPI); +} + +TOccasionale::TOccasionale(const TRectype& r) : TRectype(r) +{ + _cod = new TRecfield(*this, OCC_CFPI); +} + +TRectype & TOccasionale::operator = (const TRectype& r) +{ + return TRectype::operator=(r); +} + +TOccasionale::~TOccasionale() +{ + delete _cod; +} + +int TCli_for::write_rewrite(TBaseisamfile& f, bool re) const +{ + int err = TMultiple_rectype::write_rewrite(f, re); + + if (err == NOERR) + { + TLocalisamfile v(LF_CFVEN); + TRectype & v_rec = vendite(); + err = v.write(v_rec); + if (err == _isreinsert) + err = v.write(v_rec); + } + return err; +} + +TRectype & TCli_for::vendite() const + +{ + const char t = tipo(); + const long c = codice(); + + if (_ven_rec.empty() || t != *(const char *) (*_ven_tipo) || c != (long) *_ven_codice) + { + TLocalisamfile v(LF_CFVEN); + + ((TCli_for *)this)->_ven_rec.zero(); + ((TCli_for *)this)->_ven_rec.put(CFV_TIPOCF,t); + ((TCli_for *)this)->_ven_rec.put(CFV_CODCF, c); + TRectype v_rec(_ven_rec); + + if (((TCli_for *)this)->_ven_rec.read(v) != NOERR) + ((TCli_for *)this)->_ven_rec = v_rec; + } + return (TRectype &) _ven_rec; +} + +int TCli_for::read(TRectype & rec, word op, word lockop) +{ + int err = TMultiple_rectype::read(rec, op, lockop); + + _ven_rec.zero(); + return err; +} + +int TCli_for::read(char tipo, long codice, word op, word lockop) +{ + zero(); + put(CLI_TIPOCF, tipo); + put(CLI_CODCF, codice); + return TMultiple_rectype::read(op, lockop); +} + +int TCli_for::remove(TBaseisamfile& f) const +{ + TLocalisamfile v(LF_CFVEN); + + const int err = vendite().remove(v); + if (err != NOERR && err != _iskeynotfound) + return err; + return TMultiple_rectype:: remove(f); +} + +TCli_for::TCli_for(char tipo, long codice) : TMultiple_rectype( LF_CLIFO ), _ven_rec(LF_CFVEN) +{ + _tipo = new TRecfield(*this, CLI_TIPOCF); + _codice = new TRecfield(*this, CLI_CODCF); + _ven_tipo = new TRecfield(_ven_rec, CFV_TIPOCF); + _ven_codice = new TRecfield(_ven_rec, CFV_CODCF); + add_file(LF_INDSP, IND_CODIND); + read(tipo, codice); +} + +TCli_for::TCli_for(const TRectype & rec) : TMultiple_rectype(rec), _ven_rec(LF_CFVEN) +{ + _tipo = new TRecfield(*this, CLI_TIPOCF); + _codice = new TRecfield(*this, CLI_CODCF); + _ven_tipo = new TRecfield(_ven_rec, CFV_TIPOCF); + _ven_codice = new TRecfield(_ven_rec, CFV_CODCF); + add_file(LF_INDSP, IND_CODIND); + read((TRectype &) rec); +} + +TCli_for::TCli_for(const TCli_for & c) : TMultiple_rectype(c), _ven_rec(c._ven_rec) +{ + _tipo = new TRecfield(*this, CLI_TIPOCF); + _codice = new TRecfield(*this, CLI_CODCF); + _ven_tipo = new TRecfield(_ven_rec, CFV_TIPOCF); + _ven_codice = new TRecfield(_ven_rec, CFV_CODCF); +} + +TCli_for::~TCli_for() +{ + delete _tipo; + delete _codice; + delete _ven_tipo; + delete _ven_codice; +} + +/* void TCli_for_vendite::update_mask( TMask& m, TMask & occas_mask, bool onload ) +{ + 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 = 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); + m.set(F_RAGSOC, get(CLI_RAGSOC)); + m.enable(F_RAGSOC, !occas); + + const TRectype & ven_rec = vendite(); + + if(!onload) + { + short pos = m.id2pos(F_CODVAL); + const TString & codval = get(CLI_CODVAL); + + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).set(codval); + pos = m.id2pos(F_CODVAL1); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).set(codval); + pos = m.id2pos(F_CODLIN); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).set(get(CLI_CODLIN)); + m.set(F_CODPAG, get(CLI_CODPAG)); + m.set(F_CODABIA, get(CLI_CODABI)); + m.set(F_CODCABA, get(CLI_CODCAB)); + // Setta i campi che appartengono al file LF_CFVEN + m.set(F_CODABIP, ven_rec.get(CFV_CODABIPR)); + m.set(F_CODCABP, ven_rec.get(CFV_CODCABPR)); + m.set(F_RAGGR, ven_rec.get(CFV_RAGGDOC)); + m.set(F_CODINDSP, ven_rec.get(CFV_CODINDSP)); + m.set(F_CODAG, ven_rec.get(CFV_CODAG)); + m.set(F_CODSPMEZZO, ven_rec.get(CFV_CODSPMEZZO)); + m.set(F_CODPORTO, ven_rec.get(CFV_CODPORTO)); + m.set(F_CODNOTESP1, ven_rec.get(CFV_CODNOTESP1)); + m.set(F_CODNOTESP2, ven_rec.get(CFV_CODNOTESP2)); + m.set(F_CODNOTE, ven_rec.get(CFV_CODNOTE)); + m.set(F_CODVETT1, ven_rec.get(CFV_CODVETT1)); + m.set(F_CODVETT2, ven_rec.get(CFV_CODVETT2)); + m.set(F_CODVETT3, ven_rec.get(CFV_CODVETT3)); + m.set(F_SPESEINC, ven_rec.get(CFV_PERCSPINC)); + m.set(F_ADDBOLLI, ven_rec.get(CFV_ADDBOLLI)); + m.set(F_CATVEN, ven_rec.get(CFV_CATVEN)); + pos = m.id2pos(F_CODLIST); + const TString & codlist = ven_rec.get(CFV_CODLIST); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).set(codlist); + pos = m.id2pos(F_CODLIST1); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).set(codlist); + if (m.id2pos(F_CODAG) >= 0 && m.field(F_CODAG).active()) + m.set(F_CODAG, ven_rec.get(CFV_CODAG)); + m.set(F_CODZON, ven_rec.get(CFV_CODZONA)); + m.set(F_RAGGR, ven_rec.get(CFV_RAGGDOC)); + } + if (occas) + { + m.reset(F_COFI); + m.reset(F_PAIVA); + m.reset(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)); + 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, occas_mask.get(O_STATO)); + } + else + { + occas_mask.reset(); + m.set(F_COFI, get(CLI_COFI)); + m.set(F_INDCF, get(CLI_INDCF)); + m.set(F_CIVCF, get(CLI_CIVCF)); + m.set(F_STATOPAIVA, get(CLI_STATOPAIV)); + m.set(F_PAIVA, get(CLI_PAIV)); + m.set(F_LOCALITACF, get(CLI_LOCCF)); + m.set(F_CAPCF, get(CLI_CAPCF)); + m.set(F_COMCF, get(CLI_COMCF)); + m.set(F_STATOCF, get(CLI_STATOCF)); + } + const TString16 newcodval(m.get(F_CODVAL)); + const TString16 newdatacambio(m.get(F_DATACAMBIO1)); + + short pos = m.id2pos(F_CAMBIO); + if ((pos >= 0) && (newcodval.empty() || newdatacambio.empty())) + m.fld(F_CAMBIO).reset(); + pos = m.id2pos(F_CODVAL); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).check(); + pos = m.id2pos(F_CODVAL1); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).check(); + pos = m.id2pos(F_DATACAMBIO1); + if (pos >= 0 && m.field(pos).active() && + (codval != newcodval || datacambio != newdatacambio)) + m.fld(pos).check(); + m.check_field(F_COMCF); + m.check_field(F_STATOCF); + m.check_field( F_CODPAG ); + pos = m.id2pos(F_CODLIN); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).check(); + m.check_field( F_CODCABA ); + pos = m.id2pos(F_CODLIST); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).check(); + pos = m.id2pos(F_CODLIST1); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).check(); + m.check_field( F_CODCABP ); + m.check_field( F_CODINDSP ); + pos = m.id2pos(F_CODAG); + if (pos >= 0 && m.fld(pos).active()) + m.fld(pos).check(); + 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 = ven_rec.get_bool(CFV_GESTCONTR); + + m.enable(F_CODCONT1, contr_enabled && gescontr); + m.enable(F_CODCONT, contr_enabled && gescontr); + + if (!onload) + { + imposta_indirizzo_spedizione(m, occas_mask); + imposta_sconto_testa(m); + imposta_spese(m); + } +} + +void TCli_for::edita_occasionale( ) +{ + CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" ); + _occas_mask.run( ); +}; + +bool TCli_for::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 TCli_for_vendite::imposta_indirizzo_spedizione(TMask& m, TMask & occas_mask) +{ + const bool occas = occasionale(); + + m.enable( F_CODINDSP , !occas); + if (occas) + { + m.reset( 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.reset( 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, occas_mask.get(O_STATO)); + m.check_field(F_STATOSP); + } +} + +void TCli_for_vendite::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(CLI_SCONTO)); + break; + case 'T': // Gestione tabella sconti + { + const TString16 codsconto(vendite().get(CFV_CODSCC)); + + if (codsconto.not_empty()) + { + TTable sconti("%SCC"); + sconti.setkey(1); + sconti.zero(); + sconti.put("CODTAB", codsconto); + if (sconti.read( ) == NOERR) + m.set(F_SCONTOPERC, sconti.get("S1")); + } + } + break; + case 'A': // Gestione archivio sconti + { + TString16 cod; + const TRectype & ven_rec = vendite(); + TLocalisamfile sconti(LF_SCONTI ); + + sconti.setkey(1); + sconti.zero(); + sconti.put("TIPO", "I"); + if(ditta.get_bool("SCOKEY", "ve", 1)) + sconti.put("CODCAT", ven_rec.get(CFV_CATVEN)); + if(ditta.get_bool("SCOKEY", "ve", 2)) + cod = ven_rec.get(CFV_CODSCC); + else + cod = " "; + if( ditta.get_bool("SCOKEY", "ve", 3)) + cod << ven_rec.get(CFV_CODZONA); + else + cod << " "; + if( ditta.get_bool("SCOKEY", "ve", 4)) + cod << get(CLI_CODPAG); + sconti.put("CODART", cod); + if(sconti.read() == NOERR) + m.set(F_SCONTOPERC, sconti.get( "SCONTO")); + } + break; + default: + break; + } + return; +} + +void TCli_for_vendite::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(name)); + + if (s.not_empty()) + spese.add(s); + } + m.autosave(*app().get_relation()); + doc.update_spese_aut(spese, FALSE, &sh); + sh.force_update(); +} +*/ diff --git a/ve/clifor.h b/ve/clifor.h new file mode 100755 index 000000000..a226f4bff --- /dev/null +++ b/ve/clifor.h @@ -0,0 +1,81 @@ +#ifndef __CLIFOR_H +#define __CLIFOR_H + +#ifndef __MULTIREC_H +#include +#endif + +#ifndef __MASK_H +#include +#endif + +#ifndef __LFFILES_H +#include +#endif + +#ifndef __CLIFO_H +#include +#endif + +#ifndef __CFVEN_H +#include +#endif + +#ifndef __INDSP_H +#include +#endif + +#ifndef __OCCAS_H +#include +#endif + +class TOccasionale : public TRectype +{ + TRecfield * _cod; + +public: + const char * codice() const { return (const char *) *_cod;} + TRectype & operator = (const TRectype& r); + + TOccasionale(); + TOccasionale(const TRectype& r); + + virtual ~TOccasionale(); +}; + +class TCli_for : public TMultiple_rectype +{ + TRecfield * _tipo; + TRecfield * _codice; + TRecfield * _ven_tipo; + TRecfield * _ven_codice; + + TRectype _ven_rec; + +protected: + virtual int write_rewrite(TBaseisamfile& f, bool re = FALSE) const; + +public: + bool occasionale() const { return get_bool(CLI_OCCAS ); }; + TRectype & vendite() const; +// TMask& occas_mask( ){ return _occas_mask; }; +// static bool occas_code_handler(TMask_field& f, KEY key); +// int write_occas( ); +// void edita_occasionale( ); + + char tipo() const { return *(const char *) (*_tipo); } + long codice() const { return (long) *_codice; } + bool ok() const { return !empty();} + + virtual int read(TRectype & rec, word op = _isequal, word lockop = _nolock); + int read(char tipo, long codice, word op = _isequal, word lockop = _nolock); + virtual int remove(TBaseisamfile& f) const; +// int remove() const { return TMultiple_rectype::remove();} + + TCli_for(char tipo = ' ', long codice = 0L); + TCli_for(const TRectype & rec); + TCli_for(const TCli_for & c); + virtual ~TCli_for(); +}; + +#endif diff --git a/ve/sconti.cpp b/ve/sconti.cpp index 525d2813f..2021cbbb7 100755 --- a/ve/sconti.cpp +++ b/ve/sconti.cpp @@ -10,10 +10,6 @@ #include "verig.h" #endif -#ifndef __TCLIFOR_H -#include "tclifor.h" -#endif - #ifndef __CONFIG_H #include "config.h" #endif @@ -187,8 +183,8 @@ bool TCond_vendita::cerca( int tiporicerca ) _condv.put("TIPO", "C"); if(config_ditta().get_bool("GESCONCC", "ve")) { - _condv.put("TIPOCF", clifo().tipocf()); - _condv.put("CODCF", clifo().codcf()); + _condv.put("TIPOCF", clifo().tipo()); + _condv.put("CODCF", clifo().codice()); } _condv.put("COD", codcont); } @@ -313,7 +309,7 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) TString codart = anamag().get( "CODART" ); const TString codriga = riga().get( FR_CODART ); - _ivarid = _clifo->get_bool(LF_CFVEN, "IVARID"); + _ivarid = clifo().vendite().get_bool(CFV_IVARID); _load_mask = !load_um_only && !load_scagl_only; if(anamag().bad() || codriga != codart ) @@ -366,7 +362,7 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) const bool sco_um_gest = config_ditta().get_bool("GESSCORIGAUM", "ve"); switch (gestione) - { + { case 'N': // Sconti di riga non gestiti set_sconto(""); @@ -391,7 +387,7 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) _sconti.setkey(1); _sconti.put("TIPO", "R"); if( config_ditta().get_bool("GESSCORIGACV", "ve")) - _sconti.put("CODCAT", clifo().get(LF_CFVEN, "CATVEN")); + _sconti.put("CODCAT", clifo().vendite().get(CFV_CATVEN)); if (sco_um_gest) _sconti.put("UM", riga().get( FR_UMQTA)); _sconti.put("TIPORIGA", rigakey); @@ -422,8 +418,9 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) } break; default: - error_box("Tipo di chiave righe sconti '%c' non valida!", rigakey); - break; + _sconti.put("CODART", codriga); + _sconti.read(); + break; } const bool found = _sconti.good(); @@ -457,10 +454,10 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) } break; case 'C': - set_sconto(clifo().get(LF_CFVEN, "SCONTO")); + set_sconto(clifo().vendite().get(CFV_SCONTO)); break; default: - error_box("Tipo di gestione sconti '%c' non valido!", gestione ); + set_sconto(""); break; } @@ -486,7 +483,7 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) set_provv(age.get_real("R0")); break; case 'C': - set_provv(real(clifo().get(LF_CFVEN, "PERCPROVV"))); + set_provv(real(clifo().vendite().get(CFV_PERCPROVV))); break; case 'L': if (found_condv) @@ -503,20 +500,20 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only) TString16 catven(testa().get(F_CATVEN)); if (catven.empty()) - catven = clifo().get(LF_CFVEN, "CATVEN"); + catven = clifo().vendite().get(CFV_CATVEN); if (catven.not_empty()) { TTable cve("CVE"); - cve.put("CODART", codage); + cve.put("CODTAB", catven); if (cve.read() == NOERR) set_provv(cve.get_real("R0")); } } break; default: - error_box("Tipo di gestione provvigioni '%c' non valido!", tipoprovv ); + set_provv(""); break; } } @@ -579,7 +576,7 @@ void TCond_vendita::update_omaggi(bool full) qta *= _rcondv.get_real("QOM"); r.put("QTA", qta); r.put("PREZZO", _rcondv.get("PROMAGGIO")); - const TString16 codiva_cli(_clifo->get(LF_CFVEN, "ASSFIS")); + const TString16 codiva_cli(clifo().vendite().get(CFV_ASSFIS)); if (codiva_cli.not_empty()) r.put("CODIVA", codiva_cli); else @@ -595,7 +592,7 @@ void TCond_vendita::update_omaggi(bool full) sh.force_update(); } -TCond_vendita::TCond_vendita(TCliFor * clifo, TConfig * ditta, TDocumento_mask * testa, TMask * riga, +TCond_vendita::TCond_vendita(TCli_for * clifo, TConfig * ditta, TDocumento_mask * testa, TMask * riga, TLocalisamfile * anamag, TLocalisamfile * umart) : _clifo(clifo), _testa(testa), _riga(riga), _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _sconti( LF_SCONTI ), diff --git a/ve/sconti.h b/ve/sconti.h index db0e35857..4bbad1266 100755 --- a/ve/sconti.h +++ b/ve/sconti.h @@ -6,7 +6,7 @@ #endif #ifndef __TCLIFOR_H -#include "tclifor.h" +#include "clifor.h" #endif #ifndef __VELIB_H @@ -25,7 +25,7 @@ class TCond_vendita : public TObject real _prezzo; real _provv; real _molt_sconto; - TCliFor * _clifo; + TCli_for * _clifo; TLocalisamfile _condv; TLocalisamfile _rcondv; TLocalisamfile * _anamag; @@ -51,7 +51,7 @@ protected: TLocalisamfile & umart() const { CHECK(_umart, "Anagrafica di unita' di misura magazzino non inizializzata") ; return *_umart; } public: - TCliFor & clifo() const { CHECK(_clifo, "Cliente/fornitore non inizializzato"); return * _clifo; } + TCli_for & clifo() const { CHECK(_clifo, "Cliente/fornitore non inizializzato"); return * _clifo; } bool set_sconto( const char * exp, bool signal = FALSE ); const TString& get_sconto() const { return _sconto; } real sconto_val() const { return _molt_sconto;} @@ -59,7 +59,8 @@ public: real get_provv() const { return _provv; } const TString & get_iva() const { return _codiva; } - void set_config( TConfig * ditta){ _config_ditta = ditta; } + void set_clifo( TCli_for * clifo) { _clifo = clifo; } + void set_config( TConfig * ditta) { _config_ditta = ditta; } void set_testa( TDocumento_mask * testa ){ _testa = testa; } void set_riga( TMask * riga ){ _riga = riga; } void set_anamag(TLocalisamfile & anamag) { _anamag = &anamag; } @@ -67,7 +68,7 @@ public: void ricerca(bool load_um_only = FALSE, bool load_scagl_only = FALSE); bool gestum() const { return _condv.get_bool("GESTUM"); } - TCond_vendita(TCliFor * clifo = NULL, TConfig * _ditta = NULL, TDocumento_mask * testa = NULL, TMask * riga = NULL, + TCond_vendita(TCli_for * clifo = NULL, TConfig * _ditta = NULL, TDocumento_mask * testa = NULL, TMask * riga = NULL, TLocalisamfile * anamag = NULL, TLocalisamfile * umart = NULL); ~TCond_vendita() {} }; diff --git a/ve/tclifor.cpp b/ve/tclifor.cpp deleted file mode 100755 index c720af531..000000000 --- a/ve/tclifor.cpp +++ /dev/null @@ -1,374 +0,0 @@ -#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 __VELIB_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(); -} diff --git a/ve/tclifor.h b/ve/tclifor.h deleted file mode 100755 index d66d99785..000000000 --- a/ve/tclifor.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef __TCLIFOR_H -#define __TCLIFOR_H - -#ifndef __RELATION_H -#include -#endif - -#ifndef __VARMASK_H -#include -#endif - -class TData_picker : public TRelation -{ -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 ); - long get_long( const int file, const TString& fieldname ); - bool get_bool( const int file, const TString& fieldname ); - void set( TMask& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); }; -}; - -class TCliFor : public TData_picker -{ -private: - - bool _occas; - TMask _occas_mask; - bool _valid; - -protected: - - char _tipocf; - long _codcf; - -public: - - TCliFor( ); - 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); - int write_occas( ); - void edita_occasionale( ); - char tipocf( ){ return _tipocf; } - long codcf( ){ return _codcf; } - bool ok() { return _valid;} -}; - -class TCliForVendite : public TCliFor -{ - -public: - - void update_mask( TMask& m, bool onload = FALSE ); - void imposta_indirizzo_spedizione( TMask& m ); - void imposta_sconto_testa( TMask& m ); - void imposta_spese( TMask& m ); - -}; - -#endif diff --git a/ve/ve0100.cpp b/ve/ve0100.cpp index 2a2deea2f..6905e5cd7 100755 --- a/ve/ve0100.cpp +++ b/ve/ve0100.cpp @@ -10,8 +10,8 @@ #include "veini.h" #endif -#ifndef __MGLIB01_H -#include "..\mg\mglib01.h" +#ifndef __MGLIB_H +#include "..\mg\mglib.h" #endif #ifndef __UTILITY_H @@ -57,7 +57,7 @@ void TMotore_application::init_insert_mode( TMask& m ) if (pos >= 0 && m.fld(pos).active()) m.fld(pos).set(data_doc); m.disable(DLG_PRINT); - clifo( ).occas_mask( ).reset( ); + _occas_mask->reset( ); const int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof for( int i = 1; i <= ndefaults; i++ ) @@ -90,16 +90,16 @@ void TMotore_application::update_profile() _pro = new TConfig( fn ); } -int TMotore_application::user_function( int index ) +int TMotore_application::user_function(int index) { - switch( index ) + switch(index) { - case 1: - break; - default: - yesnofatal_box( "Chiamata ad una procedura utente non definita: %d", index ); - return NOERR; - break; + case 1: + break; + default: + yesnofatal_box( "Chiamata ad una procedura utente non definita: %d", index ); + return NOERR; + break; } return NOERR; } @@ -176,9 +176,10 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key ) if (key == K_CTRL + K_INS) { TRiga_documento & riga = (*(app()._doc))[r + 1]; - TString16 s(app()._clifor->get(LF_CFVEN, "CODMAG")); + TRectype & ven_rec = app().doc().clifor().vendite(); + TString16 s(ven_rec.get(CFV_CODMAG)); - s << app()._clifor->get(LF_CFVEN, "CODDEP"); + s << ven_rec.get(CFV_CODDEP); riga.put("CODMAG", s); riga.autoload(ss); ss.check_row(r); @@ -271,16 +272,54 @@ bool TMotore_application::print_handler( TMask_field& f, KEY key ) return TRUE; } - +bool TMotore_application::occas_code_handler(TMask_field& f, KEY key) +{ + if (key == K_TAB && f.focusdirty()) + { + 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; +} bool TMotore_application::occas_handler( TMask_field& f, KEY key ) { - TMask & m = f.mask(); + TDocumento_mask & m = (TDocumento_mask &)f.mask(); if ( key == K_SPACE && m.is_running( ) ) - { - TMask& om = app( ).clifo( ). occas_mask( ); - if (om.run( ) != K_ESC) - app().clifo().update_mask(m); + { + TDocumento & doc = app().doc(); + TMask * occ_m = app()._occas_mask; + TOccasionale & occ = doc.occas(); + TCli_for & cli_for = doc.clifor(); + for (int i = occ_m->fields() - 1; i >= 0; i--) + { + TMask_field & f = occ_m->fld(i); + const TFieldref * c = f.field(); + if (c) + f.set(c->read(occ)); + } + if (occ_m->run() != K_ESC) + { + doc.put("OCFPI", occ_m->get(O_CODICE)); + for (int i = occ_m->fields() - 1; i >= 0; i--) + { + TMask_field & f = occ_m->fld(i); + TFieldref * c = (TFieldref *) f.field(); + if (c) + c->write(f.get(), occ); + } + m.occ2mask(occ); + } f.set_focus( ); } return TRUE; @@ -327,30 +366,30 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key ) bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) -{ - 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_bool("SOSPESO") ) - return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", codcf ); - const TString80 occas_cod(app().clifo().occas_mask().get(O_CODICE)); - if (app().clifo().load( cf, codcf, occas_cod)) +{ + if (key != K_ENTER && f.to_check(key, TRUE)) + { + TDocumento & d = app().doc(); + TDocumento_mask & m = (TDocumento_mask &) f.mask(); + const TString & val = f.get(); + + d.put("TIPOCF", app().tipocf()); + d.put("CODCF", atol(val)); + + app().doc().clifor().put(CLI_CODCF, ""); // force reload + TCli_for & cli_for = app().doc().clifor(); + TOccasionale & occas = app().doc().occas(); + + if ( cli_for.get_bool("SOSPESO") ) + return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", atol(val) ); + m.cli2mask(cli_for, occas, *(app()._config_ditta)); + if (cli_for.occasionale()) { - 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 - } + if(m.id2pos(F_OCCASEDIT) > 0 && f.to_check(key) && *(occas.codice()) == '\0') + m.send_key( K_SPACE, F_OCCASEDIT ); // Lancia maschera occasionali } - else - return FALSE; + else + app().doc().zero("OCFPI"); } return TRUE; } @@ -612,19 +651,14 @@ const char* TMotore_application::get_next_key( ) int TMotore_application::read( TMask& m ) { - const int err = _doc->read(_doc->head()); +// const int err = _doc->read(_doc->head()); - if ( err == NOERR ) - { +// if ( err == NOERR ) +// { m.autoload(*_rel); _codnum = m.get(F_CODNUM); _tipodoc = m.get(F_TIPODOC); - const char tipocf = _doc->get("TIPOCF")[0]; - const long codcf = _doc->get_long("CODCF"); - const TString occas_cod(_doc->get("OCFPI")); - - clifo().load( tipocf, codcf, occas_cod); - clifo().update_mask( ( TVariable_mask& ) m, TRUE ); + ((TDocumento_mask &)m).cli2mask(app().doc().clifor(), app().doc().occas(), *(app()._config_ditta)); TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET ); @@ -639,8 +673,9 @@ int TMotore_application::read( TMask& m ) rec.autoload(f); f.check_row(i - 1); } - } - return err; +// } +// return err; + return NOERR; } int TMotore_application::write( const TMask& m ) // C 90 @@ -650,14 +685,8 @@ int TMotore_application::write( const TMask& m ) // C 90 if (err == NOERR) { m.field(F_STATO).set( _pro->get( "STATOFINALE", "INSERIMENTO" ) ); - if ( m.id2pos( F_OCCASEDIT) > 0 ) - err = app().clifo().write_occas(); - if ( err == NOERR ) - { - m.autosave(*_rel); - _doc->put("OCFPI", app().clifo().occas_mask().get(O_CODICE)); - err = _doc->write( ); - } + m.autosave(*_rel); + err = _doc->write( ); if (err == NOERR) _rel->read(); // per posizionare correttamente la relazione } @@ -673,14 +702,8 @@ int TMotore_application::rewrite( const TMask& m ) // C 90 if (err == NOERR) { - if ( m.id2pos( F_OCCASEDIT) > 0 ) - err = app( ).clifo( ).write_occas( ); - if ( err == NOERR ) - { - m.autosave(*_rel); - _doc->put("OCFPI", app().clifo().occas_mask().get(O_CODICE)); - err = _doc->rewrite( ); - } + m.autosave(*_rel); + err = _doc->rewrite( ); } return err; } @@ -722,24 +745,24 @@ bool TMotore_application::user_create( ) // Metto in relazione testata e righe _rel = new TRelation( LF_DOC ); - open_files(LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_TAB, LF_TABCOM, 0); + open_files(LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_TAB, LF_TABCOM, LF_CLIFO, + LF_CFVEN, LF_INDSP, LF_OCCAS, 0); _doc = new TDocumento; _rel->lfile().set_curr(_doc); _doc->set_relation(_rel); - _clifor = new TCliForVendite( ); - _condv = new TCond_vendita(_clifor, _config_ditta); + _condv = new TCond_vendita(&doc().clifor(), _config_ditta); _doc->set_condv(_condv); - _msk = new TMask( "ve0100a" ); + _msk = new TMask("ve0100a"); query_mask( ).set_handler( F_CODNUM, num_handler ); - query_mask( ).set_handler( F_TIPODOC, tip_handler ); + _occas_mask = new TMask("ve0100o"); + _occas_mask->set_handler( O_CODICE, occas_code_handler ); TConfig utente( CONFIG_USER ); _codnum = utente.get("CODNUM"); _tipodoc = utente.get("TIPODOC"); -// _msk->set(F_CODNUM, utente.get("CODNUM")); -// _msk->set(F_TIPODOC, utente.get("TIPODOC")); + // La maschera di inserimento/modifica per ora non la so! // Viene letta dal profilo non appena trovato il record diff --git a/ve/ve0100.h b/ve/ve0100.h index b8404eae4..979536c30 100755 --- a/ve/ve0100.h +++ b/ve/ve0100.h @@ -77,10 +77,6 @@ #include "ve0100d.h" #endif -#ifndef __TCLIFOR_H -#include "tclifor.h" -#endif - #ifndef __VARMASK_H #include #endif @@ -110,7 +106,8 @@ class TMotore_application : public TRelation_application TConfig * _config_ditta; // Puntatore alla maschera di ricerca - TMask * _msk; + TMask * _msk; + TMask * _occas_mask; // puntatore alla relazione TRelation * _rel; @@ -119,7 +116,7 @@ class TMotore_application : public TRelation_application TSheet_field * _sheet; // Oggetto cliente per il motore - TCliForVendite * _clifor; +// TCli_for_vendite * _clifor; TCond_vendita * _condv; @@ -190,6 +187,7 @@ protected: static bool ndoc_handler( TMask_field& f, KEY key ); static bool num_handler( TMask_field& f, KEY key ); static bool tip_handler( TMask_field& f, KEY key ); + static bool occas_code_handler(TMask_field& f, KEY key); // Handler per la maschera di modifica static bool clifo_handler( TMask_field& f, KEY key ); @@ -212,7 +210,6 @@ public: TMask & edit_mask() { return (TMask &) _doc_masks[_doc->tipo().codice()]; } TRelation & rel() { CHECK( _rel, "Relazione nulla!" ); return *_rel; } TSheet_field & sheet() { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; } - TCliForVendite & clifo() { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; } TCond_vendita & condv() { return *_condv; } TConfig & config_ditta() {return *_config_ditta; } TLista_elaborazioni & elab() { return _elab; } diff --git a/ve/ve1100.cpp b/ve/ve1100.cpp index 9d9fd0400..d5f45cb95 100755 --- a/ve/ve1100.cpp +++ b/ve/ve1100.cpp @@ -75,8 +75,7 @@ class TDocumento_form : public TForm TTable *_tip; TRelation &_firmrel; // relazione di gestione dei dati della ditta corrente TString _module; // codice del modulo di carta associato a questo al form - TCliFor *_cliente; // oggetto per le informazioni sul cliente - TCond_vendita *_condv; // + TCond_vendita * _condv; TString_array _exclude_array; // array di coppie tipo/articolo da escludere dalla stampa TDocumentoEsteso * _doc; // Documento da stampare int _final_status; // stato finale del documento @@ -173,12 +172,13 @@ TDocumento_form::TDocumento_form(TRectype&/*TDocumentoEsteso**/ doc, TRelation& read(nomeform); - _cliente= new TCliFor; _cli_loaded= FALSE; _is_lista = FALSE; _condv = new TCond_vendita(_cliente); - _doc = new TDocumentoEsteso(doc,_condv); // istanzia TDocumentoEsteso + _condv = new TCond_vendita(NULL); + _doc = new TDocumentoEsteso(doc, _condv); // istanzia TDocumentoEsteso + _condv->set_clifo(&_doc->clifor()); _docfile = new TDocisamfile(_doc); _rdocfile = new TRDocisamfile(_doc); relation()->replace(_docfile,0); @@ -223,7 +223,6 @@ TDocumento_form::TDocumento_form(const char* form, TRelation& rel): TForm(form), _rdocfile=NULL; _tip = new TTable("%TIP"); _tab = new TLocalisamfile(LF_TAB); - _cliente= new TCliFor; _cli_loaded= FALSE; _doc = new TDocumentoEsteso; _docfile = new TDocisamfile(_doc); @@ -232,7 +231,6 @@ TDocumento_form::TDocumento_form(const char* form, TRelation& rel): TForm(form), TDocumento_form::~TDocumento_form() { - delete _cliente; //if (_doc) delete _doc; if (_tip) delete _tip; if (_tab) delete _tab; @@ -656,7 +654,8 @@ bool TDocumento_form::validate(TForm_item &cf, TToken_string &s) { return (TRUE); } // fine _DITTA - if (code== "_CLIENTE") { + if (code== "_CLIENTE") + { // lettura dei dati del cliente // sintassi: _CLIENTE,{|} // dove: è un riferimento alla relazione di gestione dei dati del cliente @@ -678,73 +677,61 @@ bool TDocumento_form::validate(TForm_item &cf, TToken_string &s) { // !TEL2 secondo numero di telefono (con prefisso) // !TEL3 terzo numero di telefono (con prefisso) // !FAX numero di fax (con prefisso) - // nota: la relazione del cliente è così strutturata: - // CLIFO (20) Clienti/fornitori - // + CFVEN (17) Clienti/fornitori per vendite - // + %COMUNI (113@) Comune di residenza - // + %COMUNI (213@) Comune di nascita - TLocalisamfile &doc= (cursor())->file(LF_DOC); - TString16 tipocf= doc.get("TIPOCF"), codcf= doc.get("CODCF"), ocfpi= doc.get("OCFPI"); - if (!_cli_loaded || _is_lista) { // il cliente è sulla testata del documento di vendita, quindi può essere caricato una volta sola per tutte - _cliente->load(tipocf[0], atol(codcf), ocfpi); - _cliente->add(LF_COMUNI, "COM=STATOCF+COMCF", 1, LF_CLIFO, 100+LF_COMUNI); - _cliente->add(LF_COMUNI, "COM=STATONASC+COMNASC", 1, LF_CLIFO, 200+LF_COMUNI); - _cli_loaded= TRUE; - } + TCli_for & cli_for = _doc->clifor(); TString in(s.get()); // prende la macro o il fieldref - if (in[0]=='!') { + if (in[0] != '!') + valore = cli_for.get(s.get()); + else + { in.ltrim(1); - if (in=="RAGSOC") + if (in=="INDNUM") { - valore = _cliente->get(LF_CLIFO, "RAGSOC"); - valore.strip_d_spaces(); - } - if (in=="IND") - valore = _cliente->get(LF_CLIFO, "INDCF"); - if (in=="NUM") - valore = _cliente->get(LF_CLIFO, "CIVCF"); - if (in=="INDNUM") { - valore = _cliente->get(LF_CLIFO, "INDCF"); - valore << " " << _cliente->get(LF_CLIFO,"CIVCF"); - } - if (in=="LOC") - valore = _cliente->get(LF_CLIFO, "LOCALITACF"); - if (in=="CAP") - valore = _cliente->get(LF_CLIFO, "CAPCF"); - if (in=="COM") - valore = _cliente->get(-(100+LF_COMUNI), "DENCOM"); - if (in=="PROV") - valore = _cliente->get(-(100+LF_COMUNI), "PROVCOM"); - if (in=="IVA") - valore = _cliente->get(LF_CLIFO, "PAIV"); - if (in=="CF") - valore = _cliente->get(LF_CLIFO, "COFI"); - if (in=="PERS") - valore = _cliente->get(LF_CLIFO, "TIPOPERS"); - if (in=="DATANAS") - valore = _cliente->get(LF_CLIFO, "DATANASC"); - if (in=="COMNAS") - valore = _cliente->get(-(200+LF_COMUNI), "DENCOM"); - if (in=="TEL") { - valore = _cliente->get(LF_CLIFO, "PTEL"); - valore << "/" << _cliente->get(LF_CLIFO, "TEL"); - } - if (in=="TEL2") { - valore = _cliente->get(LF_CLIFO, "PTEL2"); - valore << "/" << _cliente->get(LF_CLIFO, "TEL2"); - } - if (in=="TEL3") { - valore = _cliente->get(LF_CLIFO, "PTEL3"); - valore << "/" << _cliente->get(LF_CLIFO, "TEL3"); - } - if (in=="FAX") { - valore = _cliente->get(LF_CLIFO, "PFAX"); - valore << "/" << _cliente->get(LF_CLIFO, "FAX"); - } - } else { - TFieldref fref(s.get(), 0); - // l'oggetto cliente è figlio della TRelation, quindi lo passo al fieldref semplicemente con un typecast - valore = fref.read(*_cliente); + valore = cli_for.get(CLI_INDCF); + valore << " " << cli_for.get(CLI_CIVCF); + } + else + if (in.find("COM") == 0) + { + in.ltrim(3); + TLocalisamfile com(LF_COMUNI); + const bool nascita = in[0] == 'N'; + if (nascita) + { + in.ltrim(3); + com.put("STATO", cli_for.get(CLI_STATOCF)); + com.put("COM", cli_for.get(CLI_COMCF)); + } + else + { + in.ltrim(2); + com.put("STATO", cli_for.get(CLI_STATONASC)); + com.put("COM", cli_for.get(CLI_COMNASC)); + } + if (com.read() == NOERR) + valore = com.get(in); + } + else + if (in.find("TEL") == 0) + { + if (in.len() == 3) + in << "1"; + const TString num(cli_for.get(in)); + in.insert("P"); + valore = cli_for.get(in); + valore << "/" << num; + } + else + if (in=="FAX") + { + valore = cli_for.get("PFAX"); + valore << "/" << cli_for.get("FAX"); + } + else + if (in=="RAGSOC") + { + valore = cli_for.get(in); + valore.strip_d_spaces(); + } } cf.put_paragraph(valore); return (TRUE); diff --git a/ve/ve6300.cpp b/ve/ve6300.cpp index e925bb448..f59bbc6fc 100755 --- a/ve/ve6300.cpp +++ b/ve/ve6300.cpp @@ -74,7 +74,7 @@ class TGenerazioneEffetti_app : public TApplication TTable *_cpg; // tabella condizioni di pagamento TDocumento *_doc; // documento corrente TCond_vendita *_condv; // Condizioni di vendita - TCliFor *_clifor; // Cliente +// TCliFor *_clifor; // Cliente TPagamento *_pagamento; // pagamento corrente, ricalcolato prima di scrivere le scadenze TBit_array _valid_array; // array dei tipi di pagamento validi per la generazione di effetti TArray_sheet *_num_sheet; // Array sheet selezionabile dei codici numerazione @@ -280,9 +280,11 @@ bool TGenerazioneEffetti_app::create() _efffile = new TLocalisamfile(LF_EFFETTI); _refffile = new TLocalisamfile(LF_REFFETTI); _cessfile = new TLocalisamfile(LF_CESS); - _clifor = new TCliFor(); - _condv = new TCond_vendita(_clifor); - _doc = new TDocumento(); +// _clifor = new TCliFor(); +// _condv = new TCond_vendita(_clifor); + _condv = new TCond_vendita(NULL); + _doc = new TDocumento(); + _condv->set_clifo(&_doc->clifor()); _doc->set_condv(_condv); _cpg = new TTable("%CPG"); _tab = new TLocalisamfile(LF_TAB); diff --git a/ve/velib.h b/ve/velib.h index e9ee55375..717d88d23 100755 --- a/ve/velib.h +++ b/ve/velib.h @@ -1,7 +1,6 @@ #ifndef __VELIB_H #define __VELIB_H - #ifndef __RELATION_H #include #endif @@ -18,14 +17,18 @@ #include #endif +#ifndef __MULTIREC_H +#include +#endif + +#ifndef __CLIFOR_H +#include "clifor.h" +#endif + #ifndef __PAGAMENT_H #include "../cg/pagament.h" #endif -#ifndef __TCLIFOR_H -#include "tclifor.h" -#endif - #define RIGA_MERCE 'M' #define RIGA_SPESEDOC 'S' #define RIGA_PRESTAZIONI 'P' @@ -343,7 +346,10 @@ public: enum TTipo_importo { _lordo, _netto, _imposta }; class TDocumento : public TAuto_variable_rectype // velib03 -{ +{ + TRecfield *_tipocf; + TRecfield *_codcf; + TRecfield *_cod_occas; static TAssoc_array _tipi; TRecord_array _rows; // Array di TRectype per le righe documenti di vendita. @@ -351,7 +357,9 @@ class TDocumento : public TAuto_variable_rectype // velib03 TRelation * _rel; TCond_vendita * _condv; - TPagamento _pag; + TCli_for _cli_for; + TOccasionale _occas; + TPagamento _pag; TRiga_documento * _sconto; // Riga per lo sconto di testata TRiga_documento * _esenzione; // Riga per l' esenzione iva @@ -362,6 +370,7 @@ protected: long renum(long numdoc = 0); void set_riga_sconto(); void set_riga_esenzione(); + int write_rewrite(TBaseisamfile & f, bool re) const; public: void dirty_fields(); @@ -369,6 +378,8 @@ public: TAuto_variable_rectype& head() { return *this; } // Ritorna la testata del documento TCond_vendita & condv() const {CHECK(_condv, "Condizioni di vendita nulle"); return *_condv;} + TCli_for & clifor() const; + TOccasionale & occas() const; TRelation & get_relation() const {CHECK(_rel, "Relazione nulla"); return *_rel;} void set_condv(TCond_vendita * condv) { _condv = condv; } void set_relation(TRelation * rel) { _rel = rel; } @@ -388,13 +399,18 @@ public: TRiga_documento& new_row(const char *tipo = NULL); bool destroy_row(int n, bool pack = FALSE) { return _rows.destroy_row(n, pack); } void destroy_rows() { _rows.destroy_rows(); } + virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock); + virtual int write(TBaseisamfile& f) const { return write_rewrite(f, FALSE); } + virtual int rewrite(TBaseisamfile& f) const { return write_rewrite(f, TRUE); } + virtual int remove(TBaseisamfile& f) const; + + int read(char provv, int anno, const char* codnum, long numdoc, word op = _isequal, word lockop = _nolock); + int read(const TRectype& rec, word op = _isequal, word lockop = _nolock) { *this = rec; return read(op, lockop); } + int read(word op = _isequal, word lockop = _nolock) { TLocalisamfile f(LF_DOC); return read(f, op, lockop);} - int read(char provv, int anno, const char* codnum, long numdoc); - int read(const TRectype& rec); - - int write(bool re = FALSE) const; + int write(bool re = FALSE) const { TLocalisamfile f(LF_DOC); return write_rewrite(f, re);} int rewrite() const { return write(TRUE); } - int remove() const; + int remove() const { TLocalisamfile f(LF_DOC); return remove(f);} char tipo_numerazione() const { return get_char("PROVV"); } int anno() const { return get_int("ANNO"); } @@ -413,7 +429,10 @@ public: bool raggruppabile() const { return get_bool("RAGGR"); } bool raggruppabile(const TDocumento& doc, TToken_string& campi) const; - + + char tipocf() const {return *(const char *) (*_tipocf);} + long codcf() const {return (long) *_codcf;} + const char * cod_occas() const { return (const char *) *_cod_occas; } static void set_key(TRectype& rec, char provv, int anno, const char* codnum, long numdoc); static void copy_data(TRectype& dst, const TRectype& src); void copy_contents(const TDocumento & src); @@ -451,7 +470,7 @@ public: virtual ~TDocumento(); }; -class TDocumento_mask : public TVariable_mask // velib03 +class TDocumento_mask : public TVariable_mask // velib06 { int _progs_page; // pagina in cui cominciano i progressivi int _last_prog; // numero dell'ultimo progressivo @@ -459,13 +478,17 @@ class TDocumento_mask : public TVariable_mask // velib03 protected: virtual void next_page(int p); + void sconto_testa2mask( TCli_for & c, TConfig & ditta ); + void spese2mask(TCli_for & c); public: virtual bool on_key(KEY key); TDocumento & doc() const {CHECK(_doc, "Documento nullo"); return *_doc;} TCond_vendita & condv() const {CHECK(_doc, "Documento nullo"); return _doc->condv();} TRelation & get_relation() const {CHECK(_doc, "Documento nullo"); return _doc->get_relation();} - + void cli2mask( TCli_for & c, TOccasionale & o, TConfig & ditta); + void occ2mask(TOccasionale & o); + TDocumento_mask(const char* name, TDocumento * _doc, int num = 0, int max = MAX_PAGES); virtual ~TDocumento_mask() { } }; @@ -817,7 +840,7 @@ public: // Funzioni per settare i parametri void set_decimals(dec_parm & parm) { _parm = parm ; } - void set_condv(TCliFor * cli); // Cambia le condizioni di vendita + void set_condv(TCli_for * cli); // Cambia le condizioni di vendita TDocumentoEsteso (const TRectype & rec, dec_parm & parm, TCond_vendita * condv = NULL) ; TDocumentoEsteso (const TRectype & rec, TCond_vendita * condv = NULL) ; TDocumentoEsteso () ; diff --git a/ve/velib01.cpp b/ve/velib01.cpp index c8bccc3b5..0c4d35a2a 100755 --- a/ve/velib01.cpp +++ b/ve/velib01.cpp @@ -224,7 +224,7 @@ bool iva_handler( TMask_field& f, KEY key ) if (key == 0 || (key == K_ENTER && f.get().empty())) { TDocumento_mask & mask = (TDocumento_mask &) f.mask().get_sheet()->mask(); - const TString16 codiva = mask.condv().clifo().get(LF_CFVEN, "ASSFIS"); + const TString16 codiva = mask.condv().clifo().vendite().get(CFV_ASSFIS); if (codiva.not_empty()) f.set(codiva); diff --git a/ve/velib03.cpp b/ve/velib03.cpp index c1adbefbc..0f8953ed1 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -140,50 +140,6 @@ TFormula_documento * TTipo_documento::succ_formula(bool restart) return NULL; } -TDocumento_mask::TDocumento_mask(const char* name, TDocumento * doc, int num, - int max) - : TVariable_mask(name, num, max), _progs_page(-1), _last_prog(-1), - _doc(doc) -{ - const int pos = id2pos(BASE_PIEDE + 1); - - if (pos >= 0) - { - _progs_page = find_parent_page(fld(pos)); - _last_prog = 0; - while (id2pos(BASE_PIEDE + _last_prog + 1) >= 0) - _last_prog++; - } -} - -void TDocumento_mask::next_page(int p) -{ - TMask::next_page(p); - if (curr_page() == _progs_page) - { - begin_wait(); - autosave(get_relation()); - for (int i = _last_prog; i > 0; i--) - { - const short id = BASE_PIEDE + i; - const TString16 name(field(id).field()->name()); - - set(id , doc().get(name)); - } - end_wait(); - } -} - -bool TDocumento_mask::on_key(KEY key) -{ - if (key == K_SHIFT + K_F12) - { - field(F_STATO).enable(!field(F_STATO).enabled()); - return TRUE; - } - return TVariable_mask::on_key(key); -} - /////////////////////////////////////////////////////////// // Documento per vendite /////////////////////////////////////////////////////////// @@ -194,6 +150,9 @@ TDocumento::TDocumento() : TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(TRUE), _condv(NULL), _rel(NULL), _sconto(NULL), _esenzione(NULL) { + _tipocf = new TRecfield(*this, "TIPOCF"); + _codcf = new TRecfield(*this, "CODCF"); + _cod_occas = new TRecfield(*this, "OCFPI"); set_memo_fld("G1"); } @@ -202,6 +161,9 @@ TDocumento::TDocumento(char provv, int anno, const char* codnum, long numdoc, : TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(TRUE), _condv(condv), _rel(rel), _sconto(NULL), _esenzione(NULL) { + _tipocf = new TRecfield(*this, "TIPOCF"); + _codcf = new TRecfield(*this, "CODCF"); + _cod_occas = new TRecfield(*this, "OCFPI"); set_memo_fld("G1"); if (numdoc <= 0) { @@ -220,6 +182,9 @@ TDocumento::TDocumento(const TRectype& rec, TCond_vendita * condv, TRelation * r : TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(FALSE), _condv(condv), _rel(rel), _sconto(NULL), _esenzione(NULL) { + _tipocf = new TRecfield(*this, "TIPOCF"); + _codcf = new TRecfield(*this, "CODCF"); + _cod_occas = new TRecfield(*this, "OCFPI"); set_memo_fld("G1"); read(rec); } @@ -227,6 +192,9 @@ TDocumento::TDocumento(const TRectype& rec, TCond_vendita * condv, TRelation * r TDocumento::~TDocumento() { + delete _tipocf; + delete _codcf; + delete _cod_occas; if (_sconto != NULL) delete _sconto; if (_esenzione != NULL) delete _esenzione; } @@ -480,43 +448,45 @@ TRiga_documento& TDocumento::new_row(const char *tipo) return r; } -int TDocumento::read(const TRectype& rec) +int TDocumento::read(TBaseisamfile& f, word op, word lockop) { - head() = rec; TRiga_documento* key = new TRiga_documento(this); + TRectype rec(*this); const char pr = tipo_numerazione(); const int an = anno(); const TString16 cn = numerazione(); const long nu = numero(); + CHECK(nu > 0, "Numero documento nullo."); set_key(*key, pr, an, cn, nu); - - TLocalisamfile doc(LF_DOC); - int err = TRectype::read(doc); - if (err == NOERR) - { - _nuovo = FALSE; - _rows.read(key); //ok - } - else + + int err = TRectype::read(f); + _cli_for.zero(); + _occas.zero(); + + if (err != NOERR && op == _isequal) { _nuovo = TRUE; head() = rec; destroy_rows(); _rows.set_key(key); // ok } + else + { + _nuovo = FALSE; + _rows.read(key); //ok + } set_riga_sconto(); if (is_fattura()) set_riga_esenzione(); return err; } -int TDocumento::read(char provv, int anno, const char* codnum, long numdoc) +int TDocumento::read(char provv, int anno, const char* codnum, long numdoc, word op, word lockop) { - TRectype rec(LF_DOC); CHECK(numdoc > 0, "Numero documento nullo."); - set_key(rec, provv, anno, codnum, numdoc); - return read(rec); + set_key(*this, provv, anno, codnum, numdoc); + return read(op, lockop); } long TDocumento::renum(long numdoc) @@ -564,17 +534,17 @@ void TDocumento::set_riga_sconto() void TDocumento::set_riga_esenzione() { - TCliFor & c = condv().clifo(); - const char tipo = get_char("TIPOCF"); - const long cod = get_long("CODCF"); - const TString80 occ(get("OCFPI")); - c.load(tipo, cod, occ); - const TIVA codes(c.get(LF_CFVEN, CLI_ASSFIS)); - const TString16 v_esenzione(c.get(LF_CFVEN, CLI_VSPROT)); - const TString16 v_data_esenzione(c.get(LF_CFVEN, CLI_VSDATAREG)); + TCli_for & c = clifor(); +// const char tipo = get_char("TIPOCF"); +// const long cod = get_long("CODCF"); +// const TString80 occ(get("OCFPI")); +// c.load(tipo, cod, occ); + const TIVA codes(c.vendite().get(CFV_ASSFIS)); + const TString16 v_esenzione(c.vendite().get(CFV_VSPROT)); + const TString16 v_data_esenzione(c.vendite().get(CFV_VSDATAREG)); // const TString16 ufficio_IVA; ?? - const TString16 n_registrazione(c.get(LF_CFVEN, CLI_NSPROT)); - const TString16 n_data_registrazione(c.get(LF_CFVEN, CLI_NSDATAREG)); + const TString16 n_registrazione(c.vendite().get(CFV_NSPROT)); + const TString16 n_data_registrazione(c.vendite().get(CFV_NSDATAREG)); bool esente = codes.tipo().not_empty() && v_esenzione.not_empty() && v_data_esenzione.not_empty() && n_registrazione.not_empty() && n_data_registrazione.not_empty(); @@ -634,22 +604,24 @@ void TDocumento::dirty_fields() } } -int TDocumento::write(bool re) const +int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const { const bool nuovo = _nuovo || numero() <= 0; // E' nuovo di zecca! if (nuovo && re) // quindi ... re = FALSE; // ... non fare la rewrite - TLocalisamfile doc(LF_DOC); int err = NOERR; + const TString80 occ_code(occas().get(OCC_CFPI)); + + ((TDocumento *)this)->put("OCFPI", occ_code); if (re) { err = _rows.write(re); if (err == NOERR) { - err = TRectype::rewrite(doc); + err = TRectype::rewrite(f); if (err != NOERR) - err = TRectype::write(doc); + err = TRectype::write(f); } } else @@ -661,7 +633,7 @@ int TDocumento::write(bool re) const myself.renum(); do { - err = TRectype::write(doc); + err = TRectype::write(f); if (err == _isreinsert) myself.renum(); } while (err == _isreinsert); @@ -669,23 +641,30 @@ int TDocumento::write(bool re) const } else { - err = TRectype::write(doc); + err = TRectype::write(f); if (err != NOERR) - err = TRectype::rewrite(doc); + err = TRectype::rewrite(f); } if (err == NOERR) err = _rows.write(re); + } + + if (err == NOERR && clifor().occasionale() && occ_code.not_empty()) + { + TLocalisamfile o(LF_OCCAS); + err = _occas.write(o); + if (err == _isreinsert) + err = _occas.rewrite(o); } return err; } -int TDocumento::remove() const +int TDocumento::remove(TBaseisamfile& f) const { - TLocalisamfile doc(LF_DOC); int err = _rows.remove(); if (err == NOERR) - err = TRectype::remove(doc); + err = TRectype::remove(f); return err; } @@ -946,7 +925,7 @@ void TDocumento::put_str(const char* fieldname, const char* val) reset_fields(*this); set_fields(*this); } - else + else { TAuto_variable_rectype::put_str(fieldname, v); dirty_fields(); @@ -970,6 +949,34 @@ void TDocumento::zero(char c) destroy_rows(); } +TCli_for & TDocumento::clifor() const +{ + const char tipo = tipocf(); + const long codice = codcf(); + if (_cli_for.empty() || _cli_for.tipo() != tipo || _cli_for.codice() != codice) + ((TDocumento *) this)->_cli_for.read(tipo, codice); + return (TCli_for &)_cli_for; +} + +TOccasionale & TDocumento::occas() const +{ + const TString80 occ_code(cod_occas()); + + if (_occas.empty() || strcmp(_occas.codice(), occ_code) != 0) + { + TLocalisamfile o(LF_OCCAS); + + ((TDocumento *) this)->_occas.zero(); + ((TDocumento *) this)->_occas.put(OCC_CFPI, occ_code); + + TRectype oc(_occas); + + if (((TDocumento *) this)->_occas.read(o) != NOERR) + ((TDocumento *) this)->_occas = oc; + } + return (TOccasionale &) _occas; +} + TDocumento & TDocumento::operator =(const TDocumento & d) { zero(); diff --git a/ve/velib06.h b/ve/velib06.h deleted file mode 100755 index 91e27b27a..000000000 --- a/ve/velib06.h +++ /dev/null @@ -1,50 +0,0 @@ -#include "..\ve\sconti.h" - -class TCondizione_vendita : public TObject -{ - TString80 _sconto; - TString16 _codiva; - bool _ivarid; - real _prezzo; - real _provv; - real _molt_sconto; - TCliFor * _clifo; - TLocalisamfile _condv; - TLocalisamfile _rcondv; - TLocalisamfile _sconti; - TLocalisamfile * _anamag; // file passato e posizionato esternamente - TLocalisamfile * _umart; // file passato e posizionato esternamente - TConfig * _config_ditta; - bool _load_mask; - - bool cerca(int tiporicerca,const char * cod, const real & qta); - -protected: - - TRectype & testa() const { return (_condv.curr()); } - TRectype & riga() const { return (_rcondv.curr()); } - TLocalisamfile & anamag() const { CHECK(_anamag, "Anagrafica di magazzino non inizializzata") ; return *_anamag; } - TLocalisamfile & umart() const { CHECK(_umart, "Anagrafica di unita' di misura magazzino non inizializzata") ; return *_umart; } - -public: - real get_prezzo() const { return _prezzo; } - - TConfig &config_ditta() const { return *_config_ditta; } - void set_config( TConfig & ditta){ _config_ditta = &ditta; } - void set_anamag(TLocalisamfile & anamag) { _anamag = &anamag; } - void set_umart(TLocalisamfile & umart) { _umart = &umart; } - - bool gestum() const { return _condv.get_bool("GESTUM"); } - - // prepara la ricerca - void put_condv(const char *tipocv,const char * codcv,const char *catven,const char *tipocf,const char *codcf); - void put_listino(const char * codlist,const char *catven); - void put_contratto(const char * codcontr,const char *tipocf,const char *codcf); - void put_offerta(const char * codoff); - // ricerca il codice - bool ricerca(const char * cod,const real & qta=0) ; - - TCondizione_vendita(TConfig * _ditta = NULL, TLocalisamfile * anamag = NULL, TLocalisamfile * umart = NULL); - ~TCondizione_vendita() {} -}; -