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
This commit is contained in:
parent
720aa5089c
commit
2cc5c59b38
307
ve/sconti.cpp
307
ve/sconti.cpp
@ -22,6 +22,10 @@
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
#ifndef __ANAMAG_H
|
||||
#include "../mg/anamag.h"
|
||||
#endif
|
||||
|
||||
#ifndef __VEINI_H
|
||||
#include "veini.h"
|
||||
#endif
|
||||
@ -30,96 +34,18 @@
|
||||
#include "velib.h"
|
||||
#endif
|
||||
|
||||
#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 )
|
||||
{
|
||||
/*
|
||||
TString80 goodexp;
|
||||
// Elimina gli spazi molesti
|
||||
// work.strip_spaces( );
|
||||
if (exp && *exp)
|
||||
{
|
||||
TString80 num;
|
||||
bool dec = FALSE; // Flag che indica se si attende l'inizio di un numero
|
||||
bool startnum = TRUE; // Flag che indica se siamo all'inizio di un numero
|
||||
int errorchar = ' ';
|
||||
|
||||
_molt_sconto = 1.0;
|
||||
// Flag che indica se sono nella parte decimale di un numero
|
||||
for (const char * s = exp; *s && errorchar == ' '; s++)
|
||||
{
|
||||
const char c = *s;
|
||||
switch(c)
|
||||
{
|
||||
case '+':
|
||||
case '-':
|
||||
// Se ero in in numero ...
|
||||
if( !startnum )
|
||||
{
|
||||
// Aggiunge il numero alla sequenza
|
||||
real newval( num );
|
||||
_molt_sconto *= ( CENTO - newval ) / CENTO;
|
||||
goodexp << num;
|
||||
}
|
||||
// Inizia il nuovo numero
|
||||
num = (c == '-') ? "-" : "+";
|
||||
startnum = TRUE;
|
||||
dec = FALSE;
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
num << c;
|
||||
startnum = FALSE;
|
||||
break;
|
||||
case '.':
|
||||
case ',':
|
||||
if(!dec)
|
||||
{
|
||||
if( startnum )
|
||||
num << '0'; // Se occorreva un numero ci metto lo 0
|
||||
num << '.'; // Interpreto la virgola come punto
|
||||
dec = TRUE;
|
||||
startnum = TRUE;
|
||||
}
|
||||
else
|
||||
errorchar = c; // Se siamo gi` nella parte decimale segnala un errore
|
||||
break;
|
||||
case ' ':
|
||||
break;
|
||||
default:
|
||||
errorchar = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Controlla la validita`
|
||||
valid = errorchar == ' ';
|
||||
|
||||
if (valid)
|
||||
{
|
||||
// Aggiunge l'ultimo numero preso
|
||||
real lastval( num );
|
||||
_molt_sconto *= ( CENTO - lastval ) / CENTO;
|
||||
goodexp << num; // Assegna la nuova espressione formattata bene
|
||||
}
|
||||
else
|
||||
{
|
||||
if (signal) // Se richiesto segnala l'errore
|
||||
warning_box( "Espressione di sconto non valida. Errore sul carattere %c.", errorchar);
|
||||
_molt_sconto = 1.0; // Azzera la sequenza di percentuali
|
||||
goodexp = "";
|
||||
}
|
||||
}
|
||||
_sconto = goodexp;
|
||||
*/
|
||||
bool valid= scontoexpr2perc(exp,signal,_sconto,_molt_sconto );
|
||||
|
||||
if (_load_mask && _riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active())
|
||||
@ -316,10 +242,126 @@ bool TCond_vendita::cerca( int tiporicerca )
|
||||
// Ricerca fallita
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
TString codart = anamag().get( "CODART" );
|
||||
TString codart = anamag().get(ANAMAG_CODART);
|
||||
const TString codriga = riga().get( FR_CODARTMAG );
|
||||
|
||||
_ivarid = clifo().vendite().get_bool(CFV_IVARID);
|
||||
@ -366,9 +408,9 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
||||
|
||||
|
||||
if (_ivarid)
|
||||
set_iva(anamag().get("CODIVAR"));
|
||||
set_iva(anamag().get(ANAMAG_CODIVAR));
|
||||
else
|
||||
set_iva(anamag().get("CODIVA"));
|
||||
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");
|
||||
@ -480,56 +522,51 @@ void TCond_vendita::ricerca(bool load_um_only, bool load_scagl_only)
|
||||
|
||||
if (codage.not_empty())
|
||||
{
|
||||
TTable age("AGE");
|
||||
TLocalisamfile age(LF_AGENTI);
|
||||
|
||||
age.put("CODTAB", codage);
|
||||
age.put(AGE_CODAGE, codage);
|
||||
if (age.read() == NOERR)
|
||||
{
|
||||
char tipoprovv = age.get("S6")[0];
|
||||
{
|
||||
TString16 seqric(age.get(AGE_SEQRIC));
|
||||
TString16 fcodpr;
|
||||
TString16 codpr;
|
||||
real percprovv = ZERO;
|
||||
|
||||
if (tipoprovv <= ' ')
|
||||
tipoprovv = config_ditta().get_char( "AGETIPOPERC", "ve" );
|
||||
if (seqric[0] == '-')
|
||||
seqric = config_ditta().get( "AGETIPOPERC", "ve" );
|
||||
|
||||
int len = seqric.len();
|
||||
|
||||
switch (tipoprovv)
|
||||
{
|
||||
case 'A':
|
||||
set_provv(age.get_real("R0"));
|
||||
break;
|
||||
case 'C':
|
||||
set_provv(real(clifo().vendite().get(CFV_PERCPROVV)));
|
||||
break;
|
||||
case 'L':
|
||||
if (found_condv)
|
||||
{
|
||||
_load_mask |= load_scagl_only && sco_scagl;
|
||||
_load_mask |= load_scagl_only && sco_um_gest;
|
||||
set_provv(_rcondv.get_real("PERCPROVV"));
|
||||
}
|
||||
else
|
||||
set_provv(anamag().get_real("PERCPROVV"));
|
||||
break;
|
||||
case 'V':
|
||||
{
|
||||
TString16 catven(testa().get(F_CATVEN));
|
||||
|
||||
if (catven.empty())
|
||||
catven = clifo().vendite().get(CFV_CATVEN);
|
||||
|
||||
if (catven.not_empty())
|
||||
{
|
||||
TTable cve("CVE");
|
||||
|
||||
cve.put("CODTAB", catven);
|
||||
if (cve.read() == NOERR)
|
||||
set_provv(cve.get_real("R0"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
set_provv("");
|
||||
break;
|
||||
_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++)
|
||||
{
|
||||
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);
|
||||
}
|
||||
percprovv += percalt;
|
||||
set_provv(percprovv);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found_condv && _testa->is_running())
|
||||
|
@ -59,6 +59,7 @@ public:
|
||||
real sconto_val() const { return _molt_sconto;}
|
||||
real get_prezzo() const { return _prezzo; }
|
||||
real get_provv() const { return _provv; }
|
||||
real get_percprovv(char tipoprovv, const TString & codpr, TLocalisamfile & age) const;
|
||||
const TString & get_iva() const { return _codiva; }
|
||||
|
||||
void set_clifo( TCli_for * clifo) { _clifo = clifo; }
|
||||
|
153
ve/vefields.txt
Executable file
153
ve/vefields.txt
Executable file
@ -0,0 +1,153 @@
|
||||
CUMULAALC Cumula articolo/listino/contratto
|
||||
GES[ ... ] Flag di gestione Listini/Contratti/Offerte
|
||||
Gli indici sono nel file VECONF.H
|
||||
GESUM[ ... ] Gestione per unità di misura
|
||||
GESSCA[ ... ] Gestione per scaglioni
|
||||
GESSO[ ... ] Gestione sconti/omaggi
|
||||
GESLISCV Gestione codice listino+codice cat. vendite
|
||||
GESCONCC Gestione codice cliente+codice contratto
|
||||
SEQRICRIGHE[1..4] Sequenza di ricerca delle righe
|
||||
A|Codice articolo
|
||||
L|Codice linea
|
||||
C|Codice linea/categoria
|
||||
R|Codice raggruppamento fiscale
|
||||
GESSCO Gestione sconti
|
||||
N|Non gestire
|
||||
P|Percentuale su anagrafica
|
||||
T|Gestione tabella sconti
|
||||
A|Gestione archivio sconti
|
||||
SCOKEY Chiave sconti
|
||||
V|Tab. categorie vendite
|
||||
C|Tab. sconti clienti
|
||||
Z|Tab. zone
|
||||
M|Tab. modalitÓ di pagamento
|
||||
SCOTIPCAL Tipo di calcolo degli sconti
|
||||
R|Sconti sulle righe merci
|
||||
G|Sconti sul valore globale merci
|
||||
GESSCOIMP Gestione sconti per importo
|
||||
GESSCORIGA Gestione sconti per riga
|
||||
N|Non gestire
|
||||
L|Perc. su anagrafica/listini/contratti
|
||||
A|Gest. arch. sconti
|
||||
C|Perc. indicata su anagrafica cliente
|
||||
GESSCORIGACV Gestione categoria vendita in chiave archivio sconti
|
||||
// ve0200b
|
||||
GESAGE Gestione agenti
|
||||
GESSUBAGE Gestione subagenti
|
||||
AGETIPOPERC Tipo percentuale
|
||||
V|Tab. categorie vendite agenti
|
||||
A|Tab. agenti
|
||||
C|Archivio clienti
|
||||
L|Archivio listini o contratti
|
||||
P|Provvigioni sulla tabella agenti
|
||||
AGEARCPROVV Gestione archivio provvigioni
|
||||
AGEKEYPROVV[1..4] Chiavi archivio provvigioni
|
||||
AGELIQPROVV Liquidazione provvigioni
|
||||
F|Liquidate sul valore del fatturato
|
||||
M|Liq. sul valore fatt. e sul valore merce
|
||||
GESVAL Gestione documenti in valuta
|
||||
GESVALAC Gestione archivio cambi
|
||||
GESLIN Gestione documenti lingua
|
||||
GESSOSPIMP Gestione documenti in sospensione di imposta
|
||||
GESOCCAS Gestione clienti occasionali
|
||||
GESOCCCHK Abilita il checko sul c.f./p.iva per occasionali
|
||||
PIEDE[1..40] Etichette dei totalizzatori piede documento
|
||||
ARRLIV[1..6] Scaglione di arrotondamento
|
||||
ARRARG[1..7] Valore a cui arrotondare
|
||||
// ve0200c
|
||||
SCOPRCOD Sconti percentuale: Codice tabella sconti
|
||||
SCOPRCODCON Sconti percentuale: Codice contabilit 2 + 2 6
|
||||
SCOPRNPIEDE Sconti percentuale: Numero progressivo piede
|
||||
SCOIMCOD Sconti a importo: Codice tabella sconti
|
||||
SCOIMCODCON Sconti a importo: Codice contabilit 2 + 2+ 6
|
||||
SCOIMNPIEDE Sconti a importo: Numero progressivo piede
|
||||
// ve0200d
|
||||
SPINADD Spese incasso: Flag addebito
|
||||
SPINCODSP Spese incasso: Codice spese
|
||||
SPINCODIVA Spese incasso: Codice IVA
|
||||
SPINCODCON Spese incasso: Codice contabilit 2 + 2 + 6
|
||||
SPININCPR Spese incasso: Incasso prima rata
|
||||
SPINNPIEDE Spese incasso: Numero progressivo piede
|
||||
SPINIMRD Spese incasso: Importo rimessa diretta
|
||||
SPINIMTR Spese incasso: Importo tratta
|
||||
SPINIMRB Spese incasso: Importo RiBa
|
||||
SPINIMCES Spese incasso: Importo cessione
|
||||
SPINIMPAG Spese incasso: Importo paghero'
|
||||
SPINIMLET Spese incasso: Importo lettera di credito
|
||||
SPINIMTA Spese incasso: Importo tratta accettata
|
||||
SPINIMRID Spese incasso: Importo RID
|
||||
SPINIMBON Spese incasso: Importo bonifico
|
||||
SPBRBADD Spese bolli RB: Flag addebito
|
||||
SPBRBCODSP Spese bolli RB: Codice spese
|
||||
SPBRBCODIVA Spese bolli RB: Codice IVA
|
||||
SPBRBCODCONT Spese bolli RB: Codice contabilita' 2 + 2 + 6
|
||||
SPBRBINCPR Spese bolli RB: Incasso prima rata
|
||||
SPBRBNPIEDE Spese bolli RB: Numero progressivo piede
|
||||
SPBRBSCA[1..7] Spese bolli RB: Scaglioni
|
||||
SPBRBIMP[1..7] Spese bolli RB: Importi scaglioni
|
||||
SPBRBIMPMINRB Spese bolli RB: Importo minimo RiBa
|
||||
SPBRBCODPAGALT Spese bolli RB: Cond. pagamento alternativo
|
||||
SPBRBCLAPAGRB Spese bolli RB: Classif. pag. RB a richiesta
|
||||
SPBFEADD Spese bolli FE: Flag addebito
|
||||
SPBFECODSP Spese bolli FE: Codice spese
|
||||
SPBFECODIVA Spese bolli FE: Codice IVA
|
||||
SPBFECODCONT Spese bolli FE: Codice contabilit 2 + 2 + 6
|
||||
SPBFEINCPR Spese bolli FE: Incasso prima rata
|
||||
SPBFENPIEDE Spese bolli FE: Numero progressivo piede
|
||||
SPBFEIMPMINFAT Spese bolli FE: Importo minimo fattura
|
||||
SPBFEIMPBOLLO Spese bolli FE: Importo del bollo
|
||||
SPTRADD Spese bolli TR: Flag addebito
|
||||
SPTRCODSP Spese bolli TR: Codice spese
|
||||
SPTRCODIVA Spese bolli TR: Codice IVA
|
||||
SPTRCODCON Spese bolli TR: Codice contabilit 2 + 2 + 6
|
||||
SPTRINCPR Spese bolli TR: Incasso prima rata
|
||||
SPTRNPIEDE Spese bolli TR: Numero progressivo piede
|
||||
SPTRPERCSPTR Spese bolli TR: Percentuale spese tratte
|
||||
SPTRIMPMINBOL Spese bolli TR: Importo minimo bollo
|
||||
SPTRIMPMINTR Spese bolli TR: importo minimo tratte
|
||||
SPTRCODPAGALT Spese bolli TR: Cond. pagamento alternativo
|
||||
SPTRCLASPAG Spese bolli TR: Classificazione pagamento
|
||||
SPTECODSP Spese bolli TE: Codice spese
|
||||
SPTECODIVA Spese bolli TE: Codice IVA
|
||||
SPTECODCON Spese bolli TE: Codice contabilit 2 + 2 + 6
|
||||
SPTEINCPR Spese bolli TE: Incasso prima rata
|
||||
SPTENPIEDE Spese bolli TE: Numero progressivo piede
|
||||
SPTEPERCSPTR Spese bolli TE: Percentuale spese tratte
|
||||
SPTEIMPMINBOL Spese bolli TE: Importo minimo bollo
|
||||
// ve0200e
|
||||
CODARTDES Codice articolo: Descrizione
|
||||
CODARTLUN[1..3] Codice articolo: Lunghezza campi
|
||||
CODARTPIC[1..3] Codice articolo: Tipo campi
|
||||
INDARTDES[1..2] Indici articolo: Descrizioni
|
||||
INDARTLUN[1..2] Indici articolo: Lunghezze
|
||||
INDARTPIC[1..2] Indici articolo: Tipo campi
|
||||
ARTGESLIN Gestione articoli in lingua
|
||||
ARTCODLIN[1..4] Codici delle lingue per la gestione articoli
|
||||
ARTGESMAG Gestione di pi¨ magazzini
|
||||
ARTGESDEP Gestione depositi
|
||||
ARTGESCOMM Gestione commesse
|
||||
ARTGESQDEC Gestione dei decimali sulle quantit
|
||||
ARTGESVAL Gestione valuta
|
||||
ARTRIPIND Ripetizione indice articolo
|
||||
ARTGESDESCEST Gestione delle descrizioni estese
|
||||
ARTGESLOTTI Gestione dei lotti
|
||||
N|Non gestire
|
||||
D|Gestiti con lotto data
|
||||
Q|Gestiti con lotto descr. qualitÓ
|
||||
ARTGESTAGLIA Gestione delle taglie
|
||||
ARTDESCHI[1..2] Descrizione delle chiavi
|
||||
ARTGESUM Gestione u. m. articolo
|
||||
ARTGESCODIVA Gestione secondo codice IVA
|
||||
ARTGESPLN Gestione pesi lordo e netto
|
||||
ARTGESASPBEN Gestione aspetto beni
|
||||
ARTGESCODGR Gestione codice gruppo
|
||||
ARTGESDB Gestione campo distinta base
|
||||
ARTGESCATVEN Gestione categoria vendita
|
||||
ARTGESCATACQ Gestione categoria acquisto
|
||||
ARTGESCODFOR Gestione codice fornitore
|
||||
SPBRBIMP[1..7] Spese bolli RB: Importi scaglioni
|
||||
SPBRBIMPMINRB Spese bolli RB: Importo minmo RB
|
||||
SPTRIMPMINBOL Spese bolli TR: Importo minimo bollo
|
||||
SPTRIMPMINTR Spese bolli TR: Importo minimoo tratte
|
||||
SPTRCODPAGALT Spese bolli TR: Cond. pagamento alternativo
|
||||
SPTRCLASPAG
|
BIN
ve/vefields.wri
BIN
ve/vefields.wri
Binary file not shown.
10
ve/velib.h
10
ve/velib.h
@ -463,7 +463,9 @@ public:
|
||||
TRiepilogo_iva() : _tipo(0) {}
|
||||
~TRiepilogo_iva() {};
|
||||
};
|
||||
|
||||
|
||||
class TAgente ;
|
||||
|
||||
class TDocumento : public TMultiple_rectype // velib03
|
||||
{
|
||||
TRecfield *_tipocf;
|
||||
@ -480,9 +482,6 @@ class TDocumento : public TMultiple_rectype // velib03
|
||||
static bool _has_provv;
|
||||
int _liv_len[4];
|
||||
|
||||
// TRecord_array _rows; // Array di TRectype per le righe documenti di vendita.
|
||||
// bool _nuovo;
|
||||
|
||||
TCond_vendita * _condv;
|
||||
TCli_for _cli_for;
|
||||
TProvvigioni_agente* _provv_agente;
|
||||
@ -519,7 +518,8 @@ public:
|
||||
TAssoc_array & tabella_iva() { update_tabella_iva(); return _tabella_iva; }
|
||||
TCond_vendita & condv() const {CHECK(_condv, "Condizioni di vendita nulle"); return *_condv;}
|
||||
TCli_for & clifor() const;
|
||||
TOccasionale & occas() const;
|
||||
TOccasionale & occas() const;
|
||||
const TAgente & agente() const;
|
||||
void set_condv(TCond_vendita * condv) { _condv = condv; }
|
||||
|
||||
virtual TDocumento & operator =(const TDocumento & d) {return copy(d);}
|
||||
|
@ -235,4 +235,3 @@ real iva(real imponibile, const TIVA & iva,int ndec)
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
|
@ -566,6 +566,9 @@ int TExpr_documento::parse_user_func(const char * name, int nparms) const
|
||||
else
|
||||
if (strcmp(name, "IMPOSTE") == 0)
|
||||
return nparms < 3 ? _imposte : -1;
|
||||
else
|
||||
if (strcmp(name, "TOTPROVV") == 0)
|
||||
return nparms < 3 ? _totprovv : -1;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
@ -813,6 +816,19 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
|
||||
val = _doc->imposta(spese, ndec);
|
||||
}
|
||||
break;
|
||||
case _totprovv:
|
||||
{
|
||||
int ndec = AUTO_DECIMALS;
|
||||
|
||||
if (nparms > 0)
|
||||
ndec = (int) stack.peek_real().integer();
|
||||
else
|
||||
stack.push(ZERO);
|
||||
real & val = stack.peek_real();
|
||||
|
||||
val = _doc->provvigione(ndec);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
TExpression::evaluate_user_func(index, nparms, stack, type);
|
||||
break;
|
||||
|
@ -42,6 +42,10 @@
|
||||
#include "../sv/svlib01.h"
|
||||
#endif
|
||||
|
||||
#ifndef __PRLIB_H
|
||||
#include "../pr/prlib.h"
|
||||
#endif
|
||||
|
||||
#include "../mg/movmag.h"
|
||||
///////////////////////////////////////////////////////////
|
||||
// Movimento di magazzino
|
||||
@ -156,17 +160,25 @@ void TTipo_documento::read_formule()
|
||||
_formule.add(_spese);
|
||||
if (provvigioni())
|
||||
{
|
||||
_totprovv = profile.get("TOTPROVV", "MAIN");
|
||||
|
||||
if (_totprovv.empty())
|
||||
_totprovv = "TOTPROVV";
|
||||
TString80 campo(profile.get("TOTPROVV", "MAIN"));
|
||||
|
||||
if (campo.empty())
|
||||
campo = "TOTPROVV";
|
||||
|
||||
frd.put("CODTAB", _totprovv);
|
||||
frd.put("CODTAB", campo);
|
||||
_totprovv = "_";
|
||||
_totprovv << campo;
|
||||
if (frd.read() != NOERR)
|
||||
_formule_documento.add(_totprovv, new TFormula_documento(_documento, _totprovv, "SOMMA(\"PROVV()\")"), TRUE);
|
||||
if (_formule.find(_totprovv) < 0)
|
||||
_formule.add(_totprovv);
|
||||
}
|
||||
frd.zero();
|
||||
TString80 expr(frd.get("S1"));
|
||||
if (expr.empty())
|
||||
expr = "SOMMA(\"PROVV()\")";
|
||||
_formule_documento.add(_totprovv, new TFormula_documento(_documento, _totprovv, expr, TRUE));
|
||||
if (_formule.find(campo) < 0)
|
||||
_formule.add(campo);
|
||||
_formule.add(_totprovv);
|
||||
_formule_documento.add(campo, new TFormula_documento(_documento, campo, "TOTPROVV()"), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
bool TTipo_documento::stato_with_mov_mag(const char stato) const
|
||||
@ -238,6 +250,23 @@ TRiepilogo_iva::TRiepilogo_iva(const TIVA & codiva) : _codiva(codiva)
|
||||
_tipo = 1;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Agenti
|
||||
///////////////////////////////////////////////////////////
|
||||
class TAgenti_cache : public TRecord_cache
|
||||
{
|
||||
protected:
|
||||
virtual TObject* rec2obj(const TRectype& rec) const { return new TAgente(rec);}
|
||||
|
||||
public:
|
||||
const TAgente& agente(const char* chiave) { return (const TAgente &) get(chiave);}
|
||||
|
||||
TAgenti_cache() : TRecord_cache(LF_AGENTI) {}
|
||||
virtual ~TAgenti_cache() { }
|
||||
};
|
||||
|
||||
HIDDEN TAgenti_cache _agenti;
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Documento per vendite
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -951,17 +980,22 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
|
||||
|
||||
err = TMultiple_rectype::write_rewrite(f, re);
|
||||
|
||||
if (err == NOERR && clifor().occasionale())
|
||||
if (err == NOERR)
|
||||
{
|
||||
if (get("OCFPI").not_empty())
|
||||
if (clifor().occasionale())
|
||||
{
|
||||
TLocalisamfile o(LF_OCCAS);
|
||||
TOccasionale & occ = occas();
|
||||
|
||||
err = occ.write(o);
|
||||
if (err == _isreinsert)
|
||||
err = occ.rewrite(o);
|
||||
if (get("OCFPI").not_empty())
|
||||
{
|
||||
TLocalisamfile o(LF_OCCAS);
|
||||
TOccasionale & occ = occas();
|
||||
|
||||
err = occ.write(o);
|
||||
if (err == _isreinsert)
|
||||
err = occ.rewrite(o);
|
||||
}
|
||||
}
|
||||
if (_has_provv && tipo().provvigioni() && tipo().stato_provvigioni() >= stato())
|
||||
myself.write_provvigioni();
|
||||
}
|
||||
if (tipo().statistiche() && _has_stat_ven)
|
||||
{
|
||||
@ -1454,9 +1488,12 @@ real TDocumento::provvigione(int ndec) const
|
||||
real val;
|
||||
|
||||
if (ndec == AUTO_DECIMALS)
|
||||
ndec = in_valuta() ? 3 : 0;
|
||||
// update for agente ???
|
||||
const TString16 & field = tipo().totprovv();
|
||||
ndec = in_valuta() ? 3 : 0;
|
||||
|
||||
TString16 field(agente().campoprovv());
|
||||
|
||||
if (field.empty())
|
||||
field = tipo().totprovv();
|
||||
|
||||
if (field.not_empty())
|
||||
return get_real(field);
|
||||
@ -1534,6 +1571,11 @@ TOccasionale & TDocumento::occas() const
|
||||
}
|
||||
return (TOccasionale &) _occas;
|
||||
}
|
||||
|
||||
const TAgente & TDocumento::agente() const
|
||||
{
|
||||
return _agenti.agente(get(DOC_CODAG));
|
||||
}
|
||||
|
||||
TDocumento & TDocumento::copy(const TDocumento & d)
|
||||
{
|
||||
|
@ -116,7 +116,7 @@ bool TFatturazione_bolle::raggruppa(TDocumento& doc_in, TDocumento& doc_out)
|
||||
if (riga_uguale(2)) campi_riga.add("PREZZO|SCONTO");
|
||||
}
|
||||
|
||||
for (int r = 1; r <= doc_in.physical_rows(); r++)
|
||||
for (int r = 1; r <= doc_in.physical_rows(); r++)
|
||||
{
|
||||
const TRiga_documento& rin = doc_in[r];
|
||||
const bool rindesc = rin.sola_descrizione(); // La riga di input e' descrittiva
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
enum _formule {_somma, _bolli, _bolli_int, _spinc, _prezzo, _importo, _imponibile, _sconto, _iva, _provv, _tipo, _imponibili, _imposte};
|
||||
enum _formule {_somma, _bolli, _bolli_int, _spinc, _prezzo, _importo, _imponibile, _sconto, _iva, _provv, _tipo, _imponibili, _imposte, _totprovv};
|
||||
enum TTipo_calcolo { _nessun_calcolo, _qtaprezzo, _valore, _percentuale, _scontoimp, _scontoperc};
|
||||
|
||||
void row_set_handler( TMask& m, const int field, const int index );
|
||||
|
Loading…
x
Reference in New Issue
Block a user