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:
guy 2011-11-14 12:16:10 +00:00
parent 5960748309
commit af6ee45ab8
7 changed files with 31 additions and 133 deletions

@ -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>

@ -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);

@ -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);
}