1998-11-04 18:04:26 +00:00
|
|
|
#include <config.h>
|
|
|
|
#include <tabutil.h>
|
|
|
|
|
1995-12-04 17:41:06 +00:00
|
|
|
#include "sconti.h"
|
|
|
|
|
|
|
|
#ifndef __VEUML_H
|
|
|
|
#include "veuml.h"
|
|
|
|
#endif
|
|
|
|
|
1996-05-03 17:11:39 +00:00
|
|
|
#ifndef __VERIG_H
|
|
|
|
#include "verig.h"
|
1995-12-04 17:41:06 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef __VECONF_H
|
|
|
|
#include "veconf.h"
|
|
|
|
#endif
|
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
#ifndef __TABUTIL_H
|
|
|
|
#include <tabutil.h>
|
1998-11-04 18:04:26 +00:00
|
|
|
#endif
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1997-10-29 11:08:40 +00:00
|
|
|
#ifndef __ANAMAG_H
|
|
|
|
#include "../mg/anamag.h"
|
|
|
|
#endif
|
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
#ifndef __VEINI_H
|
|
|
|
#include "veini.h"
|
|
|
|
#endif
|
1997-10-23 10:55:09 +00:00
|
|
|
|
2002-02-26 16:20:19 +00:00
|
|
|
#ifndef __VELIB_H
|
|
|
|
#include "velib.h"
|
|
|
|
#endif
|
|
|
|
|
1997-10-29 11:08:40 +00:00
|
|
|
#ifndef __AGE_H
|
|
|
|
#include "../pr/agenti.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef __PER_H
|
|
|
|
#include "../pr/percprov.h"
|
|
|
|
#endif
|
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
bool TCond_vendita::set_sconto( const char * exp, bool signal )
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
1997-10-23 10:55:09 +00:00
|
|
|
bool valid= scontoexpr2perc(exp,signal,_sconto,_molt_sconto );
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
if (_load_mask && _riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active())
|
1996-08-12 08:32:28 +00:00
|
|
|
_riga->set(FR_SCONTO, _sconto);
|
|
|
|
return valid;
|
|
|
|
}
|
|
|
|
|
1997-07-29 09:53:35 +00:00
|
|
|
real TCond_vendita::normalize_valuta(const real & val, const char * val_rif)
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
if (val == ZERO)
|
|
|
|
return ZERO;
|
2002-02-26 16:20:19 +00:00
|
|
|
// const TString16 firm_val(TCurrency::get_firm_val());
|
2000-05-05 15:25:49 +00:00
|
|
|
TString16 valuta_rif(val_rif);
|
2002-02-26 16:20:19 +00:00
|
|
|
if (is_firm_value(valuta_rif))
|
2000-05-05 15:25:49 +00:00
|
|
|
valuta_rif.cut(0);
|
|
|
|
TString16 valuta(_testa->get(F_CODVAL));
|
2002-02-26 16:20:19 +00:00
|
|
|
if (is_firm_value(valuta))
|
2000-05-05 15:25:49 +00:00
|
|
|
valuta.cut(0);
|
|
|
|
if (valuta == valuta_rif)
|
|
|
|
return val;
|
|
|
|
|
|
|
|
const real cambio = _condv.get_real("CAMBIO");
|
|
|
|
const exchange_type controeuro = _condv.get_bool("CONTROEURO") ? _exchange_contro : _exchange_base;
|
|
|
|
TPrice normalized(val, valuta_rif, cambio, controeuro);
|
|
|
|
const real cambio_dest = _testa->get_real(F_CAMBIO);
|
|
|
|
const exchange_type controeuro_dest = _testa->get_bool(F_CONTROEURO) ? _exchange_contro : _exchange_base;
|
|
|
|
|
|
|
|
normalized.change_value(valuta, cambio_dest, controeuro_dest);
|
|
|
|
|
|
|
|
return normalized.get_num();
|
1997-07-29 09:53:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void TCond_vendita::set_prezzo(const real & prezzo, const char * val_rif)
|
|
|
|
|
|
|
|
{
|
|
|
|
_prezzo = normalize_valuta(prezzo, val_rif);
|
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
if (_load_mask && _riga && _riga->id2pos(FR_PREZZO) >= 0) // && _riga->field(FR_PREZZO).active())
|
1996-08-12 08:32:28 +00:00
|
|
|
_riga->set(FR_PREZZO, _prezzo);
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
void TCond_vendita::set_provv(const real & provv)
|
|
|
|
|
|
|
|
{
|
|
|
|
_provv = provv;
|
1996-09-26 15:37:19 +00:00
|
|
|
if (_load_mask && _riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
|
1996-08-12 08:32:28 +00:00
|
|
|
_riga->set(FR_PERCPROV, _provv);
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
void TCond_vendita::set_iva(const TString & codiva)
|
|
|
|
|
|
|
|
{
|
|
|
|
_codiva = codiva;
|
1996-09-26 15:37:19 +00:00
|
|
|
if (_load_mask && _riga && _riga->id2pos(FR_CODIVA) >= 0 && _riga->field(FR_CODIVA).active())
|
1996-08-12 08:32:28 +00:00
|
|
|
_riga->set(FR_CODIVA, _codiva);
|
|
|
|
}
|
1995-12-04 17:41:06 +00:00
|
|
|
|
1996-07-25 13:05:29 +00:00
|
|
|
bool TCond_vendita::cerca( int tiporicerca )
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
TConfig config_ditta(CONFIG_DITTA, "ve");
|
|
|
|
if( config_ditta.get_bool( "GES", "ve", tiporicerca ) )
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
1996-06-18 15:55:39 +00:00
|
|
|
// Se h attiva la gestione contratti ...
|
1995-12-04 17:41:06 +00:00
|
|
|
_condv.setkey( 1 );
|
|
|
|
_condv.zero( );
|
|
|
|
switch( tiporicerca )
|
|
|
|
{
|
1996-08-12 08:32:28 +00:00
|
|
|
case A_CONTRATTI:
|
|
|
|
{
|
|
|
|
const TString16 codcont(testa().get(F_CODCONT));
|
|
|
|
|
|
|
|
if (codcont.empty())
|
|
|
|
return FALSE;
|
|
|
|
_condv.put("TIPO", "C");
|
1998-08-25 18:07:30 +00:00
|
|
|
if(config_ditta.get_bool("GESCONCC", "ve"))
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
1997-06-12 16:26:22 +00:00
|
|
|
_condv.put("TIPOCF", clifo().tipo());
|
|
|
|
_condv.put("CODCF", clifo().codice());
|
1996-08-12 08:32:28 +00:00
|
|
|
}
|
|
|
|
_condv.put("COD", codcont);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case A_LISTINI:
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
1996-08-12 08:32:28 +00:00
|
|
|
const TString16 codlist(testa().get(F_CODLIST));
|
|
|
|
|
|
|
|
if (codlist.empty())
|
|
|
|
return FALSE;
|
|
|
|
_condv.put("TIPO", "L");
|
|
|
|
// Se in ditta h abilitata la gestione della categoria di vendita in chiave
|
|
|
|
// al listino, la carico con gioia
|
1998-08-25 18:07:30 +00:00
|
|
|
if( config_ditta.get_bool("GESLISCV", "ve"))
|
1996-08-12 08:32:28 +00:00
|
|
|
_condv.put("CATVEN", testa().get(F_CATVEN));
|
|
|
|
_condv.put("COD", codlist);
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case A_OFFERTE:
|
1996-08-12 08:32:28 +00:00
|
|
|
{
|
|
|
|
const TString16 codcamp(testa().get(F_CODCAMP));
|
|
|
|
|
|
|
|
if (codcamp.empty())
|
|
|
|
return FALSE;
|
|
|
|
_condv.put("TIPO", "O");
|
|
|
|
_condv.put("COD", codcamp);
|
|
|
|
}
|
1995-12-04 17:41:06 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
if( _condv.read( ) == NOERR )
|
|
|
|
{
|
1996-09-26 15:37:19 +00:00
|
|
|
// _rcondv.setkey( 2 );
|
1996-08-12 08:32:28 +00:00
|
|
|
|
|
|
|
const bool gest_scagl = _condv.get_bool("GESTSCAGL");
|
1995-12-04 17:41:06 +00:00
|
|
|
const TString16 seqricrighe( _condv.get( "SEQRIC" ) );
|
1996-08-12 08:32:28 +00:00
|
|
|
bool found = FALSE;
|
|
|
|
|
1996-07-25 13:05:29 +00:00
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
for( int i = 0; !found && i < seqricrighe.len( ); i ++ )
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
1996-09-26 15:37:19 +00:00
|
|
|
_rcondv.zero( );
|
|
|
|
_rcondv.put( "TIPO", _condv.get( "TIPO"));
|
|
|
|
_rcondv.put( "CATVEN", _condv.get( "CATVEN"));
|
|
|
|
_rcondv.put( "TIPOCF", _condv.get( "TIPOCF"));
|
|
|
|
_rcondv.put( "CODCF", _condv.get( "CODCF"));
|
|
|
|
_rcondv.put("COD", _condv.get("COD"));
|
|
|
|
if( _condv.get_bool( "GESTUM" ) )
|
|
|
|
_rcondv.put( "UM", riga().get(FR_UMQTA));
|
|
|
|
if (gest_scagl)
|
|
|
|
_rcondv.put("NSCAGL", 1);
|
1995-12-04 17:41:06 +00:00
|
|
|
|
|
|
|
char ricerca = seqricrighe[ i ];
|
|
|
|
_rcondv.put( "TIPORIGA", ricerca );
|
|
|
|
switch( ricerca )
|
|
|
|
{
|
1996-08-12 08:32:28 +00:00
|
|
|
case 'A':
|
1996-07-25 13:05:29 +00:00
|
|
|
{
|
1997-06-27 09:21:13 +00:00
|
|
|
const TString codriga = riga().get(FR_CODARTMAG);
|
1996-08-12 08:32:28 +00:00
|
|
|
|
|
|
|
_rcondv.put( "CODRIGA", codriga);
|
|
|
|
if (_rcondv.read() != NOERR &&
|
|
|
|
_rcondv.prev() == NOERR &&
|
|
|
|
_rcondv.get("TIPORIGA")[0] == 'A')
|
|
|
|
{
|
|
|
|
const TString cod_found(_rcondv.get("CODRIGA"));
|
|
|
|
|
|
|
|
return cod_found.compare(codriga, cod_found.len()) == 0;
|
|
|
|
}
|
1996-07-25 13:05:29 +00:00
|
|
|
}
|
1995-12-04 17:41:06 +00:00
|
|
|
break;
|
|
|
|
case 'R':
|
1998-08-25 18:07:30 +00:00
|
|
|
_rcondv.put("CODRIGA", _anamag.get( "RAGGFIS"));
|
1996-08-12 08:32:28 +00:00
|
|
|
_rcondv.read();
|
1995-12-04 17:41:06 +00:00
|
|
|
break;
|
1996-09-26 15:37:19 +00:00
|
|
|
case 'S':
|
1996-07-25 13:05:29 +00:00
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
_rcondv.put( "CODRIGA", _anamag.get("GRMERC"));
|
1996-08-14 16:51:18 +00:00
|
|
|
_rcondv.read( );
|
1996-08-12 08:32:28 +00:00
|
|
|
}
|
|
|
|
break;
|
1996-09-26 15:37:19 +00:00
|
|
|
case 'G':
|
1996-08-12 08:32:28 +00:00
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
_rcondv.put( "CODRIGA", _anamag.get("GRMERC").left(3));
|
1996-08-14 16:51:18 +00:00
|
|
|
_rcondv.read( );
|
1996-07-25 13:05:29 +00:00
|
|
|
}
|
1995-12-04 17:41:06 +00:00
|
|
|
break;
|
|
|
|
default:
|
1996-07-25 13:05:29 +00:00
|
|
|
break;
|
1996-08-12 08:32:28 +00:00
|
|
|
}
|
|
|
|
found = _rcondv.good();
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
1996-08-12 08:32:28 +00:00
|
|
|
if (found && gest_scagl)
|
|
|
|
{
|
|
|
|
TRectype rec(_rcondv.curr());
|
|
|
|
int last_scagl = 0;
|
|
|
|
int scagl = _rcondv.get_int("NSCAGL");
|
|
|
|
const real qta(_riga->get_real(FR_QTA));
|
|
|
|
real qta_lim(_rcondv.get_real("QLIM"));
|
|
|
|
|
|
|
|
while (_rcondv.good() && scagl > last_scagl && qta_lim > ZERO && qta > qta_lim)
|
|
|
|
{
|
|
|
|
if (_rcondv.next() == NOERR)
|
|
|
|
{
|
|
|
|
last_scagl = scagl;
|
|
|
|
scagl = _rcondv.get_int("NSCAGL");
|
|
|
|
qta_lim =_rcondv.get_real("QLIM");
|
|
|
|
rec = _rcondv.curr();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_rcondv.read(rec);
|
|
|
|
}
|
|
|
|
|
|
|
|
return found;
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
|
|
|
}
|
1996-07-25 13:05:29 +00:00
|
|
|
// Ricerca fallita
|
|
|
|
return FALSE;
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
1997-10-29 11:08:40 +00:00
|
|
|
|
|
|
|
real TCond_vendita::get_percprovv(char tipoprovv, const TString & codpr, TLocalisamfile & age) const
|
|
|
|
{
|
|
|
|
real val = ZERO;
|
|
|
|
|
|
|
|
switch (tipoprovv)
|
|
|
|
{
|
|
|
|
case 'A':
|
|
|
|
val = age.get_real(AGE_PERCPROVV);
|
|
|
|
break;
|
|
|
|
case 'M':
|
1998-08-25 18:07:30 +00:00
|
|
|
val = _anamag.get_real(ANAMAG_PERCPROVV);
|
1997-10-29 11:08:40 +00:00
|
|
|
break;
|
|
|
|
case 'C':
|
|
|
|
val = clifo().vendite().get_real(CFV_PERCPROVV);
|
|
|
|
break;
|
|
|
|
case 'V':
|
|
|
|
{
|
|
|
|
TString16 catven(testa().get(F_CATVEN));
|
|
|
|
|
|
|
|
if (catven.not_empty())
|
|
|
|
{
|
|
|
|
TTable cve("CVE");
|
|
|
|
|
|
|
|
cve.put("CODTAB", catven);
|
|
|
|
if (cve.read() == NOERR)
|
|
|
|
val = cve.get_real("R0");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'O':
|
|
|
|
val = _rcondv.get_real("PERCPROVV");
|
|
|
|
break;
|
|
|
|
case '1':
|
|
|
|
case '2':
|
|
|
|
case '3':
|
|
|
|
case '4':
|
|
|
|
{
|
|
|
|
TTable apr("APR");
|
|
|
|
TString16 ord;
|
|
|
|
|
|
|
|
apr.put("CODTAB",codpr);
|
|
|
|
if (apr.read() == NOERR)
|
|
|
|
ord = apr.get("S3");
|
|
|
|
|
|
|
|
int len = ord.len();
|
|
|
|
TString key;
|
|
|
|
TString80 campo;
|
|
|
|
|
|
|
|
for (int i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
switch (ord[i])
|
|
|
|
{
|
|
|
|
case 'C':
|
|
|
|
campo = clifo().get(CLI_CODCF);
|
|
|
|
campo.lpad(clifo().length(CLI_CODCF));
|
|
|
|
break;
|
|
|
|
case 'V':
|
|
|
|
campo = testa().get(F_CATVEN);
|
|
|
|
campo.rpad(testa().field(F_CATVEN).size());
|
|
|
|
break;
|
|
|
|
case 'A':
|
|
|
|
campo = testa().get(F_CODAG);
|
|
|
|
campo.rpad(testa().field(F_CODAG).size());
|
|
|
|
break;
|
|
|
|
case 'P':
|
|
|
|
campo = testa().get(F_CODPAG);
|
|
|
|
campo.rpad(testa().field(F_CODPAG).size());
|
|
|
|
break;
|
|
|
|
case 'S':
|
|
|
|
campo = clifo().vendite().get(CFV_CODSCC);
|
|
|
|
campo.rpad(clifo().length(CFV_CODSCC));
|
|
|
|
break;
|
|
|
|
case 'Z':
|
|
|
|
campo = testa().get(F_CODZON);
|
|
|
|
campo.rpad(testa().field(F_CODZON).size());
|
|
|
|
break;
|
|
|
|
case 'M':
|
|
|
|
campo = riga().get( FR_CODARTMAG );
|
|
|
|
campo.rpad(riga().field(FR_CODARTMAG).size());
|
|
|
|
break;
|
|
|
|
case 'E':
|
1998-08-25 18:07:30 +00:00
|
|
|
campo = _anamag.get(ANAMAG_GRMERC);
|
|
|
|
campo.rpad(_anamag.curr().length(ANAMAG_GRMERC));
|
1997-10-29 11:08:40 +00:00
|
|
|
campo.cut(3);
|
|
|
|
break;
|
|
|
|
case 'R':
|
1998-08-25 18:07:30 +00:00
|
|
|
campo = _anamag.get(ANAMAG_GRMERC);
|
|
|
|
campo.rpad(_anamag.curr().length(ANAMAG_GRMERC));
|
1997-10-29 11:08:40 +00:00
|
|
|
break;
|
|
|
|
case 'F':
|
1998-08-25 18:07:30 +00:00
|
|
|
campo = _anamag.get(ANAMAG_RAGGFIS);
|
|
|
|
campo.rpad(_anamag.curr().length(ANAMAG_RAGGFIS));
|
1997-10-29 11:08:40 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
campo.cut(0);
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
key << campo;
|
|
|
|
}
|
|
|
|
|
|
|
|
TLocalisamfile perc(LF_PERCPROV);
|
|
|
|
|
|
|
|
perc.put(PER_CODPR, codpr);
|
|
|
|
perc.put(PER_KEYORD, key);
|
|
|
|
if (perc.read() == NOERR)
|
|
|
|
val= perc.get_real(PER_PERCPROVV);
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
|
1996-09-26 15:37:19 +00:00
|
|
|
void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
1995-12-04 17:41:06 +00:00
|
|
|
{
|
2004-11-30 22:02:59 +00:00
|
|
|
const TString80 codriga = riga().get( FR_CODARTMAG );
|
|
|
|
const bool prezzo_lordo = testa().doc().tipo().calcolo_lordo();
|
1996-10-21 15:52:20 +00:00
|
|
|
|
1997-06-12 16:26:22 +00:00
|
|
|
_ivarid = clifo().vendite().get_bool(CFV_IVARID);
|
1996-09-26 15:37:19 +00:00
|
|
|
_load_mask = !load_um_only && !load_scagl_only;
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
_anamag.setkey(1);
|
|
|
|
_anamag.put("CODART", codriga);
|
|
|
|
if (codriga.empty() || _anamag.read() != NOERR)
|
|
|
|
{
|
|
|
|
set_prezzo(ZERO);
|
|
|
|
set_sconto("");
|
|
|
|
set_iva("");
|
|
|
|
set_provv(ZERO);
|
2005-05-16 23:44:23 +00:00
|
|
|
if (prezzo_lordo)
|
2000-05-05 15:25:49 +00:00
|
|
|
riga().set(FR_LORDO, "X");
|
1999-04-06 15:34:39 +00:00
|
|
|
return;
|
|
|
|
}
|
1999-06-18 15:35:05 +00:00
|
|
|
|
1999-04-06 15:34:39 +00:00
|
|
|
const TString16 umriga(riga().get(FR_UMQTA));
|
|
|
|
if (umriga.not_empty())
|
|
|
|
{
|
|
|
|
_umart.setkey(2);
|
|
|
|
_umart.put("CODART", codriga);
|
2000-05-05 15:25:49 +00:00
|
|
|
_umart.put("UM", umriga);
|
|
|
|
if (_umart.read() != NOERR)
|
|
|
|
_umart.zero();
|
|
|
|
}
|
1996-07-25 13:05:29 +00:00
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
const bool found_condv = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
|
1996-09-26 15:37:19 +00:00
|
|
|
const bool cv_scagl = _condv.get_bool("GESTSCAGL");
|
|
|
|
const bool cv_um = _condv.get_bool("GESTUM");
|
1996-07-25 13:05:29 +00:00
|
|
|
|
2005-05-16 23:44:23 +00:00
|
|
|
if (prezzo_lordo)
|
2004-11-30 22:02:59 +00:00
|
|
|
riga().set(FR_LORDO, "X");
|
|
|
|
else
|
|
|
|
riga().reset(FR_LORDO);
|
|
|
|
|
|
|
|
real prezzo;
|
|
|
|
TString16 valuta;
|
|
|
|
|
1996-08-12 08:32:28 +00:00
|
|
|
if (found_condv)
|
1996-09-26 15:37:19 +00:00
|
|
|
{
|
|
|
|
_load_mask |= load_scagl_only && cv_scagl;
|
|
|
|
_load_mask |= load_um_only && cv_um;
|
2004-11-30 22:02:59 +00:00
|
|
|
|
|
|
|
real prezzo(_rcondv.get_real("PREZZO"));
|
|
|
|
const TString & valuta = _condv.get("CODVAL");
|
|
|
|
|
|
|
|
if (prezzo_lordo)
|
|
|
|
{
|
|
|
|
TCodiceIVA iva(_anamag.get("CODIVA"));
|
|
|
|
|
|
|
|
prezzo = iva.lordo(prezzo, AUTO_PRICES_DECIMALS, valuta);
|
|
|
|
}
|
|
|
|
|
|
|
|
set_prezzo(prezzo, valuta);
|
1996-09-26 15:37:19 +00:00
|
|
|
_load_mask = !load_um_only && !load_scagl_only;
|
|
|
|
}
|
1996-08-12 08:32:28 +00:00
|
|
|
else
|
1999-04-06 15:34:39 +00:00
|
|
|
{
|
|
|
|
_load_mask |= load_um_only;
|
2004-11-30 22:02:59 +00:00
|
|
|
TString16 field_prezzo(testa().doc().tipo().field_prezzo());
|
2005-02-17 18:13:12 +00:00
|
|
|
real prezzo;
|
2002-02-26 16:20:19 +00:00
|
|
|
|
|
|
|
if (field_prezzo.empty())
|
2005-02-17 18:13:12 +00:00
|
|
|
prezzo = _umart.get_real("PREZZO");
|
|
|
|
else
|
|
|
|
prezzo = _anamag.get_real(field_prezzo);
|
2004-11-30 22:02:59 +00:00
|
|
|
if (prezzo_lordo)
|
|
|
|
{
|
|
|
|
TCodiceIVA iva(_anamag.get("CODIVA"));
|
2002-12-20 16:15:03 +00:00
|
|
|
|
2004-11-30 22:02:59 +00:00
|
|
|
prezzo = iva.lordo(prezzo, AUTO_PRICES_DECIMALS);
|
|
|
|
}
|
|
|
|
set_prezzo(prezzo);
|
1999-04-06 15:34:39 +00:00
|
|
|
}
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
if (_ivarid)
|
1998-08-25 18:07:30 +00:00
|
|
|
set_iva(_anamag.get(ANAMAG_CODIVAR));
|
1997-02-03 15:28:53 +00:00
|
|
|
else
|
1998-08-25 18:07:30 +00:00
|
|
|
set_iva(_anamag.get(ANAMAG_CODIVA));
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
TConfig config_ditta(CONFIG_DITTA, "ve");
|
|
|
|
const char gestione = config_ditta.get_char( "GESSCORIGA", "ve" );
|
|
|
|
const bool sco_scagl = config_ditta.get_bool("GESCOSCA", "ve");
|
|
|
|
const bool sco_um_gest = config_ditta.get_bool("GESSCORIGAUM", "ve");
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
switch (gestione)
|
1997-06-12 16:26:22 +00:00
|
|
|
{
|
1997-02-03 15:28:53 +00:00
|
|
|
case 'N':
|
|
|
|
// Sconti di riga non gestiti
|
|
|
|
set_sconto("");
|
|
|
|
break;
|
|
|
|
case 'L':
|
|
|
|
// Percentuale su contratti/offerte/listini/anagrafica
|
|
|
|
if (found_condv)
|
|
|
|
{
|
|
|
|
_load_mask |= load_scagl_only && cv_scagl;
|
|
|
|
_load_mask |= load_um_only && cv_um;
|
|
|
|
set_sconto(_rcondv.get("SCONTO"));
|
|
|
|
_load_mask = !load_um_only && !load_scagl_only;
|
|
|
|
}
|
|
|
|
else
|
1998-08-25 18:07:30 +00:00
|
|
|
set_sconto(_anamag.get("SCONTO"));
|
1997-02-03 15:28:53 +00:00
|
|
|
break;
|
|
|
|
case 'A':
|
|
|
|
{
|
|
|
|
// Posiziono l'anagrafica
|
1998-08-25 18:07:30 +00:00
|
|
|
const char rigakey = config_ditta.get_char( "SCORIGAKEY", "ve" );
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
_sconti.setkey(1);
|
|
|
|
_sconti.put("TIPO", "R");
|
1998-08-25 18:07:30 +00:00
|
|
|
if( config_ditta.get_bool("GESSCORIGACV", "ve"))
|
|
|
|
_sconti.put("CODCAT", testa().get(F_CATVEN));
|
1997-02-03 15:28:53 +00:00
|
|
|
if (sco_um_gest)
|
|
|
|
_sconti.put("UM", riga().get( FR_UMQTA));
|
|
|
|
_sconti.put("TIPORIGA", rigakey);
|
1996-08-13 09:42:35 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
if (sco_scagl)
|
|
|
|
_sconti.put("NSCAGL", 1);
|
1996-08-13 09:42:35 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
switch (rigakey)
|
|
|
|
{
|
|
|
|
case 'A':
|
|
|
|
_sconti.put("CODART", codriga);
|
|
|
|
_sconti.read();
|
|
|
|
break;
|
|
|
|
case 'R':
|
1998-08-25 18:07:30 +00:00
|
|
|
_sconti.put("CODART", _anamag.get("RAGGFIS"));
|
|
|
|
_sconti.read();
|
1997-02-03 15:28:53 +00:00
|
|
|
break;
|
|
|
|
case 'C':
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
_sconti.put( "CODART", _anamag.get("GRMERC"));
|
1997-02-03 15:28:53 +00:00
|
|
|
_sconti.read( );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'L':
|
|
|
|
{
|
1998-08-25 18:07:30 +00:00
|
|
|
_sconti.put("CODART", _anamag.get("GRMERC").left(3));
|
1997-02-03 15:28:53 +00:00
|
|
|
_sconti.read();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
1997-06-12 16:26:22 +00:00
|
|
|
_sconti.put("CODART", codriga);
|
|
|
|
_sconti.read();
|
|
|
|
break;
|
1997-02-03 15:28:53 +00:00
|
|
|
}
|
1996-08-13 09:42:35 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
const bool found = _sconti.good();
|
1996-08-13 09:42:35 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
if (found && sco_scagl)
|
|
|
|
{
|
|
|
|
TRectype rec(_sconti.curr());
|
|
|
|
int last_scagl = 0;
|
|
|
|
int scagl = _sconti.get_int("NSCAGL");
|
|
|
|
const real qta(_riga->get_real(FR_QTA));
|
|
|
|
real qta_lim(_sconti.get_real("QLIM"));
|
1996-08-13 09:42:35 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
while (_sconti.good() && scagl > last_scagl && qta_lim > ZERO && qta > qta_lim)
|
|
|
|
{
|
|
|
|
if (_sconti.next() == NOERR)
|
|
|
|
{
|
|
|
|
last_scagl = scagl;
|
|
|
|
scagl = _sconti.get_int("NSCAGL");
|
|
|
|
qta_lim =_sconti.get_real("QLIM");
|
|
|
|
rec = _sconti.curr();
|
1996-08-13 09:42:35 +00:00
|
|
|
}
|
1997-02-03 15:28:53 +00:00
|
|
|
}
|
|
|
|
_rcondv.read(rec);
|
|
|
|
}
|
|
|
|
if (!found)
|
|
|
|
_sconti.zero();
|
|
|
|
_load_mask |= load_scagl_only && sco_scagl;
|
|
|
|
_load_mask |= load_scagl_only && sco_um_gest;
|
|
|
|
set_sconto(_sconti.get("SCONTO"));
|
|
|
|
_load_mask = !load_um_only && !load_scagl_only;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'C':
|
1997-06-12 16:26:22 +00:00
|
|
|
set_sconto(clifo().vendite().get(CFV_SCONTO));
|
1997-02-03 15:28:53 +00:00
|
|
|
break;
|
|
|
|
default:
|
1997-06-12 16:26:22 +00:00
|
|
|
set_sconto("");
|
1997-02-03 15:28:53 +00:00
|
|
|
break;
|
|
|
|
}
|
1996-08-12 08:32:28 +00:00
|
|
|
|
|
|
|
if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
|
|
|
|
{
|
|
|
|
const TString16 codage(_testa->get(F_CODAG));
|
|
|
|
|
|
|
|
if (codage.not_empty())
|
|
|
|
{
|
1997-10-29 11:08:40 +00:00
|
|
|
TLocalisamfile age(LF_AGENTI);
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1997-10-29 11:08:40 +00:00
|
|
|
age.put(AGE_CODAGE, codage);
|
1996-08-12 08:32:28 +00:00
|
|
|
if (age.read() == NOERR)
|
1997-10-29 11:08:40 +00:00
|
|
|
{
|
|
|
|
TString16 seqric(age.get(AGE_SEQRIC));
|
|
|
|
TString16 fcodpr;
|
|
|
|
TString16 codpr;
|
|
|
|
real percprovv = ZERO;
|
|
|
|
|
|
|
|
if (seqric[0] == '-')
|
1998-08-25 18:07:30 +00:00
|
|
|
seqric = config_ditta.get( "AGETIPOPERC", "ve" );
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1997-10-29 11:08:40 +00:00
|
|
|
int len = seqric.len();
|
1996-08-12 08:32:28 +00:00
|
|
|
|
1998-04-30 14:04:19 +00:00
|
|
|
_load_mask |= load_scagl_only && cv_scagl;
|
|
|
|
_load_mask |= load_scagl_only && cv_um;
|
1997-10-29 11:08:40 +00:00
|
|
|
|
|
|
|
for (int i = 0; percprovv == ZERO && i < len && seqric[i] != '-'; i++)
|
|
|
|
{
|
|
|
|
if (isdigit(seqric[i]))
|
|
|
|
{
|
|
|
|
fcodpr.format("CODRICPR%d", i+1);
|
|
|
|
codpr = age.get(fcodpr);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
codpr.cut(0);
|
|
|
|
percprovv = get_percprovv(seqric[i], codpr, age);
|
|
|
|
}
|
|
|
|
real percalt = ZERO;
|
|
|
|
seqric = age.get(AGE_SEQALT);
|
|
|
|
for (i = 0; percalt == ZERO && i < len && seqric[i] != '-'; i++)
|
1996-08-12 08:32:28 +00:00
|
|
|
{
|
1997-10-29 11:08:40 +00:00
|
|
|
if (isdigit(seqric[i]))
|
|
|
|
{
|
|
|
|
fcodpr.format("CODALTPR%d", i+1);
|
|
|
|
codpr = age.get(fcodpr);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
codpr.cut(0);
|
|
|
|
percalt = get_percprovv(seqric[i], codpr, age);
|
1996-08-12 08:32:28 +00:00
|
|
|
}
|
1997-10-29 11:08:40 +00:00
|
|
|
percprovv += percalt;
|
|
|
|
set_provv(percprovv);
|
|
|
|
}
|
1996-08-12 08:32:28 +00:00
|
|
|
}
|
1997-02-03 15:28:53 +00:00
|
|
|
}
|
1997-08-01 09:20:02 +00:00
|
|
|
if (found_condv && _testa->is_running())
|
1997-02-03 15:28:53 +00:00
|
|
|
update_omaggi(load_scagl_only);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TCond_vendita::update_omaggi(bool full)
|
|
|
|
{
|
|
|
|
static TString16 tipo_riga("_");
|
|
|
|
TSheet_field & sh = (TSheet_field &) testa().field(F_SHEET);
|
1997-08-29 16:42:42 +00:00
|
|
|
int current_doc_row = sh.selected() + 1;
|
1997-02-03 15:28:53 +00:00
|
|
|
TDocumento & doc = testa().doc();
|
|
|
|
bool update = FALSE;
|
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
if (doc[current_doc_row].is_omaggio())
|
1997-02-03 15:28:53 +00:00
|
|
|
return;
|
|
|
|
|
|
|
|
if (current_doc_row < doc.rows())
|
|
|
|
{
|
|
|
|
TRiga_documento & r = doc[current_doc_row + 1];
|
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
if (r.is_omaggio() && r.is_generata())
|
1997-02-03 15:28:53 +00:00
|
|
|
{
|
1997-08-29 16:42:42 +00:00
|
|
|
sh.update_row(current_doc_row - 1);
|
1997-02-03 15:28:53 +00:00
|
|
|
doc.destroy_row(current_doc_row + 1, TRUE);
|
|
|
|
sh.destroy(current_doc_row, FALSE);
|
|
|
|
update = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
real qta = _riga->get(FR_QTA);
|
1997-08-29 16:42:42 +00:00
|
|
|
bool creata = FALSE;
|
1997-02-03 15:28:53 +00:00
|
|
|
|
|
|
|
if (full || qta != ZERO)
|
1997-08-18 16:06:03 +00:00
|
|
|
{
|
1997-02-03 15:28:53 +00:00
|
|
|
const TString80 codart_omaggio(_rcondv.get("CODARTOM"));
|
1997-08-18 16:06:03 +00:00
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
if (tipo_riga[0] == '_')
|
|
|
|
{
|
|
|
|
TConfig cnf(CONFIG_STUDIO, "ve");
|
|
|
|
tipo_riga = cnf.get("TROMAGGI");
|
2000-05-05 15:25:49 +00:00
|
|
|
if (tipo_riga.empty())
|
|
|
|
{
|
|
|
|
tipo_riga = "09";
|
|
|
|
cnf.set("TROMAGGI", tipo_riga);
|
|
|
|
warning_box("Il tipo riga omaggi non risultava impostato.\n L'applicazione usera' automaticamente il tipo %s", (const char*) tipo_riga);
|
|
|
|
}
|
1997-02-03 15:28:53 +00:00
|
|
|
}
|
1997-09-16 14:55:45 +00:00
|
|
|
const real qbase = _rcondv.get_real("QBASE");
|
|
|
|
if (qbase == ZERO)
|
|
|
|
qta = ZERO;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
qta /= _rcondv.get_real("QBASE");
|
|
|
|
qta.floor();
|
|
|
|
qta *= _rcondv.get_real("QOM");
|
|
|
|
}
|
1997-08-29 16:42:42 +00:00
|
|
|
creata = codart_omaggio.not_empty() && tipo_riga.not_empty() && qta != ZERO;
|
|
|
|
|
|
|
|
if (creata)
|
1997-02-03 15:28:53 +00:00
|
|
|
{
|
1997-08-29 16:42:42 +00:00
|
|
|
TRiga_documento & curr_row = doc[current_doc_row];
|
|
|
|
TToken_string & rw = sh.row(current_doc_row - 1);
|
|
|
|
|
|
|
|
sh.update_row(current_doc_row - 1);
|
1997-08-18 16:06:03 +00:00
|
|
|
curr_row.autosave(sh);
|
|
|
|
|
1997-02-03 15:28:53 +00:00
|
|
|
TRiga_documento & r = doc.insert_row(current_doc_row + 1, tipo_riga);
|
1997-08-18 16:06:03 +00:00
|
|
|
|
1997-06-27 09:21:13 +00:00
|
|
|
r.generata();
|
1997-02-03 15:28:53 +00:00
|
|
|
TString16 codmag(_riga->get(FR_CODMAG)); codmag << _riga->get(FR_CODDEP);
|
|
|
|
r.put("CODMAG", codmag);
|
|
|
|
r.put("CODART", codart_omaggio);
|
|
|
|
r.put("UMQTA", _rcondv.get("UMOM"));
|
|
|
|
r.put("QTA", qta);
|
1997-08-29 16:42:42 +00:00
|
|
|
real prezzo(_rcondv.get("PROMAGGIO"));
|
|
|
|
const TString16 codval(_condv.get("CODVAL"));
|
1997-06-12 16:26:22 +00:00
|
|
|
const TString16 codiva_cli(clifo().vendite().get(CFV_ASSFIS));
|
1997-02-03 15:28:53 +00:00
|
|
|
if (codiva_cli.not_empty())
|
|
|
|
r.put("CODIVA", codiva_cli);
|
|
|
|
else
|
|
|
|
r.put("CODIVA", _rcondv.get("CODIVA"));
|
|
|
|
r.put("ADDIVA", _rcondv.get("ADDIVA"));
|
|
|
|
sh.insert(current_doc_row, FALSE);
|
|
|
|
r.autoload(sh);
|
|
|
|
sh.check_row(current_doc_row);
|
1997-06-27 09:21:13 +00:00
|
|
|
r.autosave(sh);
|
1997-07-28 14:16:44 +00:00
|
|
|
|
1997-08-29 16:42:42 +00:00
|
|
|
prezzo = normalize_valuta(prezzo, codval);
|
|
|
|
r.put("PREZZO", prezzo);
|
|
|
|
r.autoload(sh);
|
1997-02-03 15:28:53 +00:00
|
|
|
update = TRUE;
|
1997-08-29 16:42:42 +00:00
|
|
|
// curr_row.autoload(sh);
|
1997-02-03 15:28:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (update)
|
1997-08-29 16:42:42 +00:00
|
|
|
{
|
1997-02-03 15:28:53 +00:00
|
|
|
sh.force_update();
|
1997-08-29 16:42:42 +00:00
|
|
|
sh.select(creata ? current_doc_row : current_doc_row - 1);
|
|
|
|
}
|
1995-12-04 17:41:06 +00:00
|
|
|
}
|
1996-07-25 13:05:29 +00:00
|
|
|
|
1998-08-25 18:07:30 +00:00
|
|
|
TCond_vendita::TCond_vendita(TDocumento_mask * testa, TMask * riga)
|
|
|
|
: _testa(testa), _riga(riga),
|
1996-08-12 08:32:28 +00:00
|
|
|
_condv( LF_CONDV ), _rcondv( LF_RCONDV ), _sconti( LF_SCONTI ),
|
1998-08-25 18:07:30 +00:00
|
|
|
_anamag(LF_ANAMAG), _umart(LF_UMART),
|
|
|
|
_ivarid(FALSE), _load_mask(FALSE)
|
1996-07-25 13:05:29 +00:00
|
|
|
{
|
|
|
|
}
|
2002-12-20 16:15:03 +00:00
|
|
|
|