Gestione lettere di esenzione
Ristrutturato oggetto cliente !!!!!! Errori vari da Pg e Roberto git-svn-id: svn://10.65.10.50/trunk@4637 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f8f4b4a93e
commit
a1a4d6f19b
@ -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
|
||||
|
||||
|
413
ve/clifor.cpp
Executable file
413
ve/clifor.cpp
Executable file
@ -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();
|
||||
}
|
||||
*/
|
81
ve/clifor.h
Executable file
81
ve/clifor.h
Executable file
@ -0,0 +1,81 @@
|
||||
#ifndef __CLIFOR_H
|
||||
#define __CLIFOR_H
|
||||
|
||||
#ifndef __MULTIREC_H
|
||||
#include <multirec.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MASK_H
|
||||
#include <mask.h>
|
||||
#endif
|
||||
|
||||
#ifndef __LFFILES_H
|
||||
#include <lffiles.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CLIFO_H
|
||||
#include <clifo.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CFVEN_H
|
||||
#include <cfven.h>
|
||||
#endif
|
||||
|
||||
#ifndef __INDSP_H
|
||||
#include <indsp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __OCCAS_H
|
||||
#include <occas.h>
|
||||
#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
|
@ -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 ),
|
||||
|
11
ve/sconti.h
11
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() {}
|
||||
};
|
||||
|
374
ve/tclifor.cpp
374
ve/tclifor.cpp
@ -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 <tabutil.h>
|
||||
#endif
|
||||
|
||||
#ifndef __VEINI_H
|
||||
#include "veini.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VELIB_H
|
||||
#include <velib.h>
|
||||
#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();
|
||||
}
|
64
ve/tclifor.h
64
ve/tclifor.h
@ -1,64 +0,0 @@
|
||||
#ifndef __TCLIFOR_H
|
||||
#define __TCLIFOR_H
|
||||
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
#ifndef __VARMASK_H
|
||||
#include <varmask.h>
|
||||
#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
|
173
ve/ve0100.cpp
173
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
|
||||
|
||||
|
11
ve/ve0100.h
11
ve/ve0100.h
@ -77,10 +77,6 @@
|
||||
#include "ve0100d.h"
|
||||
#endif
|
||||
|
||||
#ifndef __TCLIFOR_H
|
||||
#include "tclifor.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VARMASK_H
|
||||
#include <varmask.h>
|
||||
#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; }
|
||||
|
129
ve/ve1100.cpp
129
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,{<campo relazione>|<macro>}
|
||||
// dove: <campo relazione> è 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);
|
||||
|
@ -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);
|
||||
|
55
ve/velib.h
55
ve/velib.h
@ -1,7 +1,6 @@
|
||||
#ifndef __VELIB_H
|
||||
#define __VELIB_H
|
||||
|
||||
|
||||
#ifndef __RELATION_H
|
||||
#include <relation.h>
|
||||
#endif
|
||||
@ -18,14 +17,18 @@
|
||||
#include <varmask.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MULTIREC_H
|
||||
#include <multirec.h>
|
||||
#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 () ;
|
||||
|
@ -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);
|
||||
|
167
ve/velib03.cpp
167
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();
|
||||
|
50
ve/velib06.h
50
ve/velib06.h
@ -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() {}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user