Corretto calcolo fido cliente
git-svn-id: svn://10.65.10.50/branches/R_10_00@22889 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ab2403bd73
commit
4378b5f698
@ -140,10 +140,13 @@ Col(9) = FR_QTA
|
|||||||
Col(10) = FR_LORDO
|
Col(10) = FR_LORDO
|
||||||
Col(11) = FR_PREZZO
|
Col(11) = FR_PREZZO
|
||||||
Col(12) = FR_CODIVA
|
Col(12) = FR_CODIVA
|
||||||
Col(13) = FR_CAUS
|
Col(13)= FR_NCOLLI
|
||||||
Col(14) = FR_CODMAGC
|
Col(14)= FR_PNETTO
|
||||||
Col(15) = FR_CODDEPC
|
Col(15)= FR_TARA
|
||||||
Col(16)=FR_TIPORIGA
|
Col(16) = FR_CAUS
|
||||||
|
Col(17) = FR_CODMAGC
|
||||||
|
Col(18) = FR_CODDEPC
|
||||||
|
Col(19) = FR_TIPORIGA
|
||||||
|
|
||||||
[RIGHE]
|
[RIGHE]
|
||||||
|
|
||||||
|
311
ve/sconti.cpp
311
ve/sconti.cpp
@ -17,9 +17,9 @@
|
|||||||
#include "../pr/agenti.h"
|
#include "../pr/agenti.h"
|
||||||
#include "../pr/percprov.h"
|
#include "../pr/percprov.h"
|
||||||
|
|
||||||
bool TCond_vendita::set_sconto( const char * exp, bool signal )
|
bool TCond_vendita::set_sconto(const char* exp, bool signal)
|
||||||
{
|
{
|
||||||
bool valid= scontoexpr2perc(exp,signal,_sconto,_molt_sconto);
|
bool valid = scontoexpr2perc(exp, signal, _sconto, _molt_sconto);
|
||||||
if (_load_mask && _riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active())
|
if (_load_mask && _riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active())
|
||||||
_riga->set(FR_SCONTO, _sconto);
|
_riga->set(FR_SCONTO, _sconto);
|
||||||
return valid;
|
return valid;
|
||||||
@ -87,10 +87,9 @@ bool TCond_vendita::cerca( int tiporicerca )
|
|||||||
{
|
{
|
||||||
case A_CONTRATTI:
|
case A_CONTRATTI:
|
||||||
{
|
{
|
||||||
const TString16 codcont(testa().get(F_CODCONT));
|
const TString16 codcont = testa().get(F_CODCONT);
|
||||||
|
if (codcont.blank())
|
||||||
if (codcont.empty())
|
return false;
|
||||||
return FALSE;
|
|
||||||
_condv.put(CONDV_TIPO, "C");
|
_condv.put(CONDV_TIPO, "C");
|
||||||
if(config_ditta.get_bool("GESCONCC", "ve"))
|
if(config_ditta.get_bool("GESCONCC", "ve"))
|
||||||
{
|
{
|
||||||
@ -102,10 +101,9 @@ bool TCond_vendita::cerca( int tiporicerca )
|
|||||||
break;
|
break;
|
||||||
case A_LISTINI:
|
case A_LISTINI:
|
||||||
{
|
{
|
||||||
const TString16 codlist(testa().get(F_CODLIST));
|
const TString16 codlist = testa().get(F_CODLIST);
|
||||||
|
if (codlist.blank())
|
||||||
if (codlist.empty())
|
return false;
|
||||||
return FALSE;
|
|
||||||
_condv.put(CONDV_TIPO, "L");
|
_condv.put(CONDV_TIPO, "L");
|
||||||
// Se in ditta h abilitata la gestione della categoria di vendita in chiave
|
// Se in ditta h abilitata la gestione della categoria di vendita in chiave
|
||||||
// al listino, la carico con gioia
|
// al listino, la carico con gioia
|
||||||
@ -319,6 +317,121 @@ real TCond_vendita::get_percprovv(char tipoprovv, const TString & codpr, bool fi
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TCond_vendita::try_sconto(char gestione, bool found_condv, bool load_um_only, bool load_scagl_only)
|
||||||
|
{
|
||||||
|
TString80 sconto;
|
||||||
|
|
||||||
|
switch (gestione)
|
||||||
|
{
|
||||||
|
case 'L':
|
||||||
|
// Percentuale su contratti/offerte/listini/anagrafica
|
||||||
|
if (found_condv)
|
||||||
|
{
|
||||||
|
const bool cv_scagl = _condv.get_bool("GESTSCAGL");
|
||||||
|
const bool cv_um = _condv.get_bool("GESTUM");
|
||||||
|
|
||||||
|
_load_mask |= load_scagl_only && cv_scagl;
|
||||||
|
_load_mask |= load_um_only && cv_um;
|
||||||
|
sconto = _rcondv.get("SCONTO");
|
||||||
|
_load_mask = !load_um_only && !load_scagl_only;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sconto = _anamag.get("SCONTO");
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
{
|
||||||
|
TConfig config_ditta(CONFIG_DITTA, "ve");
|
||||||
|
const bool sco_scagl = config_ditta.get_bool("GESSCOSCA");
|
||||||
|
const bool sco_um_gest = config_ditta.get_bool("GESSCORIGAUM");
|
||||||
|
const char rigakey = config_ditta.get_char( "SCORIGAKEY");
|
||||||
|
|
||||||
|
// Posiziono l'anagrafica
|
||||||
|
_sconti.setkey(1);
|
||||||
|
_sconti.put("TIPO", "R");
|
||||||
|
if( config_ditta.get_bool("GESSCORIGACV"))
|
||||||
|
_sconti.put("CODCAT", testa().get(F_CATVEN));
|
||||||
|
if (sco_um_gest)
|
||||||
|
_sconti.put("UM", riga().get( FR_UMQTA));
|
||||||
|
_sconti.put("TIPORIGA", rigakey);
|
||||||
|
|
||||||
|
if (sco_scagl)
|
||||||
|
_sconti.put("NSCAGL", 1);
|
||||||
|
|
||||||
|
switch (rigakey)
|
||||||
|
{
|
||||||
|
case 'A':
|
||||||
|
{
|
||||||
|
const TString& codriga = riga().get(FR_CODARTMAG);
|
||||||
|
_sconti.put("CODART", codriga);
|
||||||
|
_sconti.read();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
_sconti.put("CODART", _anamag.get("RAGGFIS"));
|
||||||
|
_sconti.read();
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
{
|
||||||
|
_sconti.put( "CODART", _anamag.get("GRMERC"));
|
||||||
|
_sconti.read( );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
{
|
||||||
|
_sconti.put("CODART", _anamag.get("GRMERC").left(3));
|
||||||
|
_sconti.read();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
const TString& codriga = riga().get(FR_CODARTMAG);
|
||||||
|
_sconti.put("CODART", codriga);
|
||||||
|
_sconti.read();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool found = _sconti.good();
|
||||||
|
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"));
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_rcondv.read(rec);
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
_sconti.zero();
|
||||||
|
_load_mask |= load_scagl_only && sco_scagl;
|
||||||
|
_load_mask |= load_scagl_only && sco_um_gest;
|
||||||
|
sconto = _sconti.get("SCONTO");
|
||||||
|
_load_mask = !load_um_only && !load_scagl_only;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
sconto = clifo().vendite().get(CFV_SCONTO);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sconto.cut(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return set_sconto(sconto) && sconto.full();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
||||||
{
|
{
|
||||||
const TString80 codriga = riga().get( FR_CODARTMAG );
|
const TString80 codriga = riga().get( FR_CODARTMAG );
|
||||||
@ -342,22 +455,18 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
real prezzo;
|
real prezzo;
|
||||||
bool found_prezzo = false;
|
bool found_prezzo = false;
|
||||||
const TArticolo_giacenza & art = cached_article_balances(codriga);
|
const TArticolo_giacenza & art = cached_article_balances(codriga);
|
||||||
static TTipo_valorizz __tipo = (TTipo_valorizz) -883;
|
|
||||||
const TTipo_riga_documento tiporiga(riga().get(FR_TIPORIGA));;
|
const TTipo_riga_documento tiporiga(riga().get(FR_TIPORIGA));;
|
||||||
|
|
||||||
if (__tipo == -883)
|
if (tiporiga.tipo() == RIGA_OMAGGI)
|
||||||
{
|
|
||||||
TConfig c(CONFIG_DITTA, "ve");
|
|
||||||
__tipo = (TTipo_valorizz) (c.get_int("PriceOmaggi") - 1);
|
|
||||||
}
|
|
||||||
if (tiporiga.tipo() == RIGA_OMAGGI)
|
|
||||||
{
|
{
|
||||||
const int annoes = esercizi().date2esc(testa().get_date(F_DATADOC));
|
const int annoes = esercizi().date2esc(testa().get_date(F_DATADOC));
|
||||||
const TString4 codmag = riga().get(FR_CODMAG);
|
const TString4 codmag = riga().get(FR_CODMAG);
|
||||||
const TString80 livello = riga().get(MAG_LIVELLO);
|
const TString80 livello = riga().get(MAG_LIVELLO);
|
||||||
|
|
||||||
found_prezzo = true;
|
found_prezzo = true;
|
||||||
switch (__tipo)
|
|
||||||
|
const TTipo_valorizz tvo = TTipo_valorizz(ini_get_int(CONFIG_DITTA, "ve", "PriceOmaggi") - 1);
|
||||||
|
switch (tvo)
|
||||||
{
|
{
|
||||||
case valorizz_ultcos:
|
case valorizz_ultcos:
|
||||||
prezzo = art.ultimo_costo(annoes);
|
prezzo = art.ultimo_costo(annoes);
|
||||||
@ -399,9 +508,8 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString16 umriga(riga().get(FR_UMQTA));
|
const TString4 umriga(riga().get(FR_UMQTA));
|
||||||
|
if (umriga.full())
|
||||||
if (umriga.not_empty())
|
|
||||||
{
|
{
|
||||||
_umart.setkey(2);
|
_umart.setkey(2);
|
||||||
_umart.put("CODART", codriga);
|
_umart.put("CODART", codriga);
|
||||||
@ -411,7 +519,7 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool prezzo_lordo = false;
|
bool prezzo_lordo = false;
|
||||||
TString16 valuta;
|
TString4 valuta;
|
||||||
bool found_condv = false;
|
bool found_condv = false;
|
||||||
const bool cv_scagl = _condv.get_bool("GESTSCAGL");
|
const bool cv_scagl = _condv.get_bool("GESTSCAGL");
|
||||||
const bool cv_um = _condv.get_bool("GESTUM");
|
const bool cv_um = _condv.get_bool("GESTUM");
|
||||||
@ -419,7 +527,6 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
if (!found_prezzo)
|
if (!found_prezzo)
|
||||||
{
|
{
|
||||||
found_condv = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
|
found_condv = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
|
||||||
|
|
||||||
if (found_condv)
|
if (found_condv)
|
||||||
{
|
{
|
||||||
_load_mask |= load_scagl_only && cv_scagl;
|
_load_mask |= load_scagl_only && cv_scagl;
|
||||||
@ -432,9 +539,8 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TString16 field_prezzo(testa().doc().tipo().field_prezzo());
|
TString16 field_prezzo = testa().doc().tipo().field_prezzo();
|
||||||
|
if (field_prezzo.blank())
|
||||||
if (field_prezzo.empty())
|
|
||||||
prezzo = _umart.get_real("PREZZO");
|
prezzo = _umart.get_real("PREZZO");
|
||||||
else
|
else
|
||||||
prezzo = _anamag.get_real(field_prezzo);
|
prezzo = _anamag.get_real(field_prezzo);
|
||||||
@ -442,12 +548,12 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
_prov = "A";
|
_prov = "A";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (doc_al_lordo)
|
|
||||||
|
if (doc_al_lordo)
|
||||||
{
|
{
|
||||||
if (!prezzo_lordo)
|
if (!prezzo_lordo)
|
||||||
{
|
{
|
||||||
TCodiceIVA iva(_anamag.get("CODIVA"));
|
const TCodiceIVA iva(_anamag.get("CODIVA"));
|
||||||
|
|
||||||
prezzo = iva.lordo(prezzo, AUTO_PRICES_DECIMALS, valuta);
|
prezzo = iva.lordo(prezzo, AUTO_PRICES_DECIMALS, valuta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -455,140 +561,36 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
{
|
{
|
||||||
if (prezzo_lordo)
|
if (prezzo_lordo)
|
||||||
{
|
{
|
||||||
TCodiceIVA iva(_anamag.get("CODIVA"));
|
const TCodiceIVA iva(_anamag.get("CODIVA"));
|
||||||
|
|
||||||
iva.scorpora(prezzo, AUTO_PRICES_DECIMALS, valuta);
|
iva.scorpora(prezzo, AUTO_PRICES_DECIMALS, valuta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
set_prezzo(prezzo, valuta);
|
set_prezzo(prezzo, valuta);
|
||||||
|
set_iva(_anamag.get(_ivarid ? ANAMAG_CODIVAR : ANAMAG_CODIVA));
|
||||||
|
|
||||||
if (_ivarid)
|
// Gestione sconti di riga
|
||||||
set_iva(_anamag.get(ANAMAG_CODIVAR));
|
const char gestione1 = ini_get_string(CONFIG_DITTA, "ve", "GESSCORIGA")[0];
|
||||||
else
|
if (!try_sconto(gestione1, found_condv, load_um_only, load_scagl_only) && gestione1 > ' ')
|
||||||
set_iva(_anamag.get(ANAMAG_CODIVA));
|
|
||||||
|
|
||||||
TConfig config_ditta(CONFIG_DITTA, "ve");
|
|
||||||
const char gestione = config_ditta.get_char( "GESSCORIGA", "ve" );
|
|
||||||
const bool sco_scagl = config_ditta.get_bool("GESSCOSCA", "ve");
|
|
||||||
const bool sco_um_gest = config_ditta.get_bool("GESSCORIGAUM", "ve");
|
|
||||||
|
|
||||||
switch (gestione)
|
|
||||||
{
|
{
|
||||||
case 'N':
|
const char gestione2 = ini_get_string(CONFIG_DITTA, "ve", "GESSCORIGA2")[0];
|
||||||
// Sconti di riga non gestiti
|
if (gestione2 != gestione1 && (gestione2 == 'A' || gestione2 == 'C' || gestione2 == 'L'))
|
||||||
set_sconto("");
|
try_sconto(gestione2, found_condv, load_um_only, load_scagl_only);
|
||||||
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
|
|
||||||
set_sconto(_anamag.get("SCONTO"));
|
|
||||||
break;
|
|
||||||
case 'A':
|
|
||||||
{
|
|
||||||
// Posiziono l'anagrafica
|
|
||||||
const char rigakey = config_ditta.get_char( "SCORIGAKEY", "ve" );
|
|
||||||
|
|
||||||
_sconti.setkey(1);
|
|
||||||
_sconti.put("TIPO", "R");
|
|
||||||
if( config_ditta.get_bool("GESSCORIGACV", "ve"))
|
|
||||||
_sconti.put("CODCAT", testa().get(F_CATVEN));
|
|
||||||
if (sco_um_gest)
|
|
||||||
_sconti.put("UM", riga().get( FR_UMQTA));
|
|
||||||
_sconti.put("TIPORIGA", rigakey);
|
|
||||||
|
|
||||||
if (sco_scagl)
|
|
||||||
_sconti.put("NSCAGL", 1);
|
|
||||||
|
|
||||||
switch (rigakey)
|
|
||||||
{
|
|
||||||
case 'A':
|
|
||||||
_sconti.put("CODART", codriga);
|
|
||||||
_sconti.read();
|
|
||||||
break;
|
|
||||||
case 'R':
|
|
||||||
_sconti.put("CODART", _anamag.get("RAGGFIS"));
|
|
||||||
_sconti.read();
|
|
||||||
break;
|
|
||||||
case 'C':
|
|
||||||
{
|
|
||||||
_sconti.put( "CODART", _anamag.get("GRMERC"));
|
|
||||||
_sconti.read( );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'L':
|
|
||||||
{
|
|
||||||
_sconti.put("CODART", _anamag.get("GRMERC").left(3));
|
|
||||||
_sconti.read();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
_sconti.put("CODART", codriga);
|
|
||||||
_sconti.read();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool found = _sconti.good();
|
|
||||||
|
|
||||||
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"));
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_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':
|
|
||||||
set_sconto(clifo().vendite().get(CFV_SCONTO));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
set_sconto("");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
|
if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
|
||||||
{
|
{
|
||||||
const TString & codage = _testa->get(F_CODAG);
|
const TString& codage = _testa->get(F_CODAG);
|
||||||
|
|
||||||
if (codage.full())
|
if (codage.full())
|
||||||
{
|
{
|
||||||
const TRectype & age = cache().get(LF_AGENTI, codage);
|
const TRectype& age = cache().get(LF_AGENTI, codage);
|
||||||
|
|
||||||
if (!age.empty())
|
if (!age.empty())
|
||||||
{
|
{
|
||||||
TString16 seqric(age.get(AGE_SEQRIC));
|
TString16 seqric(age.get(AGE_SEQRIC));
|
||||||
real percprovv;
|
real percprovv;
|
||||||
|
|
||||||
if (seqric[0] == '-')
|
if (seqric[0] == '-')
|
||||||
seqric = config_ditta.get( "AGETIPOPERC", "ve" );
|
seqric = ini_get_string(CONFIG_DITTA, "ve", "AGETIPOPERC");
|
||||||
|
|
||||||
int len = seqric.len();
|
int len = seqric.len();
|
||||||
int i;
|
int i;
|
||||||
@ -626,27 +628,26 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
|||||||
|
|
||||||
if (!age.empty())
|
if (!age.empty())
|
||||||
{
|
{
|
||||||
TString16 seqric(age.get(AGE_SEQRIC));
|
TString16 seqric = age.get(AGE_SEQRIC);
|
||||||
real percprovv;
|
|
||||||
|
|
||||||
if (seqric[0] == '-')
|
if (seqric[0] == '-')
|
||||||
seqric = config_ditta.get( "AGETIPOPERC", "ve" );
|
seqric = ini_get_string(CONFIG_DITTA, "ve", "AGETIPOPERC");
|
||||||
|
|
||||||
int len = seqric.len();
|
|
||||||
int i;
|
|
||||||
|
|
||||||
_load_mask |= load_scagl_only && cv_scagl;
|
_load_mask |= load_scagl_only && cv_scagl;
|
||||||
_load_mask |= load_scagl_only && cv_um;
|
_load_mask |= load_scagl_only && cv_um;
|
||||||
for (i = 0; percprovv.is_zero() && seqric[i] != '\0' && seqric[i] != '-'; i++)
|
|
||||||
|
real percprovv;
|
||||||
|
for (int i = 0; percprovv.is_zero() && seqric[i] != '\0' && seqric[i] != '-'; i++)
|
||||||
{
|
{
|
||||||
TString16 codric;
|
TString16 codric;
|
||||||
if (isdigit(seqric[i]))
|
if (isdigit(seqric[i]))
|
||||||
codric = age.get(format("CODRICPR%d", i+1));
|
codric = age.get(format("CODRICPR%d", i+1));
|
||||||
percprovv = get_percprovv(seqric[i], codric, false, age);
|
percprovv = get_percprovv(seqric[i], codric, false, age);
|
||||||
}
|
}
|
||||||
|
|
||||||
real percalt;
|
real percalt;
|
||||||
seqric = age.get(AGE_SEQALT);
|
seqric = age.get(AGE_SEQALT);
|
||||||
for (i = 0; percalt.is_zero() && seqric[i] != '\0' && seqric[i] != '-'; i++)
|
for (int i = 0; percalt.is_zero() && seqric[i] != '\0' && seqric[i] != '-'; i++)
|
||||||
{
|
{
|
||||||
TString16 codric;
|
TString16 codric;
|
||||||
if (isdigit(seqric[i]))
|
if (isdigit(seqric[i]))
|
||||||
@ -698,12 +699,12 @@ void TCond_vendita::update_omaggi(bool full)
|
|||||||
{
|
{
|
||||||
tipo_riga = "09";
|
tipo_riga = "09";
|
||||||
cnf.set("TROMAGGI", tipo_riga);
|
cnf.set("TROMAGGI", tipo_riga);
|
||||||
warning_box(FR("Il tipo riga omaggi non risultava impostato.\nL'applicazione usera' automaticamente il tipo %s"),
|
warning_box(FR("Il tipo riga omaggi non risultava impostato.\nL'applicazione userà automaticamente il tipo %s"),
|
||||||
(const char*) tipo_riga);
|
(const char*) tipo_riga);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const real qbase = _rcondv.get_real("QBASE");
|
const real qbase = _rcondv.get_real("QBASE");
|
||||||
if (qbase == ZERO)
|
if (qbase.is_zero())
|
||||||
qta = ZERO;
|
qta = ZERO;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -711,7 +712,7 @@ void TCond_vendita::update_omaggi(bool full)
|
|||||||
qta.floor();
|
qta.floor();
|
||||||
qta *= _rcondv.get_real(RCONDV_QOM);
|
qta *= _rcondv.get_real(RCONDV_QOM);
|
||||||
}
|
}
|
||||||
creata = codart_omaggio.not_empty() && tipo_riga.not_empty() && qta != ZERO;
|
creata = codart_omaggio.not_empty() && tipo_riga.not_empty() && !qta.is_zero();
|
||||||
|
|
||||||
if (creata)
|
if (creata)
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,7 @@ class TConfig;
|
|||||||
class TCond_vendita : public TObject
|
class TCond_vendita : public TObject
|
||||||
{
|
{
|
||||||
TString80 _sconto;
|
TString80 _sconto;
|
||||||
TString16 _codiva;
|
TString4 _codiva;
|
||||||
TString4 _prov;
|
TString4 _prov;
|
||||||
real _prezzo;
|
real _prezzo;
|
||||||
real _provv;
|
real _provv;
|
||||||
@ -47,10 +47,11 @@ protected:
|
|||||||
|
|
||||||
TDocumento_mask & testa() const { CHECK(_testa, "Maschera testata non inizializzata"); return * _testa; }
|
TDocumento_mask & testa() const { CHECK(_testa, "Maschera testata non inizializzata"); return * _testa; }
|
||||||
TMask & riga() const { CHECK(_riga, "Maschera riga non inizializzata"); return * _riga; }
|
TMask & riga() const { CHECK(_riga, "Maschera riga non inizializzata"); return * _riga; }
|
||||||
|
bool try_sconto(char gestione, bool found_condv, bool load_um_only, bool load_scagl_only);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TCli_for & clifo() const { return _testa->doc().clifor(); }
|
TCli_for & clifo() const { return _testa->doc().clifor(); }
|
||||||
bool set_sconto( const char * exp, bool signal = FALSE );
|
bool set_sconto( const char* exp, bool signal = false);
|
||||||
const TString& get_sconto() const { return _sconto; }
|
const TString& get_sconto() const { return _sconto; }
|
||||||
real sconto_val() const { return _molt_sconto;}
|
real sconto_val() const { return _molt_sconto;}
|
||||||
real get_prezzo() const { return _prezzo; }
|
real get_prezzo() const { return _prezzo; }
|
||||||
|
@ -164,9 +164,9 @@ GROUP 4
|
|||||||
FIELD SCOKEY[4]
|
FIELD SCOKEY[4]
|
||||||
END
|
END
|
||||||
|
|
||||||
LIST F_GESSCORIGA 45
|
LIST F_GESSCORIGA 1 45
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Tipo gestione sconti riga "
|
PROMPT 2 7 "Gestione sconti riga principale "
|
||||||
ITEM "N|Non gestire" MESSAGE CLEAR,5@
|
ITEM "N|Non gestire" MESSAGE CLEAR,5@
|
||||||
ITEM "L|Percentuale su anagrafica/listini/contratti " MESSAGE CLEAR,5@
|
ITEM "L|Percentuale su anagrafica/listini/contratti " MESSAGE CLEAR,5@
|
||||||
ITEM "A|Gestione archivio sconti " MESSAGE ENABLE,5@
|
ITEM "A|Gestione archivio sconti " MESSAGE ENABLE,5@
|
||||||
@ -174,6 +174,16 @@ ITEM "C|Percentuale indicata su anagrafica cliente " MESSAGE CLEAR,5@
|
|||||||
FIELD GESSCORIGA
|
FIELD GESSCORIGA
|
||||||
END
|
END
|
||||||
|
|
||||||
|
LIST F_GESSCORIGA2 1 45
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 8 "Gestione sconti riga secondaria "
|
||||||
|
ITEM "N|Non gestire"
|
||||||
|
ITEM "L|Percentuale su anagrafica/listini/contratti "
|
||||||
|
ITEM "A|Gestione archivio sconti " MESSAGE ENABLE,5@
|
||||||
|
ITEM "C|Percentuale indicata su anagrafica cliente "
|
||||||
|
FIELD GESSCORIGA2
|
||||||
|
END
|
||||||
|
|
||||||
BOOLEAN F_GESSCORIGACV
|
BOOLEAN F_GESSCORIGACV
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 9 "Gestione archivio sconti con categorie vendita cliente "
|
PROMPT 2 9 "Gestione archivio sconti con categorie vendita cliente "
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#define F_SCOKEY4 124
|
#define F_SCOKEY4 124
|
||||||
|
|
||||||
#define F_GESSCORIGA 125
|
#define F_GESSCORIGA 125
|
||||||
|
#define F_GESSCORIGA2 119
|
||||||
#define F_GESSCORIGACV 126
|
#define F_GESSCORIGACV 126
|
||||||
#define F_SCORIGAKEY 127
|
#define F_SCORIGAKEY 127
|
||||||
|
|
||||||
|
@ -1102,7 +1102,7 @@ public:
|
|||||||
void set_codnum(const char* codnum);
|
void set_codnum(const char* codnum);
|
||||||
void set_ndoc(const long ndoc);
|
void set_ndoc(const long ndoc);
|
||||||
|
|
||||||
TDoc_key& operator= (const char* key) {set(key); }
|
TDoc_key& operator=(const char* key) { set(key); return *this; }
|
||||||
|
|
||||||
TDoc_key(const int anno, const TString& codnum, const long ndoc, const char provv = 'D');
|
TDoc_key(const int anno, const TString& codnum, const long ndoc, const char provv = 'D');
|
||||||
TDoc_key(const TRectype& rec);
|
TDoc_key(const TRectype& rec);
|
||||||
|
@ -554,7 +554,7 @@ real TRiga_documento::importo(bool scontato, bool lordo, int ndec) const
|
|||||||
TCond_vendita cv(NULL, NULL);
|
TCond_vendita cv(NULL, NULL);
|
||||||
|
|
||||||
cv.set_sconto(get("SCONTO"));
|
cv.set_sconto(get("SCONTO"));
|
||||||
if (cv.get_sconto().not_empty())
|
if (cv.get_sconto().full())
|
||||||
{
|
{
|
||||||
importo = doc().basesconto();
|
importo = doc().basesconto();
|
||||||
importo *= (cv.sconto_val() - UNO);
|
importo *= (cv.sconto_val() - UNO);
|
||||||
|
@ -1844,7 +1844,7 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
|
|||||||
|
|
||||||
for (int i = 1; i <= rows; i++)
|
for (int i = 1; i <= rows; i++)
|
||||||
if (i != r + 1 && codart == doc[i].get(RDOC_CODART))
|
if (i != r + 1 && codart == doc[i].get(RDOC_CODART))
|
||||||
if ( !yesno_box(FR("L'articolo %s e' presente alla riga %d, si desdiera continuare"), (const char *)codart, i))
|
if ( !yesno_box(FR("L'articolo %s e' presente alla riga %d, si desidera continuare"), (const char *)codart, i))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3717,7 +3717,7 @@ void TDocumento_mask::user_set_handler(short fieldid, int index)
|
|||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
set_field_handler(fieldid, fido_hndl);
|
set_field_handler(fieldid, fido_hndl);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -156,25 +156,26 @@ bool fido_hndl(TMask_field& field, KEY key)
|
|||||||
{
|
{
|
||||||
if (key == K_ENTER && !field.empty())
|
if (key == K_ENTER && !field.empty())
|
||||||
{
|
{
|
||||||
TDocumento_mask & m = (TDocumento_mask &) field.mask();
|
const TDocumento_mask& m = (TDocumento_mask&)field.mask();
|
||||||
const real fido_bau(field.get());
|
if (m.insert_mode() || m.get(F_STATO) == "1")
|
||||||
const char tipocf = m.get(F_TIPOCF)[0];
|
{
|
||||||
const long codcf = m.get_long(F_CODCF);
|
const real fido_bau(field.get());
|
||||||
const TDate& datadoc = m.get_date(F_DATADOC);
|
const long codcf = m.get_long(F_CODCF);
|
||||||
const int riskdays = ini_get_int(CONFIG_DITTA, "ve", "FIDO_RISKDAYS");
|
const TDate datadoc = m.get_date(F_DATADOC);
|
||||||
const real perc_toll = ini_get_string(CONFIG_DITTA, "ve", "FIDO_PERCTOLL");
|
const TDoc_key ignore_key = m.doc();
|
||||||
//calcola l'esposizione PRIMA del documento corrente
|
const real perc_toll = ini_get_string(CONFIG_DITTA, "ve", "FIDO_PERCTOLL");
|
||||||
const real esposizione = calcola_fido_cliente (tipocf, codcf, datadoc, riskdays);
|
//calcola l'esposizione PRIMA del documento corrente
|
||||||
//prende il valore del documento corrente
|
const real esposizione = calcola_fido_cliente(codcf, datadoc, ignore_key);
|
||||||
const real totdoc = m.doc().totale_doc();
|
//prende il valore del documento corrente
|
||||||
//esposizione comprensiva del documento corrente
|
const real totdoc = m.doc().totale_doc();
|
||||||
const real esposizione_totale = esposizione + totdoc;
|
//esposizione comprensiva del documento corrente
|
||||||
const real fido_con_tolleranza = fido_bau * (CENTO + perc_toll) / CENTO;
|
const real esposizione_totale = esposizione + totdoc;
|
||||||
|
const real fido_con_tolleranza = fido_bau * (CENTO + perc_toll) / CENTO;
|
||||||
if (esposizione_totale > fido_con_tolleranza)
|
if (esposizione_totale > fido_con_tolleranza)
|
||||||
return yesno_box(FR("Attenzione! Il cliente %ld risulta fuori fido.\nEsposizione corrente: %s\n"
|
return yesno_box(FR("Attenzione! Il cliente %ld risulta fuori fido.\nEsposizione corrente: %s\n"
|
||||||
"Tot. Doc. corrente: %s\nEsposizione totale: %s\nRegistrare ugualmente il documento?"),
|
"Tot. Doc. corrente: %s\nEsposizione totale: %s\nRegistrare ugualmente il documento?"),
|
||||||
codcf, esposizione.stringa(), totdoc.stringa(), esposizione_totale.stringa());
|
codcf, esposizione.stringa(), totdoc.stringa(), esposizione_totale.stringa());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -222,7 +223,7 @@ bool ora_hndl( TMask_field& field, KEY key )
|
|||||||
|
|
||||||
bool dummy_hndl(TMask_field& field, KEY key)
|
bool dummy_hndl(TMask_field& field, KEY key)
|
||||||
{
|
{
|
||||||
warning_box(FR("Al campo %d è arrivato un KEY %d"), field.dlg( ), key );
|
warning_box(FR("Al campo %d è arrivata una KEY %d"), field.dlg( ), key );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +235,7 @@ bool condpag_hndl( TMask_field& field, KEY key )
|
|||||||
if ( field.to_check(key) || (key == K_TAB && !m.is_running()))
|
if ( field.to_check(key) || (key == K_TAB && !m.is_running()))
|
||||||
{
|
{
|
||||||
const TString& condpag = m.get(F_CODPAG);
|
const TString& condpag = m.get(F_CODPAG);
|
||||||
if (condpag.not_empty())
|
if (condpag.full())
|
||||||
{
|
{
|
||||||
TDocumento& doc = m.doc();
|
TDocumento& doc = m.doc();
|
||||||
// Aggiorna dati necessari per determinare il pagamento
|
// Aggiorna dati necessari per determinare il pagamento
|
||||||
@ -2160,14 +2161,13 @@ bool qtaart_handler( TMask_field& f, KEY key )
|
|||||||
}
|
}
|
||||||
|
|
||||||
real qta(row.get(sf.cid2index(FR_QTA)));
|
real qta(row.get(sf.cid2index(FR_QTA)));
|
||||||
const TString16 caus(mask.get(F_CAUSMAG));
|
const TString8 caus = mask.get(F_CAUSMAG);
|
||||||
const TCausale_magazzino & c = cached_causale_magazzino(caus);
|
const TCausale_magazzino & c = cached_causale_magazzino(caus);
|
||||||
const long nmovmag = doc.get_long(DOC_MOVMAG);
|
const long nmovmag = doc.get_long(DOC_MOVMAG);
|
||||||
|
|
||||||
if (nmovmag != 0)
|
if (nmovmag != 0)
|
||||||
{
|
{
|
||||||
TLocalisamfile rmovmag(LF_RMOVMAG);
|
TLocalisamfile rmovmag(LF_RMOVMAG);
|
||||||
|
|
||||||
rmovmag.setkey(2);
|
rmovmag.setkey(2);
|
||||||
rmovmag.put(RMOVMAG_CODART, codart);
|
rmovmag.put(RMOVMAG_CODART, codart);
|
||||||
rmovmag.put(RMOVMAG_LIVGIAC, livello);
|
rmovmag.put(RMOVMAG_LIVGIAC, livello);
|
||||||
@ -2180,19 +2180,16 @@ bool qtaart_handler( TMask_field& f, KEY key )
|
|||||||
qta *= mask.fconv_qta();
|
qta *= mask.fconv_qta();
|
||||||
if (doc.tipo().check_giac())
|
if (doc.tipo().check_giac())
|
||||||
{
|
{
|
||||||
real giac(mask.get(F_CURGIAC));
|
const real giac = mask.get(F_CURGIAC);
|
||||||
|
if (giac < -(c.sgn(s_giac) * qta) && !yesno_box("Attenzione giacenza negativa: si desidera continuare?"))
|
||||||
if (giac < -(c.sgn(s_giac) * qta) && !yesno_box("Attenzione giacenza negativa, Devo continuare ?"))
|
return false;
|
||||||
|
} else
|
||||||
|
if (doc.tipo().check_disp())
|
||||||
|
{
|
||||||
|
const real disp = mask.get(F_CURDISP);
|
||||||
|
if (disp < -(c.sgn(s_giac) * qta) && !yesno_box("Attenzione disponibilità negativa: si desidera continuare?"))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
if (doc.tipo().check_disp())
|
|
||||||
{
|
|
||||||
real disp(mask.get(F_CURDISP));
|
|
||||||
|
|
||||||
if (disp < -(c.sgn(s_giac) * qta) && !yesno_box("Attenzione disponibilita' negativa, Devo continuare ?"))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
112
ve/velib07.cpp
112
ve/velib07.cpp
@ -628,7 +628,7 @@ static const TString_array& mastro(char tipocf)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
static real calcola_saldo_contabile(const char tipocf, const long codcf, const TDate& datacalc)
|
static real calcola_saldo_contabile(const long codcf, const TDate& datacalc)
|
||||||
{
|
{
|
||||||
real saldone;
|
real saldone;
|
||||||
|
|
||||||
@ -644,7 +644,7 @@ static real calcola_saldo_contabile(const char tipocf, const long codcf, const T
|
|||||||
datainies.set_month(1);
|
datainies.set_month(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString_array& a = mastro(tipocf);
|
const TString_array& a = mastro('C');
|
||||||
|
|
||||||
//per tutti i mastri selezionati va a calcolare il saldo del cliente/fornitore in input
|
//per tutti i mastri selezionati va a calcolare il saldo del cliente/fornitore in input
|
||||||
FOR_EACH_ARRAY_ROW(a, i, row)
|
FOR_EACH_ARRAY_ROW(a, i, row)
|
||||||
@ -669,18 +669,18 @@ static TImporto get_importo(const TISAM_recordset& partite, const char* sezione,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static real calcola_esposto_da_saldaconto (const char tipocf, const long codcf, const TDate& datacalc, const int riskdays)
|
static real calcola_esposto_da_saldaconto (long codcf, const TDate& datacalc)
|
||||||
{
|
{
|
||||||
|
const int riskdays = ini_get_int(CONFIG_DITTA, "ve", "FIDO_RISKDAYS");
|
||||||
|
|
||||||
//estrae le righe partita relative a pagamenti successivi alla data di rischio (e con tipopag >2,<7)
|
//estrae le righe partita relative a pagamenti successivi alla data di rischio (e con tipopag >2,<7)
|
||||||
TString query;
|
TString query;
|
||||||
query << "USE PART\nSELECT BETWEEN(DATAPAG,#DATASBF,0)&&BETWEEN(TIPOPAG,2,7)\n";
|
query << "USE PART\nSELECT BETWEEN(DATAPAG,#DATASBF,0)&&BETWEEN(TIPOPAG,2,7)\n";
|
||||||
query << "FROM TIPOC=#TIPOCF GRUPPO=0 CONTO=0 SOTTOCONTO=#CODCF ANNO=#ANNO\n";
|
query << "FROM TIPOC=C GRUPPO=0 CONTO=0 SOTTOCONTO=#CODCF ANNO=#ANNO\n";
|
||||||
query << "TO TIPOC=#TIPOCF GRUPPO=0 CONTO=0 SOTTOCONTO=#CODCF";
|
query << "TO TIPOC=C GRUPPO=0 CONTO=0 SOTTOCONTO=#CODCF";
|
||||||
|
|
||||||
TISAM_recordset partite(query);
|
TISAM_recordset partite(query);
|
||||||
|
|
||||||
TString4 str_tipocf = tipocf;
|
|
||||||
partite.set_var("#TIPOCF", TVariant(str_tipocf));
|
|
||||||
partite.set_var("#CODCF", codcf);
|
partite.set_var("#CODCF", codcf);
|
||||||
partite.set_var("#DATACALC", datacalc);
|
partite.set_var("#DATACALC", datacalc);
|
||||||
//data considerante i giorni di rischio ammessi dall'utonto
|
//data considerante i giorni di rischio ammessi dall'utonto
|
||||||
@ -719,8 +719,8 @@ static real calcola_esposto_da_saldaconto (const char tipocf, const long codcf,
|
|||||||
|
|
||||||
}
|
}
|
||||||
//la normalizzazione del totale delle partite va fatta in base al fatto che si parli di 'C'liente o 'F'ornitore
|
//la normalizzazione del totale delle partite va fatta in base al fatto che si parli di 'C'liente o 'F'ornitore
|
||||||
const char sezione_finale = (tipocf == 'C') ? 'A' : 'D';
|
//const char sezione_finale = (tipocf == 'C') ? 'A' : 'D';
|
||||||
importone_esposto.normalize(sezione_finale);
|
importone_esposto.normalize('A');
|
||||||
|
|
||||||
//valore in output
|
//valore in output
|
||||||
real esposto;
|
real esposto;
|
||||||
@ -730,69 +730,73 @@ static real calcola_esposto_da_saldaconto (const char tipocf, const long codcf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static real calcola_fido_da_documenti(const char tipocf, const long codcf, const TDate& datacalc)
|
static real calcola_fido_da_documenti(long codcf, const TDate& datacalc, const TDoc_key& ignore)
|
||||||
{
|
{
|
||||||
real totalone;
|
real totalone;
|
||||||
TConfig config(CONFIG_DITTA, "ve");
|
|
||||||
|
|
||||||
//scansione delle righe FIDO_XX(j)=.. sul paragrafo di configurazione VE per avere i parametri di numerazione/tipo..
|
// scansione delle righe FIDO_XX(j)=.. sul paragrafo di configurazione VE
|
||||||
//..da considerare
|
// per avere i parametri di numerazione/tipo da considerare
|
||||||
for (int j = 0;;j++)
|
TConfig config(CONFIG_DITTA, "ve");
|
||||||
|
for (int j = 0; ;j++)
|
||||||
{
|
{
|
||||||
const TString& num_fido = config.get("FIDO_NUM", NULL, j);
|
const TString& num_fido = config.get("FIDO_NUM", NULL, j);
|
||||||
//se manca la numerazione si può fermare,in quanto non può esistere un tipo senza numerazione
|
//se manca la numerazione si può fermare,in quanto non può esistere un tipo senza numerazione
|
||||||
if (num_fido.blank())
|
if (num_fido.blank())
|
||||||
break;
|
break;
|
||||||
const TString& tipo_fido = config.get("FIDO_TIP", NULL, j);
|
const TString& tipo_fido = config.get("FIDO_TIP", NULL, j);
|
||||||
const TString4 da_stato_fido = config.get("FIDO_DASTA", NULL, j);
|
const TString& da_stato_fido = config.get("FIDO_DASTA", NULL, j);
|
||||||
const TString4 a_stato_fido = config.get("FIDO_ASTA", NULL, j);
|
const TString& a_stato_fido = config.get("FIDO_ASTA", NULL, j);
|
||||||
const bool residuo_fido = config.get_bool("FIDO_RES", NULL, j);
|
const bool residuo_fido = config.get_bool("FIDO_RES", NULL, j);
|
||||||
|
|
||||||
//per la numerazione scelta queryzza gli archivi alla ricerca dei documenti che rientrano nei parametri
|
//per la numerazione scelta queryzza gli archivi alla ricerca dei documenti che rientrano nei parametri
|
||||||
TString query;
|
TString query;
|
||||||
query << "USE DOC KEY 2\n";
|
query << "USE DOC KEY 2\n";
|
||||||
query << "SELECT (CODNUM=#CODNUM)&&(TIPODOC=#TIPODOC)&&(BETWEEN(STATO,#DASTATO,#ASTATO))\n";
|
query << "SELECT (CODNUM=#CODNUM)&&(TIPODOC=#TIPODOC)&&(BETWEEN(STATO,#DASTATO,#ASTATO))\n";
|
||||||
query << "FROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV='D'\n";
|
query << "FROM TIPOCF=C CODCF=#CODCF PROVV='D'\n";
|
||||||
query << "TO TIPOCF=#TIPOCF CODCF=#CODCF PROVV='D' ANNO=#ANNO DATADOC=#DATACALC";
|
query << "TO TIPOCF=C CODCF=#CODCF PROVV='D' ANNO=#ANNO DATADOC=#DATACALC";
|
||||||
|
|
||||||
TISAM_recordset documenti(query);
|
TISAM_recordset documenti(query);
|
||||||
|
|
||||||
const char str_tipocf[2] = { tipocf, 0 };
|
documenti.set_var("#CODCF", codcf);
|
||||||
documenti.set_var("#TIPOCF", TVariant(str_tipocf));
|
documenti.set_var("#ANNO", (long)datacalc.year());
|
||||||
documenti.set_var("#CODCF", codcf);
|
|
||||||
documenti.set_var("#ANNO", TVariant((long)datacalc.year()));
|
|
||||||
documenti.set_var("#DATACALC", datacalc);
|
documenti.set_var("#DATACALC", datacalc);
|
||||||
documenti.set_var("#CODNUM", TVariant(num_fido));
|
documenti.set_var("#CODNUM", num_fido);
|
||||||
documenti.set_var("#TIPODOC", TVariant(tipo_fido));
|
documenti.set_var("#TIPODOC", tipo_fido);
|
||||||
documenti.set_var("#DASTATO", TVariant(da_stato_fido));
|
documenti.set_var("#DASTATO", da_stato_fido);
|
||||||
documenti.set_var("#ASTATO", TVariant(a_stato_fido));
|
documenti.set_var("#ASTATO", a_stato_fido);
|
||||||
|
|
||||||
const int items = documenti.items();
|
const int items = documenti.items();
|
||||||
|
if (items > 0)
|
||||||
//adesso che ha i documenti che cercava..
|
|
||||||
for (bool ok = documenti.move_first(); ok; ok = documenti.move_next())
|
|
||||||
{
|
{
|
||||||
const TDocumento doc(documenti.cursor()->curr());
|
const TRectype& curr = documenti.cursor()->curr();
|
||||||
//deve tener conto di eventuali docs in valuta
|
//adesso che ha i documenti che cercava..
|
||||||
TCurrency_documento totdoc(ZERO, doc);
|
for (bool ok = documenti.move_first(); ok; ok = documenti.move_next())
|
||||||
|
|
||||||
//documento a residuo (tipo ordini)
|
|
||||||
if (residuo_fido)
|
|
||||||
{
|
{
|
||||||
totdoc.set_num(doc.valore(false, true));
|
if (ignore.full())
|
||||||
|
{
|
||||||
|
const TDoc_key k(curr);
|
||||||
|
if (k == ignore)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TDocumento doc(curr);
|
||||||
|
//deve tener conto di eventuali docs in valuta
|
||||||
|
TCurrency_documento totdoc(ZERO, doc);
|
||||||
|
|
||||||
|
//documento a residuo (tipo ordini)
|
||||||
|
if (residuo_fido)
|
||||||
|
totdoc.set_num(doc.valore(false, true));
|
||||||
|
else //documento normale (tipo fattura)
|
||||||
|
totdoc.set_num(doc.totale_doc());
|
||||||
|
|
||||||
|
totdoc.change_to_firm_val();
|
||||||
|
|
||||||
|
//le nac vanno con segno rovesciato
|
||||||
|
if (doc.is_nota_credito())
|
||||||
|
totdoc = -totdoc;
|
||||||
|
|
||||||
|
totalone += totdoc.get_num();
|
||||||
}
|
}
|
||||||
else //documento normale (tipo fattura)
|
|
||||||
{
|
|
||||||
totdoc.set_num(doc.totale_doc());
|
|
||||||
}
|
|
||||||
|
|
||||||
totdoc.change_to_firm_val();
|
|
||||||
|
|
||||||
//le nac vanno con segno rovesciato
|
|
||||||
if (doc.is_nota_credito())
|
|
||||||
totdoc = -totdoc;
|
|
||||||
|
|
||||||
totalone += totdoc.get_num();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -801,14 +805,14 @@ static real calcola_fido_da_documenti(const char tipocf, const long codcf, const
|
|||||||
|
|
||||||
|
|
||||||
//metodo per il calcolo fido di un cliente ad una data definita
|
//metodo per il calcolo fido di un cliente ad una data definita
|
||||||
real calcola_fido_cliente (const char tipocf, const long codcf, const TDate& datacalc, const int riskdays)
|
real calcola_fido_cliente (long codcf, const TDate& datacalc, const TDoc_key& ignore)
|
||||||
{
|
{
|
||||||
//PRIMA PARTE: controlla i movimenti
|
//PRIMA PARTE: controlla i movimenti
|
||||||
real saldo_contabile = calcola_saldo_contabile(tipocf, codcf, datacalc);
|
real saldo_contabile = calcola_saldo_contabile(codcf, datacalc);
|
||||||
//SECONDA PARTE: controlla il saldaconto
|
//SECONDA PARTE: controlla il saldaconto
|
||||||
real esposto_saldaconto = calcola_esposto_da_saldaconto(tipocf, codcf, datacalc, riskdays);
|
real esposto_saldaconto = calcola_esposto_da_saldaconto(codcf, datacalc);
|
||||||
//TERZA PARTE: controlla i documenti
|
//TERZA PARTE: controlla i documenti
|
||||||
real tot_documenti = calcola_fido_da_documenti(tipocf, codcf, datacalc);
|
real tot_documenti = calcola_fido_da_documenti(codcf, datacalc, ignore);
|
||||||
|
|
||||||
return saldo_contabile + esposto_saldaconto + tot_documenti;
|
return saldo_contabile + esposto_saldaconto + tot_documenti;
|
||||||
}
|
}
|
||||||
|
@ -118,12 +118,12 @@ public:
|
|||||||
bool load(const char* name);
|
bool load(const char* name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
// Metodi non appartenenti a classi
|
// Metodi non appartenenti a classi
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
|
|
||||||
//metodo per il calcolo del fido cliente
|
//metodo per il calcolo del fido cliente
|
||||||
real calcola_fido_cliente (const char tipocf, const long codcf, const TDate& datacalc, const int riskdays);
|
real calcola_fido_cliente (long codcf, const TDate& datacalc, const TDoc_key& ignore);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#define ATR_QTA 120
|
#define ATR_QTA 120
|
||||||
#define ATR_UM 121
|
#define ATR_UM 121
|
||||||
#define ATR_PRESTAZ 122
|
#define ATR_PRESTAZ 122
|
||||||
|
#define ATR_CODART 123
|
||||||
|
#define ATR_DESCART 124
|
||||||
|
|
||||||
#define ATR_CDC_V1 211
|
#define ATR_CDC_V1 211
|
||||||
#define ATR_CDC_V2 212
|
#define ATR_CDC_V2 212
|
||||||
|
@ -118,6 +118,32 @@ BEGIN
|
|||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
END
|
END
|
||||||
|
|
||||||
|
STRING ATR_CODART 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 7 "Articolo (CI) "
|
||||||
|
USE LF_ANAMAG
|
||||||
|
INPUT CODART ATR_CODART
|
||||||
|
DISPLAY "Codice@20" CODART
|
||||||
|
DISPLAY "Descrizione@50" DESCR
|
||||||
|
OUTPUT ATR_CODART CODART
|
||||||
|
OUTPUT ATR_DESCART DESCR
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
FLAGS "U"
|
||||||
|
FIELD S2
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING ATR_DESCART 50 34
|
||||||
|
BEGIN
|
||||||
|
PROMPT 40 7 ""
|
||||||
|
USE LF_ANAMAG KEY 2
|
||||||
|
INPUT DESCR ATR_DESCART
|
||||||
|
DISPLAY "Descrizione@50" DESCR
|
||||||
|
DISPLAY "Codice@20" CODART
|
||||||
|
COPY OUTPUT ATR_CODART
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
FLAGS "U"
|
||||||
|
END
|
||||||
|
|
||||||
LISTBOX ATR_CAMPI 15
|
LISTBOX ATR_CAMPI 15
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Campo default "
|
PROMPT 2 8 "Campo default "
|
||||||
@ -166,25 +192,25 @@ END
|
|||||||
|
|
||||||
DATE ATR_DISMISS
|
DATE ATR_DISMISS
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 11 "Data dismissione "
|
PROMPT 2 10 "Data dismissione "
|
||||||
FIELD D0
|
FIELD D0
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER ATR_GRUPPOA 3
|
NUMBER ATR_GRUPPOA 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 12 "Conto acquisti "
|
PROMPT 2 11 "Conto acquisti "
|
||||||
FIELD I3
|
FIELD I3
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER ATR_CONTOA 3
|
NUMBER ATR_CONTOA 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 22 12 ""
|
PROMPT 22 11 ""
|
||||||
FIELD I4
|
FIELD I4
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER ATR_SOTTOA 6
|
NUMBER ATR_SOTTOA 6
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 28 12 ""
|
PROMPT 28 11 ""
|
||||||
FIELD I5
|
FIELD I5
|
||||||
USE LF_PCON SELECT SOTTOCONTO!=""
|
USE LF_PCON SELECT SOTTOCONTO!=""
|
||||||
INPUT GRUPPO ATR_GRUPPOA
|
INPUT GRUPPO ATR_GRUPPOA
|
||||||
@ -205,7 +231,7 @@ END
|
|||||||
|
|
||||||
STRING ATR_DESCRCONTOA 50 35
|
STRING ATR_DESCRCONTOA 50 35
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 39 12 ""
|
PROMPT 39 11 ""
|
||||||
FLAG "U"
|
FLAG "U"
|
||||||
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
|
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
|
||||||
INPUT DESCR ATR_DESCRCONTOA
|
INPUT DESCR ATR_DESCRCONTOA
|
||||||
|
@ -39,6 +39,8 @@
|
|||||||
#define RSS_SOTTOA 139
|
#define RSS_SOTTOA 139
|
||||||
#define RSS_DESCRCONTOA 140
|
#define RSS_DESCRCONTOA 140
|
||||||
|
|
||||||
|
#define RSS_CODART 141
|
||||||
|
#define RSS_DESCART 142
|
||||||
|
|
||||||
#define RSS_CDC_V1 151
|
#define RSS_CDC_V1 151
|
||||||
#define RSS_CDC_V2 152
|
#define RSS_CDC_V2 152
|
||||||
|
@ -277,6 +277,32 @@ BEGIN
|
|||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
END
|
END
|
||||||
|
|
||||||
|
STRING RSS_CODART 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 11 "Articolo (CI) "
|
||||||
|
USE LF_ANAMAG
|
||||||
|
INPUT CODART RSS_CODART
|
||||||
|
DISPLAY "Codice@20" CODART
|
||||||
|
DISPLAY "Descrizione@50" DESCR
|
||||||
|
OUTPUT RSS_CODART CODART
|
||||||
|
OUTPUT RSS_DESCART DESCR
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
FLAGS "U"
|
||||||
|
FIELD S2
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING RSS_DESCART 50 34
|
||||||
|
BEGIN
|
||||||
|
PROMPT 40 11 ""
|
||||||
|
USE LF_ANAMAG KEY 2
|
||||||
|
INPUT DESCR RSS_DESCART
|
||||||
|
DISPLAY "Descrizione@50" DESCR
|
||||||
|
DISPLAY "Codice@20" CODART
|
||||||
|
COPY OUTPUT RSS_CODART
|
||||||
|
CHECKTYPE NORMAL
|
||||||
|
FLAGS "U"
|
||||||
|
END
|
||||||
|
|
||||||
LISTBOX RSS_CAMPI 15
|
LISTBOX RSS_CAMPI 15
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 12 "Campo default "
|
PROMPT 1 12 "Campo default "
|
||||||
@ -411,7 +437,7 @@ END
|
|||||||
|
|
||||||
STRING RSS_QUALIFICA 20
|
STRING RSS_QUALIFICA 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 21 "Qualfica "
|
PROMPT 2 21 "Qualifica "
|
||||||
FIELD S3[41,60]
|
FIELD S3[41,60]
|
||||||
END
|
END
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user