Correta la ricerca secondo l'abilitazione dei vari flags.
Aggiunto il campo relativo al prezzo netto/lordo. Corrette varie ricerche. Reso accettabile il tutto. Deve essere ancora corretta la routine di rinumerazione per scaglione. git-svn-id: svn://10.65.10.50/trunk@3350 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
137cfdc0b4
commit
9687be385a
@ -45,6 +45,9 @@ class TCondizioni_vendita: public TRelation_application {
|
||||
static bool handle_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
|
||||
static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo)
|
||||
|
||||
virtual void init_query_mode(TMask& m) { m.disable(BTN_RIGHE); }
|
||||
virtual void init_insert_mode(TMask& m) {init_query_mode(m); }
|
||||
virtual int read(TMask &); // metodo usato per leggere il record dal file
|
||||
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
|
||||
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
|
||||
virtual bool remove(); // metodo usato per cancellare il record sul file
|
||||
@ -60,8 +63,6 @@ TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe
|
||||
return (TCondizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TCondizioni_vendita::user_create() {
|
||||
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||
|
||||
@ -111,6 +112,8 @@ bool TCondizioni_vendita::user_create() {
|
||||
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF
|
||||
if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config.
|
||||
key_disable(*_msk, F_C_TIPOCF);
|
||||
TList_field& l = (TList_field&)_msk->field(F_C_TIPOCF);
|
||||
l.replace_items(" | "," | ");
|
||||
key_disable(*_msk, F_C_CODCF);
|
||||
}
|
||||
set_search_field(F_C_COD); // impostazione del campo di ricerca
|
||||
@ -259,6 +262,11 @@ bool TCondizioni_vendita::handle_codsucc(TMask_field &fld, KEY k) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::read(TMask &m) {
|
||||
m.enable(BTN_RIGHE);
|
||||
return (TRelation_application::read(m));
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::write(const TMask &m) {
|
||||
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
|
371
ve/ve2300.cpp
371
ve/ve2300.cpp
@ -1,10 +1,74 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <tabutil.h>
|
||||
#include <config.h>
|
||||
|
||||
#include "ve2300.h"
|
||||
#include "veconf.h"
|
||||
|
||||
#define MAX_REAL "9999999999.99999" //mmmhh..
|
||||
|
||||
// Le 4 seguenti funzioni saranno da mettere in velib01
|
||||
|
||||
real lordo2netto(real& lordo, const TString& codiva, bool is_valuta = FALSE);
|
||||
real netto2lordo(const real& netto, const TString& codiva, bool is_valuta = FALSE);
|
||||
real lordo2netto(real& lordo, const real& iva, bool is_valuta = FALSE);
|
||||
real netto2lordo(const real& netto, const real& iva, bool is_valuta = FALSE);
|
||||
|
||||
real lordo2netto(real& lordo, const TString& codiva, bool is_valuta)
|
||||
{
|
||||
TTable tabiva("%IVA");
|
||||
real aliquota = 0.0;
|
||||
|
||||
tabiva.put("CODTAB", codiva);
|
||||
if (tabiva.read() == NOERR) aliquota = tabiva.get_real("R0");
|
||||
|
||||
return lordo2netto(lordo,aliquota,is_valuta);
|
||||
}
|
||||
|
||||
real netto2lordo(const real& netto, const TString& codiva, bool is_valuta)
|
||||
{
|
||||
TTable tabiva("%IVA");
|
||||
real aliquota = 0.0;
|
||||
|
||||
tabiva.put("CODTAB", codiva);
|
||||
if (tabiva.read() == NOERR) aliquota = tabiva.get_real("R0");
|
||||
|
||||
return netto2lordo(netto,aliquota,is_valuta);
|
||||
}
|
||||
|
||||
real lordo2netto(real& lordo, const real& iva, bool is_valuta)
|
||||
{
|
||||
real netto;
|
||||
real imposta = 0.0;
|
||||
real imposta_rec = 0.0;
|
||||
if (!iva.is_zero())
|
||||
{
|
||||
imposta = (lordo * iva) / (iva + 100.0); // Calcola l'imposta...
|
||||
imposta.ceil(is_valuta ? 3 : 0);
|
||||
}
|
||||
netto = lordo - imposta; // Questo e' l'importo netto
|
||||
imposta_rec = (netto * iva) / 100.0; // Ricalcola l'imposta con il nuovo imponibile
|
||||
imposta_rec.ceil(is_valuta ? 3 : 0);
|
||||
if (imposta != imposta_rec) // In questo caso corregge l'importo lordo
|
||||
lordo = netto + imposta_rec;
|
||||
return netto;
|
||||
}
|
||||
|
||||
real netto2lordo(const real& netto, const real& iva, bool is_valuta)
|
||||
{
|
||||
real lordo;
|
||||
real imposta = 0.0;
|
||||
if (!iva.is_zero())
|
||||
{
|
||||
imposta = (netto * iva) / 100.0; // Calcola l'imposta
|
||||
imposta.ceil(is_valuta ? 3 : 0);
|
||||
}
|
||||
lordo = imposta + netto; // prezzo lordo
|
||||
return lordo;
|
||||
}
|
||||
|
||||
// Queste no!
|
||||
|
||||
static void key_hide(TMask & m, short id, int key = 1)
|
||||
{
|
||||
((TEditable_field &)m.field(id)).reset_key(key);
|
||||
@ -13,7 +77,7 @@ static void key_hide(TMask & m, short id, int key = 1)
|
||||
|
||||
static void key_show(TMask & m, short id, int key = 1)
|
||||
{
|
||||
((TEditable_field &)m.field(id)).reset_key(key);
|
||||
((TEditable_field &)m.field(id)).set_key(key);
|
||||
m.show(id);
|
||||
}
|
||||
|
||||
@ -25,18 +89,10 @@ static void key_disable(TMask & m, short id, int key = 1)
|
||||
|
||||
static void key_enable(TMask & m, short id, int key = 1)
|
||||
{
|
||||
((TEditable_field &)m.field(id)).reset_key(key);
|
||||
((TEditable_field &)m.field(id)).set_key(key);
|
||||
m.enable(id);
|
||||
}
|
||||
|
||||
|
||||
#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
|
||||
#define CREATE(x) { _msk->field(x).set_key(1); _msk->show(x); }
|
||||
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
|
||||
#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); }
|
||||
|
||||
|
||||
|
||||
class TRighe_condizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
@ -46,6 +102,7 @@ class TRighe_condizioni_vendita: public TRelation_application {
|
||||
bool _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF
|
||||
bool _um; // booleano di abilitazione locale delle unità di misura
|
||||
bool _gest_um, _gest_sca, _gest_so; // variabili di abilitazione deunità di misura, scaglioni e sconti/omaggi
|
||||
bool _is_valuta; // flag di controllo se il listino e' in valuta
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
@ -55,12 +112,19 @@ class TRighe_condizioni_vendita: public TRelation_application {
|
||||
virtual TRelation *get_relation() const { return _rel; } // punto d'aggancio tra la relazione della rel.app. e la relazione principale dell'applicazione
|
||||
|
||||
static void hide_and_show_codriga(void); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
|
||||
|
||||
static bool handle_tiporiga(TMask_field &, KEY); // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
|
||||
static bool handle_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
|
||||
|
||||
static bool handle_price(TMask_field &, KEY); // handler del prezzo netto e lordo
|
||||
static bool handle_qta(TMask_field &, KEY); // handler della quantita' limite per scaglione
|
||||
static bool handle_sca(TMask_field &, KEY); // handler della quantita' limite per scaglione
|
||||
static void fill_rec(TRectype& r, TMask& m);
|
||||
static real find_prev_qta(TRectype& r);
|
||||
static real find_next_qta(TRectype& r);
|
||||
static const char* look_codiva(char tipo, TString& cod);
|
||||
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
|
||||
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
|
||||
virtual bool remove(); // metodo usato per rimuovere il record sul file
|
||||
void renumber_sca(const TRectype& r); //metodo per rinumerare gli scaglioni
|
||||
|
||||
public:
|
||||
TRighe_condizioni_vendita() {}
|
||||
@ -93,6 +157,10 @@ bool TRighe_condizioni_vendita::user_create() {
|
||||
case 'L': // listini
|
||||
_msk->set_caption("Archivio righe listini");
|
||||
key_hide(*_msk, F_R_C_TIPOCF); // settaggio dei campi da eliminare...
|
||||
{
|
||||
TList_field& l = (TList_field&)_msk->field(F_R_C_TIPOCF);
|
||||
l.replace_items(" | "," | ");
|
||||
}
|
||||
key_hide(*_msk, F_R_C_CODCF);
|
||||
key_hide(*_msk, F_R_C_COD);
|
||||
key_hide(*_msk, F_R_O_COD);
|
||||
@ -126,6 +194,8 @@ bool TRighe_condizioni_vendita::user_create() {
|
||||
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF
|
||||
if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config.
|
||||
key_disable(*_msk, F_R_C_TIPOCF);
|
||||
TList_field& l = (TList_field&)_msk->field(F_R_C_TIPOCF);
|
||||
l.replace_items(" | "," | ");
|
||||
key_disable(*_msk, F_R_C_CODCF);
|
||||
}
|
||||
_gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
|
||||
@ -139,6 +209,10 @@ bool TRighe_condizioni_vendita::user_create() {
|
||||
_msk->set_caption("Archivio righe offerte");
|
||||
key_hide(*_msk, F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
key_hide(*_msk, F_R_C_TIPOCF);
|
||||
{
|
||||
TList_field& l = (TList_field&)_msk->field(F_R_C_TIPOCF);
|
||||
l.replace_items(" | "," | ");
|
||||
}
|
||||
key_hide(*_msk, F_R_C_CODCF);
|
||||
key_hide(*_msk, F_R_L_COD);
|
||||
key_hide(*_msk, F_R_C_COD);
|
||||
@ -163,6 +237,13 @@ bool TRighe_condizioni_vendita::user_create() {
|
||||
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
|
||||
_msk->set(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio
|
||||
_msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
|
||||
_msk->set_handler(F_R_PREZZO, handle_price); // setta l'handler per calcolare il prezzo lordo dal prezzo netto
|
||||
_msk->set_handler(F_R_PREZZO_LORDO, handle_price); // setta l'handler per calcolare il prezzo netto dal prezzo lordo
|
||||
if (_gest_sca)
|
||||
{
|
||||
_msk->set_handler(F_R_QLIM, handle_qta); // setta l'handler per controllare la quantita' limite
|
||||
_msk->set_handler(F_R_NSCAGL, handle_sca); // setta l'handler per controllare la sequenza degli scaglioni
|
||||
}
|
||||
_um= _gest_um; // abilita le unità di misura in base alla configurazione
|
||||
hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
}
|
||||
@ -228,29 +309,56 @@ bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
break;
|
||||
}
|
||||
if (condv.read()==NOERR) { // se la lettura è andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata
|
||||
TString valuta(condv.get("CODVAL"));
|
||||
TString seqric(condv.get("SEQRIC"));
|
||||
TToken_string codes, values;
|
||||
|
||||
const bool imp_lordi = condv.get_bool("IMPLORDI");
|
||||
app()._is_valuta = valuta.not_empty() && valuta != "LIT";
|
||||
_msk->show(F_R_PREZZO_VAL, app()._is_valuta);
|
||||
_msk->show(F_R_PREZZO, !app()._is_valuta);
|
||||
_msk->show(F_R_PREZZO_LORDO, !app()._is_valuta && imp_lordi);
|
||||
_msk->show(F_R_PREZZO_LORDO_VAL, app()._is_valuta && imp_lordi);
|
||||
if (_gest_um) _um= condv.get_bool("GESTUM"); // legge lo stato di abilitazione della gestione delle unità di misura
|
||||
hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura"
|
||||
if (_gest_sca && condv.get_bool("GESTSCAGL")) {
|
||||
if (_msk->query_mode())
|
||||
key_enable(*_msk, F_R_NSCAGL); // abilita il campo "numero scaglione"
|
||||
_msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
|
||||
} else {
|
||||
if (_msk->query_mode())
|
||||
key_disable(*_msk, F_R_NSCAGL); // disabilita il campo "numero scaglione"
|
||||
_msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||
}
|
||||
if (condv.get_bool("SCONST") || (_gest_um && condv.get_bool("GESTSCO"))) _msk->enable(F_R_SCONTO); // abilita il campo "sconto"
|
||||
else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto"
|
||||
if (_gest_so && condv.get_bool("GESTSCO")) {
|
||||
_msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
|
||||
_msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
|
||||
_msk->enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
|
||||
_msk->enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
|
||||
if (_gest_um) _msk->enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio"
|
||||
} else {
|
||||
_msk->disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
|
||||
_msk->disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
|
||||
_msk->disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
|
||||
_msk->disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
|
||||
_msk->disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
|
||||
|
||||
const bool enable_gift = _gest_so && condv.get_bool("GESTSCO");
|
||||
_msk->enable(-1,enable_gift); // abilita il gruppo di campi relativi all'omaggio
|
||||
_msk->enable(F_R_UMOM, enable_gift && _gest_um); // abilita il campo "unità di misura art. omaggio"
|
||||
|
||||
const int mode = _msk->mode();
|
||||
if (mode == MODE_QUERY || mode == MODE_QUERYINS) // Sostituisce il listbox solo in ricerca...
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
switch (seqric[i])
|
||||
{
|
||||
case 'A' :
|
||||
codes.add("A"); values.add("Articolo");
|
||||
break;
|
||||
case 'G' :
|
||||
codes.add("G"); values.add("Gruppo merc.");
|
||||
break;
|
||||
case 'S' :
|
||||
codes.add("S"); values.add("Sottogr. merc.");
|
||||
break;
|
||||
case 'R' :
|
||||
codes.add("R"); values.add("Ragg. fiscale");
|
||||
break;
|
||||
default : break;
|
||||
}
|
||||
TList_field& tiporiga = (TList_field&) _msk->field(F_R_TIPORIGA);
|
||||
tiporiga.replace_items(codes,values); // Sostituisce gli items del list box del tipo riga in base a cio' che e' abilitato in testata
|
||||
}
|
||||
return TRUE;
|
||||
} else {
|
||||
@ -260,11 +368,186 @@ bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_price(TMask_field &f, KEY k)
|
||||
{
|
||||
if (f.to_check(k,TRUE))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
TString codiva;
|
||||
TString cod(m.get(F_R_CODRIGA_A));
|
||||
real netto = 0.0;
|
||||
real lordo = 0.0;
|
||||
const char tiporiga = m.get(F_R_TIPORIGA)[0];
|
||||
|
||||
codiva = look_codiva(tiporiga, cod);
|
||||
|
||||
if (f.dlg() == F_R_PREZZO)
|
||||
{
|
||||
netto = real(m.get(F_R_PREZZO));
|
||||
lordo = netto2lordo(netto,codiva,app()._is_valuta);
|
||||
m.set(F_R_PREZZO_LORDO,lordo.string());
|
||||
}
|
||||
else
|
||||
{
|
||||
lordo = real(m.get(F_R_PREZZO_LORDO));
|
||||
real prec_lordo = lordo;
|
||||
netto = lordo2netto(lordo,codiva,app()._is_valuta);
|
||||
if (lordo != prec_lordo)
|
||||
{
|
||||
warning_box("Scorporando l'iva dal prezzo lordo si e' dovuto\n"
|
||||
"correggere quest'ultimo a causa di arrotondamenti.");
|
||||
m.set(F_R_PREZZO_LORDO,lordo.string());
|
||||
}
|
||||
m.set(F_R_PREZZO,netto.string());
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TRighe_condizioni_vendita::fill_rec(TRectype &r, TMask& m)
|
||||
{
|
||||
const char c = app()._rcondven[0];
|
||||
short id = (c == 'C' ? F_R_C_COD : (c == 'L' ? F_R_L_COD : F_R_O_COD));
|
||||
TString16 tipo(m.get(F_R_TIPO));
|
||||
TString16 catven(m.get(F_R_L_CATVEN));
|
||||
TString16 tipocf(m.get(F_R_C_TIPOCF));
|
||||
TString16 codcf(m.get(F_R_C_CODCF)); // sulla maschera e' una stringa
|
||||
TString16 cod(m.get(id));
|
||||
TString16 tiporiga(m.get(F_R_TIPORIGA));
|
||||
TString codriga(m.get(F_R_CODRIGA_A));
|
||||
TString16 um(m.get(F_R_UM));
|
||||
int sca = m.get_int(F_R_NSCAGL);
|
||||
r.put("TIPO",tipo);r.put("CATVEN",catven);r.put("TIPOCF",tipocf);
|
||||
r.put("CODCF",codcf);r.put("COD",cod);r.put("TIPORIGA",tiporiga);
|
||||
r.put("CODRIGA",codriga);r.put("UM",um);r.put("NSCAGL",sca);
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_qta(TMask_field &f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
real qta_prev,qta_next;
|
||||
real current_qta(f.get());
|
||||
TRectype r1(LF_RCONDV);
|
||||
fill_rec(r1,m);
|
||||
TRectype r2(r1);
|
||||
|
||||
qta_prev = find_prev_qta(r1);
|
||||
qta_next = find_next_qta(r2);
|
||||
int sca = m.get_int(F_R_NSCAGL);
|
||||
if (sca == 1 && current_qta == 0.0)
|
||||
{
|
||||
f.error_box("La quantita' limite deve essere maggiore di 0");
|
||||
return FALSE;
|
||||
}
|
||||
if (sca == 9 && current_qta == 0.0) return TRUE;
|
||||
if (qta_next <= current_qta)
|
||||
{
|
||||
f.error_box("La quantita' limite deve essere minore di %s.",
|
||||
(const char*)qta_next.string());
|
||||
return FALSE;
|
||||
}
|
||||
if (qta_prev >= current_qta)
|
||||
{
|
||||
f.error_box("La quantita' limite deve maggiore di %s.",
|
||||
(const char*)qta_prev.string());
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_sca(TMask_field &f, KEY k)
|
||||
{
|
||||
if (f.to_check(k))
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
int sca = atoi(f.get());
|
||||
if (sca == 1) return TRUE;
|
||||
|
||||
TRectype r(LF_RCONDV);
|
||||
fill_rec(r, m);
|
||||
TLocalisamfile cond(LF_RCONDV);
|
||||
|
||||
cond.curr() = r;
|
||||
cond.read();
|
||||
if (cond.bad()) // se non l'ha trovato significa che e' in inserimento
|
||||
{
|
||||
sca--;
|
||||
r.put("NSCAGL",sca); //cerca quello precedente...
|
||||
if (cond.read(r) != NOERR) // se non lo trova segnala l'errore di errata sequenza
|
||||
{
|
||||
f.error_box("Il numero di scaglione immesso non e' in sequenza.");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char* TRighe_condizioni_vendita::look_codiva(char tipo, TString& cod)
|
||||
{
|
||||
switch (tipo)
|
||||
{
|
||||
case 'A':
|
||||
{
|
||||
TLocalisamfile anamag(LF_ANAMAG);
|
||||
anamag.put("CODART",cod);
|
||||
if (anamag.read() == NOERR)
|
||||
return anamag.get("CODIVA");
|
||||
break;
|
||||
}
|
||||
case 'G':
|
||||
case 'S':
|
||||
{
|
||||
TTable gmc("GMC");
|
||||
gmc.put("CODTAB",cod);
|
||||
if (gmc.read() == NOERR)
|
||||
return gmc.get("S7");
|
||||
break;
|
||||
}
|
||||
case 'R':
|
||||
{
|
||||
TTable rfa("RFA");
|
||||
rfa.put("CODTAB",cod);
|
||||
if (rfa.read() == NOERR)
|
||||
return rfa.get("S9");
|
||||
}
|
||||
default : break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
real TRighe_condizioni_vendita::find_prev_qta(TRectype& r)
|
||||
{
|
||||
TLocalisamfile f(LF_RCONDV);
|
||||
real qta = 0.0;
|
||||
int nscagl = r.get_int("NSCAGL");
|
||||
f.read(r,_isgteq);
|
||||
if (f.good()) f.prev();
|
||||
if (f.good() && nscagl == (f.get_int("NSCAGL") +1))
|
||||
qta = f.get_real("QLIM");
|
||||
return qta;
|
||||
}
|
||||
|
||||
real TRighe_condizioni_vendita::find_next_qta(TRectype& r)
|
||||
{
|
||||
TLocalisamfile f(LF_RCONDV);
|
||||
real qta(MAX_REAL);
|
||||
int nscagl = r.get_int("NSCAGL");
|
||||
f.read(r,_isgteq);
|
||||
if (f.good()) f.next();
|
||||
if (f.good() && nscagl == (f.get_int("NSCAGL") -1))
|
||||
qta = f.get_real("QLIM");
|
||||
return qta;
|
||||
}
|
||||
|
||||
int TRighe_condizioni_vendita::write(const TMask &m) {
|
||||
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->write(); // invoca la scrittura della relazione
|
||||
@ -275,14 +558,46 @@ int TRighe_condizioni_vendita::rewrite(const TMask &m) {
|
||||
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
|
||||
void TRighe_condizioni_vendita::renumber_sca(const TRectype& r)
|
||||
{
|
||||
TRectype from(r);
|
||||
TRectype to(r);
|
||||
TLocalisamfile rcondv(LF_RCONDV);
|
||||
int sca = 1;
|
||||
from.put("NSCAGL",sca); // parte dal primo (Se ci sono gli scaglioni questo deve esserci)
|
||||
to.put("NSCAGL",9); // condizione limite...
|
||||
rcondv.curr() = from;
|
||||
for (rcondv.read(_isgteq);rcondv.good() && rcondv.curr() <= to;rcondv.next()) // se non c'e' nessun scaglione, non rinumera niente
|
||||
{
|
||||
if (rcondv.get_int("NSCAGL") != sca)
|
||||
{
|
||||
rcondv.put("NSCAGL",sca);
|
||||
rcondv.rewrite();
|
||||
}
|
||||
sca++;
|
||||
}
|
||||
if (sca > 1)
|
||||
{
|
||||
rcondv.curr() = from;
|
||||
rcondv.put("NSCAGL",sca-1);
|
||||
rcondv.remove();
|
||||
}
|
||||
}
|
||||
bool TRighe_condizioni_vendita::remove()
|
||||
{
|
||||
TRectype r(LF_RCONDV);
|
||||
fill_rec(r,*_msk);
|
||||
const bool rt = TRelation_application::remove();
|
||||
if (_gest_sca) // rinumera gli scaglioni
|
||||
renumber_sca(r);
|
||||
return rt;
|
||||
}
|
||||
|
||||
int ve2300(int argc, char* argv[]) {
|
||||
TRighe_condizioni_vendita a;
|
||||
|
@ -22,6 +22,9 @@
|
||||
#define F_R_CODARTOM 131
|
||||
#define F_R_PROMAGGIO 132
|
||||
#define F_R_UMOM 133
|
||||
#define F_R_PREZZO_VAL 134
|
||||
#define F_R_PREZZO_LORDO 135
|
||||
#define F_R_PREZZO_LORDO_VAL 136
|
||||
|
||||
// campi riservati ai listini
|
||||
#define F_R_L_CATVEN 141
|
||||
|
Loading…
x
Reference in New Issue
Block a user