campo-sirio/ve/sconti.cpp

674 lines
20 KiB
C++
Raw Normal View History

#ifndef __SCONTI_H
#include "sconti.h"
#endif
#ifndef __VEUML_H
#include "veuml.h"
#endif
#ifndef __VERIG_H
#include "verig.h"
#endif
#ifndef __CONFIG_H
#include "config.h"
#endif
#ifndef __VECONF_H
#include "veconf.h"
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
#ifndef __ANAMAG_H
#include "../mg/anamag.h"
#endif
#ifndef __VEINI_H
#include "veini.h"
#endif
#ifndef __VELIB_H
#include "velib.h"
#endif
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
#ifndef __AGE_H
#include "../pr/agenti.h"
#endif
#ifndef __PER_H
#include "../pr/percprov.h"
#endif
HIDDEN const real CENTO(100.0);
bool TCond_vendita::set_sconto( const char * exp, bool signal )
{
bool valid= scontoexpr2perc(exp,signal,_sconto,_molt_sconto );
if (_load_mask && _riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active())
_riga->set(FR_SCONTO, _sconto);
return valid;
}
real TCond_vendita::normalize_valuta(const real & val, const char * val_rif)
{
real normalized = val;
if (normalized != ZERO)
{
TString16 valuta(_testa->get(F_CODVAL));
TString16 valuta_rif(val_rif);
if (valuta == "LIT") valuta.cut(0);
if (valuta_rif == "LIT") valuta_rif.cut(0);
if (valuta != valuta_rif)
{
if (valuta_rif.not_empty())
normalized *= _condv.get_real("CAMBIO");
real cambio(_testa->get(F_CAMBIO));
if (cambio == ZERO)
cambio = 1.0;
normalized /= cambio;
normalized.round(cambio == 1.0 ? 0 : 3);
}
}
return normalized;
}
void TCond_vendita::set_prezzo(const real & prezzo, const char * val_rif)
{
_prezzo = normalize_valuta(prezzo, val_rif);
if (_load_mask && _riga && _riga->id2pos(FR_PREZZO) >= 0 && _riga->field(FR_PREZZO).active())
_riga->set(FR_PREZZO, _prezzo);
}
void TCond_vendita::set_provv(const real & provv)
{
_provv = provv;
if (_load_mask && _riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
_riga->set(FR_PERCPROV, _provv);
}
void TCond_vendita::set_iva(const TString & codiva)
{
_codiva = codiva;
if (_load_mask && _riga && _riga->id2pos(FR_CODIVA) >= 0 && _riga->field(FR_CODIVA).active())
_riga->set(FR_CODIVA, _codiva);
}
bool TCond_vendita::cerca( int tiporicerca )
{
if( config_ditta().get_bool( "GES", "ve", tiporicerca ) )
{
// Se h attiva la gestione contratti ...
_condv.setkey( 1 );
_condv.zero( );
switch( tiporicerca )
{
case A_CONTRATTI:
{
const TString16 codcont(testa().get(F_CODCONT));
if (codcont.empty())
return FALSE;
_condv.put("TIPO", "C");
if(config_ditta().get_bool("GESCONCC", "ve"))
{
_condv.put("TIPOCF", clifo().tipo());
_condv.put("CODCF", clifo().codice());
}
_condv.put("COD", codcont);
}
break;
case A_LISTINI:
{
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
if( config_ditta().get_bool("GESLISCV", "ve"))
_condv.put("CATVEN", testa().get(F_CATVEN));
_condv.put("COD", codlist);
}
break;
case A_OFFERTE:
{
const TString16 codcamp(testa().get(F_CODCAMP));
if (codcamp.empty())
return FALSE;
_condv.put("TIPO", "O");
_condv.put("COD", codcamp);
}
break;
}
if( _condv.read( ) == NOERR )
{
// _rcondv.setkey( 2 );
const bool gest_scagl = _condv.get_bool("GESTSCAGL");
const TString16 seqricrighe( _condv.get( "SEQRIC" ) );
bool found = FALSE;
for( int i = 0; !found && i < seqricrighe.len( ); i ++ )
{
_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);
char ricerca = seqricrighe[ i ];
_rcondv.put( "TIPORIGA", ricerca );
switch( ricerca )
{
case 'A':
{
const TString codriga = riga().get(FR_CODARTMAG);
_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;
}
}
break;
case 'R':
_rcondv.put("CODRIGA", anamag().get( "RAGGFIS"));
_rcondv.read();
break;
case 'S':
{
_rcondv.put( "CODRIGA", anamag().get("GRMERC"));
_rcondv.read( );
}
break;
case 'G':
{
_rcondv.put( "CODRIGA", anamag().get("GRMERC").left(3));
_rcondv.read( );
}
break;
default:
break;
}
found = _rcondv.good();
}
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;
}
}
// Ricerca fallita
return FALSE;
}
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
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':
val = anamag().get_real(ANAMAG_PERCPROVV);
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':
campo = anamag().get(ANAMAG_GRMERC);
campo.rpad(anamag().curr().length(ANAMAG_GRMERC));
campo.cut(3);
break;
case 'R':
campo = anamag().get(ANAMAG_GRMERC);
campo.rpad(anamag().curr().length(ANAMAG_GRMERC));
break;
case 'F':
campo = anamag().get(ANAMAG_RAGGFIS);
campo.rpad(anamag().curr().length(ANAMAG_RAGGFIS));
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;
}
void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
{
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
TString codart = anamag().get(ANAMAG_CODART);
const TString codriga = riga().get( FR_CODARTMAG );
_ivarid = clifo().vendite().get_bool(CFV_IVARID);
_load_mask = !load_um_only && !load_scagl_only;
if(anamag().bad() || codriga != codart )
{
anamag().setkey(1);
anamag().put("CODART", codriga);
if (anamag().read() != NOERR)
{
set_prezzo(ZERO);
set_sconto("");
set_iva("");
set_provv(ZERO);
return;
}
}
codart = umart().get( "CODART" );
const TString16 umriga(riga().get(FR_UMQTA));
const TString16 um(umart().get("UM"));
if (umart().bad() || codart != codriga || um != umriga)
{
umart().setkey(2);
umart().put("CODART", codriga);
umart().put("UM", um);
if (umart().read != NOERR)
umart().zero();
}
const bool found_condv = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
const bool cv_scagl = _condv.get_bool("GESTSCAGL");
const bool cv_um = _condv.get_bool("GESTUM");
if (found_condv)
{
_load_mask |= load_scagl_only && cv_scagl;
_load_mask |= load_um_only && cv_um;
set_prezzo(_rcondv.get_real("PREZZO"), _condv.get("CODVAL"));
_load_mask = !load_um_only && !load_scagl_only;
}
else
set_prezzo(umart().get_real("PREZZO"));
if (_ivarid)
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
set_iva(anamag().get(ANAMAG_CODIVAR));
else
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
set_iva(anamag().get(ANAMAG_CODIVA));
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");
switch (gestione)
{
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
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", clifo().vendite().get(CFV_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())
{
const TString16 codage(_testa->get(F_CODAG));
if (codage.not_empty())
{
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
TLocalisamfile age(LF_AGENTI);
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
age.put(AGE_CODAGE, codage);
if (age.read() == NOERR)
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
{
TString16 seqric(age.get(AGE_SEQRIC));
TString16 fcodpr;
TString16 codpr;
real percprovv = ZERO;
if (seqric[0] == '-')
seqric = config_ditta().get( "AGETIPOPERC", "ve" );
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
int len = seqric.len();
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
_load_mask |= load_scagl_only && sco_scagl;
_load_mask |= load_scagl_only && sco_um_gest;
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++)
{
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
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);
}
Sostituito il file vefields.wri con il file vefields.txt Sostituite le tabelle Agenti e Provvigioni con i rispettivi archivi. !!! Devono essere sostituite sui menu e si devono controllare di conseguenza i moduli statistiche di vendita e magazzino !!! Modificato il meccanismo di ricerca delle percentuali di provvigione. Bisogna testare tutte le combinazioni basandosi sulle possibilita' offerte dal nuovo archivio agenti. Per quanto riguarda il valore della provvigione alla percentuale di base viene aggiunta la percentuale reperita con la sequenza alternativa definita sull'archivio agenti. Aggiunto il metodo agente sui documenti. Aggiunto sui tipi documento il flag attivo per le provvigioni di ovvio significato e lo stato a partire dal quale si debbono memorizzare le provvigioni. Aggiunta la funzione TOTPROVV(ndec = AUTO_DECIMALS) per i documenti. Restituisce il valore totale delle provvigioni tenedo conto anche del campo provvigioni definito per l'agente. !!! Deve essere utilizzato solo per avere il valore della provvigione da utilizzare in un calcolo e non per visualizzare o calcolare la provvigione stessa. Aggiunta definizione del campo provvigione della riga (PROVV=....) nei profili riga dei documenti per definire la provvigione della riga quando non e' il default (importo scontato * percentuale di provvigione della riga). Aggiunto il metodo provvigioni alle righe. Aggiunta definizione del campo provvigione del documento (TOTPROVV=....) nei profili documento per definire la provvigione totale quando non e' il default (somma delle provvigioni della riga). Il campo che viene definito come totale delle provvigioni non puo' contenere la funzione TOTPROVV. Aggiunto il metodo provvigione del documento. git-svn-id: svn://10.65.10.50/trunk@5478 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-29 11:08:40 +00:00
percprovv += percalt;
set_provv(percprovv);
}
}
}
if (found_condv && _testa->is_running())
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);
int current_doc_row = sh.selected() + 1;
TDocumento & doc = testa().doc();
bool update = FALSE;
if (doc[current_doc_row].is_omaggio())
return;
if (current_doc_row < doc.rows())
{
TRiga_documento & r = doc[current_doc_row + 1];
if (r.is_omaggio() && r.is_generata())
{
sh.update_row(current_doc_row - 1);
doc.destroy_row(current_doc_row + 1, TRUE);
sh.destroy(current_doc_row, FALSE);
update = TRUE;
}
}
real qta = _riga->get(FR_QTA);
bool creata = FALSE;
if (full || qta != ZERO)
{
const TString80 codart_omaggio(_rcondv.get("CODARTOM"));
if (tipo_riga[0] == '_')
{
TConfig cnf(CONFIG_STUDIO, "ve");
tipo_riga = cnf.get("TROMAGGI");
}
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");
}
creata = codart_omaggio.not_empty() && tipo_riga.not_empty() && qta != ZERO;
if (creata)
{
TRiga_documento & curr_row = doc[current_doc_row];
TToken_string & rw = sh.row(current_doc_row - 1);
sh.update_row(current_doc_row - 1);
curr_row.autosave(sh);
TRiga_documento & r = doc.insert_row(current_doc_row + 1, tipo_riga);
r.generata();
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);
real prezzo(_rcondv.get("PROMAGGIO"));
const TString16 codval(_condv.get("CODVAL"));
const TString16 codiva_cli(clifo().vendite().get(CFV_ASSFIS));
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);
r.autosave(sh);
prezzo = normalize_valuta(prezzo, codval);
r.put("PREZZO", prezzo);
r.autoload(sh);
update = TRUE;
// curr_row.autoload(sh);
}
}
if (update)
{
sh.force_update();
sh.select(creata ? current_doc_row : current_doc_row - 1);
}
}
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 ),
_anamag(anamag), _umart(umart), _config_ditta(ditta), _ivarid(FALSE)
{
}