Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : Spostata in libreria funzione di calcoloformula sconti git-svn-id: svn://10.65.10.50/branches/R_10_00@22488 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5960748309
commit
af6ee45ab8
@ -27,9 +27,10 @@ bool TCond_vendita::set_sconto( const char * exp, bool signal )
|
||||
|
||||
real TCond_vendita::normalize_valuta(const real & val, const char * val_rif)
|
||||
{
|
||||
if (val == ZERO)
|
||||
if (val.is_zero())
|
||||
return ZERO;
|
||||
// const TString16 firm_val(TCurrency::get_firm_val());
|
||||
|
||||
/*
|
||||
TString16 valuta_rif(val_rif);
|
||||
if (is_firm_value(valuta_rif))
|
||||
valuta_rif.cut(0);
|
||||
@ -47,6 +48,18 @@ real TCond_vendita::normalize_valuta(const real & val, const char * val_rif)
|
||||
|
||||
normalized.change_value(valuta, cambio_dest, controeuro_dest);
|
||||
|
||||
*/
|
||||
|
||||
const TString& valuta = _testa->get(F_CODVAL);
|
||||
if (same_values(val_rif, valuta))
|
||||
return val;
|
||||
|
||||
const real cambio = _condv.get_real(CONDV_CAMBIO);
|
||||
TPrice normalized(val, val_rif, cambio, _exchange_contro);
|
||||
|
||||
const real cambio_dest = _testa->get_real(F_CAMBIO);
|
||||
normalized.change_value(valuta, cambio_dest, _exchange_contro);
|
||||
|
||||
return normalized.get_num();
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
#include <applicat.h>
|
||||
#include <progind.h>
|
||||
#include <tabutil.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
|
||||
|
16
ve/velib.h
16
ve/velib.h
@ -24,11 +24,12 @@ class TViswin;
|
||||
#ifndef __VERIG_H
|
||||
#include "../ve/verig.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CGLIB01_H
|
||||
|
||||
#ifndef __CGPAGAME_H
|
||||
#include "../cg/cglib01.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef __CGPAGAME_H
|
||||
#include "../cg/cgpagame.h"
|
||||
#endif
|
||||
@ -53,10 +54,6 @@ class TSelect_color_mask;
|
||||
#include <rdoc.h>
|
||||
#endif
|
||||
|
||||
#ifndef __CG2101_H
|
||||
#include "../cg/cg2101.h"
|
||||
#endif
|
||||
|
||||
#define RIGA_MERCE 'M'
|
||||
#define RIGA_SPESEDOC 'S'
|
||||
#define RIGA_PRESTAZIONI 'P'
|
||||
@ -77,11 +74,6 @@ class TArticolo_giacenza;
|
||||
class TCache_articoli;
|
||||
class TSmart_card;
|
||||
|
||||
|
||||
bool is_real_discount(const TString& exp);
|
||||
bool scontoexpr2perc(const char* exp, bool signal , TString& goodexp, real & val_perc );
|
||||
real prezzo_scontato(const real& prezzo, const TString& sconto);
|
||||
|
||||
bool ora_hndl(TMask_field& field, KEY key);
|
||||
bool totdoc_hndl(TMask_field& field, KEY key);
|
||||
bool codcli_hndl(TMask_field& field, KEY key);
|
||||
|
113
ve/velib01.cpp
113
ve/velib01.cpp
@ -243,116 +243,3 @@ real TSpesa_prest::prezzo() const
|
||||
return r;
|
||||
}
|
||||
|
||||
bool is_real_discount(const TString& exp)
|
||||
{
|
||||
if (exp.blank())
|
||||
return false;
|
||||
|
||||
TString80 good;
|
||||
real perc;
|
||||
|
||||
return scontoexpr2perc(exp, false , good, perc) && perc != UNO;
|
||||
}
|
||||
|
||||
bool scontoexpr2perc(const char * exp, bool signal , TString & goodexp, real & val_perc )
|
||||
{
|
||||
bool valid = true;
|
||||
|
||||
goodexp.cut(0);
|
||||
// Elimina gli spazi molesti
|
||||
// work.strip_spaces( );
|
||||
val_perc = 1.0;
|
||||
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 = ' ';
|
||||
|
||||
// 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 );
|
||||
val_perc *= ( 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 );
|
||||
val_perc *= ( 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);
|
||||
val_perc = UNO; // Azzera la sequenza di percentuali
|
||||
goodexp = "";
|
||||
}
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
real prezzo_scontato(const real& prezzo, const TString& sconto)
|
||||
{
|
||||
if (sconto.full())
|
||||
{
|
||||
TString80 exp;
|
||||
real val_sconto;
|
||||
if (scontoexpr2perc(sconto, false , exp, val_sconto) && val_sconto != UNO)
|
||||
return prezzo * val_sconto;
|
||||
}
|
||||
return prezzo;
|
||||
}
|
||||
|
||||
|
@ -82,11 +82,11 @@ void TTipo_riga_documento::read_formule()
|
||||
_extended_desc_search = ini_get_bool(CONFIG_DITTA, "Main", "CUSTOM_SEARCH_" TOSTRING(LF_ANAMAG), false, 2);
|
||||
const TString& calcoli = profile.get("CALCOLI");
|
||||
if (calcoli == "*")
|
||||
{
|
||||
TTable frr("%FRR");
|
||||
for (int err = frr.first(); err == NOERR; err = frr.next())
|
||||
{
|
||||
TISAM_recordset frr("USE %FRR");
|
||||
for (bool ok = frr.move_first(); ok; ok = frr.move_next())
|
||||
{
|
||||
const TString& formula = frr.get("CODTAB");
|
||||
const TString& formula = frr.get("CODTAB").as_string();
|
||||
if (_formule.find(formula) < 0)
|
||||
_formule.add(formula);
|
||||
}
|
||||
@ -1144,7 +1144,7 @@ void TRiga_documento::autosave(TSheet_field& f)
|
||||
if (doc().tipo().calcolo_lordo())
|
||||
{
|
||||
put(RDOC_PREZZOL, prezzo);
|
||||
iva(codiva).scorpora(prezzo, doc().decimals(TRUE));
|
||||
iva(codiva).scorpora(prezzo, doc().decimals(true));
|
||||
}
|
||||
put( RDOC_PREZZO, prezzo);
|
||||
put( RDOC_UMQTA, row.get( f.cid2index(FR_UMQTA )) );
|
||||
|
@ -9,6 +9,11 @@
|
||||
#include "../ca/calib01.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CG2101_H
|
||||
#include "../cg/cg2101.h"
|
||||
#endif
|
||||
|
||||
|
||||
class TLista_documenti : public TObject // velib04
|
||||
{
|
||||
TArray _documenti;
|
||||
|
@ -2709,7 +2709,7 @@ error_type TContabilizzazione::write_scadenze(TDocumento& doc)
|
||||
{
|
||||
real ti = imposte;
|
||||
if (in_valuta)
|
||||
cambio.lit2val(ti);
|
||||
cambio.eur2val(ti);
|
||||
totimposte.set_num(ti);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user