1998-11-04 18:04:26 +00:00
|
|
|
|
// Stampa Listini/Contratti/Offerte in modo sintetico
|
|
|
|
|
// sarebbe da intendere come la vera ed unica stampa condizioni di vendita.
|
|
|
|
|
// Quella precedente realizzata in ve3200.cpp viene cmq mantenuta anke per motivi storici
|
|
|
|
|
|
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <form.h>
|
|
|
|
|
#include <mask.h>
|
|
|
|
|
#include <printer.h>
|
|
|
|
|
|
|
|
|
|
#include "ve3300.h"
|
|
|
|
|
#include "veconf.h"
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
|
// Form
|
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
|
class TLCO_form : public TForm
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool validate(TForm_item &, TToken_string &); // gestione dei messaggi estesi nei campi
|
|
|
|
|
public:
|
|
|
|
|
TLCO_form(const char* name) ;
|
|
|
|
|
virtual ~TLCO_form() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool TLCO_form::validate(TForm_item &cf, TToken_string &s)
|
|
|
|
|
{
|
|
|
|
|
const TString code(s.get(0));
|
|
|
|
|
TString valore;
|
|
|
|
|
const TRelation* rel = cf.form().relation();
|
|
|
|
|
TLocalisamfile& rcondv = rel->lfile(LF_RCONDV);
|
|
|
|
|
TLocalisamfile& condv = rel->lfile(LF_CONDV);
|
|
|
|
|
const int ndec = condv.get_int("DECIMALI");
|
|
|
|
|
|
|
|
|
|
if (code == "_DESCRIZIONE")
|
|
|
|
|
{
|
|
|
|
|
const char tiporiga = rcondv.get_char("TIPORIGA");
|
|
|
|
|
TLocalisamfile& anamag = rel->lfile(LF_ANAMAG);
|
|
|
|
|
TLocalisamfile& gmc = rel->lfile(-101);
|
|
|
|
|
TLocalisamfile& rfa = rel->lfile(-102);
|
|
|
|
|
if (tiporiga == 'A')
|
|
|
|
|
valore = anamag.get("DESCR");
|
|
|
|
|
else
|
|
|
|
|
if (tiporiga == 'R')
|
|
|
|
|
valore = rfa.get("S0");
|
|
|
|
|
else
|
|
|
|
|
valore = gmc.get("S0");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (code == "_QTAFROM")
|
|
|
|
|
{
|
|
|
|
|
// Legge la riga precedente, controllando che sia dello scaglione
|
|
|
|
|
// precedente a questo. Se si prende la sua qta limite e vi aggiunge un
|
|
|
|
|
// decimale specificato da LF_CONDV->DECIMALI (funziona anche per le unita')
|
|
|
|
|
// Se non esiste la riga prec vale 0
|
|
|
|
|
TRectype rec(rcondv.curr());
|
|
|
|
|
rcondv.prev();
|
2001-05-04 11:30:19 +00:00
|
|
|
|
real r = rcondv.good() && rcondv.curr().same_key(rec, 1, 1) ? rcondv.get_real("QLIM") : ZERO;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
if (r != ZERO)
|
|
|
|
|
r += exp10(((real)-ndec));
|
|
|
|
|
valore = r.string(15,ndec);
|
|
|
|
|
rcondv.next();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (code == "_QTATO")
|
|
|
|
|
valore = rcondv.get_real("QLIM").string(15,ndec);
|
|
|
|
|
cf.set(valore);
|
|
|
|
|
return TForm::validate(cf, s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TLCO_form::TLCO_form(const char* name) : TForm(name)
|
|
|
|
|
{
|
2000-05-05 15:25:49 +00:00
|
|
|
|
set_magic_currency(TRUE);
|
1998-11-04 18:04:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
|
// Applicazione
|
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
|
class TStampa_LCO_sintetica : public TSkeleton_application
|
|
|
|
|
{
|
|
|
|
|
TMask* _mask;
|
|
|
|
|
TLCO_form* _form;
|
|
|
|
|
TString16 _condven,
|
|
|
|
|
_tipocf,
|
|
|
|
|
_cod,
|
|
|
|
|
_catven;
|
|
|
|
|
long _codcf;
|
|
|
|
|
bool _codlis_catven, // booleano di abilitazione della categoria di vendita nella chiave dei listini
|
|
|
|
|
_codcon_codcf, // booleano di abilitazione del codice cliente/fornitore nella chiave dei contratti
|
|
|
|
|
_gest_um,
|
|
|
|
|
_gest_sca,
|
|
|
|
|
_extended;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool create(void);
|
|
|
|
|
virtual bool destroy(void);
|
|
|
|
|
virtual void main_loop() ;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
TStampa_LCO_sintetica() {}
|
|
|
|
|
virtual ~TStampa_LCO_sintetica() {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool TStampa_LCO_sintetica::create()
|
|
|
|
|
{
|
|
|
|
|
_mask = new TMask("ve3300a");
|
|
|
|
|
_form = new TLCO_form("ve3300a");
|
|
|
|
|
|
|
|
|
|
bool gotcha = FALSE;
|
2004-04-28 22:06:07 +00:00
|
|
|
|
int indice = 0;
|
1998-11-04 18:04:26 +00:00
|
|
|
|
_condven= "*";
|
|
|
|
|
if (argc()>2)
|
|
|
|
|
_condven= argv(2);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
TMask choose("ve3200");
|
|
|
|
|
if (choose.run() == K_ENTER)
|
|
|
|
|
_condven = choose.get(F_TIPOCV);
|
|
|
|
|
}
|
|
|
|
|
_condven.upper();
|
|
|
|
|
TConfig prassid(CONFIG_DITTA, "ve");
|
|
|
|
|
_mask->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
|
|
|
|
|
switch (_condven[0])
|
|
|
|
|
{
|
|
|
|
|
case 'L': // listini
|
|
|
|
|
indice = A_LISTINI;
|
|
|
|
|
if (!(prassid.get_bool("GES", NULL, indice)))
|
|
|
|
|
error_box("L'archivio Listini non <20> abilitato");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_codlis_catven= prassid.get_bool("GESLISCV");
|
|
|
|
|
gotcha= TRUE;
|
|
|
|
|
}
|
|
|
|
|
_mask->set_caption("Stampa Listini");
|
|
|
|
|
_mask->hide(F_C_COD);
|
|
|
|
|
_mask->hide(F_C_TIPOCF);
|
|
|
|
|
_mask->hide(F_C_CODCF);
|
|
|
|
|
_mask->hide(F_O_COD);
|
|
|
|
|
if (!_codlis_catven)
|
|
|
|
|
_mask->disable(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita
|
|
|
|
|
break;
|
|
|
|
|
case 'C': // contratti
|
|
|
|
|
indice= A_CONTRATTI;
|
|
|
|
|
if (!(prassid.get_bool("GES", NULL, indice)))
|
|
|
|
|
error_box("L'archivio Contratti non <20> abilitato");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_codcon_codcf= prassid.get_bool("GESCONCC");
|
|
|
|
|
gotcha= TRUE;
|
|
|
|
|
}
|
|
|
|
|
_mask->set_caption("Stampa Contratti");
|
|
|
|
|
_mask->hide(F_L_COD);
|
|
|
|
|
_mask->hide(F_L_CATVEN);
|
|
|
|
|
_mask->hide(F_O_COD);
|
|
|
|
|
if (!_codcon_codcf)
|
|
|
|
|
{ // disabilita condizionalmente i clienti/fornitori
|
|
|
|
|
_mask->disable(F_C_TIPOCF);
|
|
|
|
|
_mask->disable(F_C_CODCF);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'O': // offerte
|
|
|
|
|
indice= A_OFFERTE;
|
|
|
|
|
if (!(prassid.get_bool("GES", NULL, indice)))
|
|
|
|
|
error_box("L'archivio Offerte non <20> abilitato");
|
|
|
|
|
else
|
|
|
|
|
gotcha= TRUE;
|
|
|
|
|
_mask->set_caption("Stampa Offerte");
|
|
|
|
|
_mask->hide(F_L_COD); // settaggio dei campi da eliminare
|
|
|
|
|
_mask->hide(F_L_CATVEN);
|
|
|
|
|
_mask->hide(F_C_TIPOCF);
|
|
|
|
|
_mask->hide(F_C_CODCF);
|
|
|
|
|
_mask->hide(F_C_COD);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (gotcha)
|
|
|
|
|
{
|
|
|
|
|
_gest_um = prassid.get_bool("GESUM", NULL, indice);
|
|
|
|
|
_gest_sca = prassid.get_bool("GESSCA", NULL, indice);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (gotcha && TSkeleton_application::create());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TStampa_LCO_sintetica::destroy()
|
|
|
|
|
{
|
|
|
|
|
delete _form;
|
|
|
|
|
delete _mask;
|
|
|
|
|
|
|
|
|
|
return TSkeleton_application::destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TStampa_LCO_sintetica::main_loop()
|
|
|
|
|
{
|
|
|
|
|
while (_mask->run()!=K_QUIT)
|
|
|
|
|
{
|
|
|
|
|
_extended = _mask->get_bool(F_EXTENDED);
|
|
|
|
|
_catven = _mask->get(F_L_CATVEN);
|
|
|
|
|
_tipocf = _condven[0] == 'C' ? _mask->get(F_C_TIPOCF) : "";
|
|
|
|
|
_codcf = _mask->get_long(F_C_CODCF);
|
|
|
|
|
const char cv = _condven[0];
|
|
|
|
|
if (cv == 'L')
|
|
|
|
|
_cod = _mask->get(F_L_COD);
|
|
|
|
|
else
|
|
|
|
|
if (cv == 'C')
|
|
|
|
|
_cod = _mask->get(F_C_COD);
|
|
|
|
|
else
|
|
|
|
|
_cod = _mask->get( F_O_COD);
|
|
|
|
|
|
|
|
|
|
TCursor* cur = _form->cursor();
|
|
|
|
|
|
|
|
|
|
TRectype from (LF_CONDV);
|
|
|
|
|
from.put("TIPO", _condven);
|
|
|
|
|
from.put("CATVEN", _catven);
|
|
|
|
|
from.put("TIPOCF", _tipocf);
|
|
|
|
|
from.put("CODCF", _codcf);
|
|
|
|
|
from.put("COD", _cod);
|
|
|
|
|
TRectype to(from);
|
|
|
|
|
|
|
|
|
|
cur->setregion(from, to);
|
|
|
|
|
|
|
|
|
|
// Spengi la luz...
|
|
|
|
|
_form->find_field('H', odd_page, 5).show(cv == 'L');
|
|
|
|
|
_form->find_field('H', odd_page, 6).show(cv == 'C');
|
|
|
|
|
_form->find_field('H', odd_page, 7).show(cv == 'C');
|
|
|
|
|
|
|
|
|
|
_form->find_field('B', odd_page, 9).show(_extended);
|
|
|
|
|
_form->find_field('B', odd_page, 10).show(_extended);
|
|
|
|
|
_form->find_field('B', odd_page, 11).show(_extended);
|
|
|
|
|
_form->find_field('B', odd_page, 109).show(_extended);
|
|
|
|
|
_form->find_field('B', odd_page, 110).show(_extended);
|
|
|
|
|
_form->find_field('B', odd_page, 111).show(_extended);
|
|
|
|
|
|
|
|
|
|
_form->find_field('B', odd_page, 3).show(_gest_um);
|
|
|
|
|
_form->find_field('B', odd_page, 103).show(_gest_um);
|
|
|
|
|
|
|
|
|
|
_form->find_field('B', odd_page, 4).show(_gest_sca);
|
|
|
|
|
_form->find_field('B', odd_page, 5).show(_gest_sca);
|
|
|
|
|
_form->find_field('B', odd_page, 104).show(_gest_sca);
|
|
|
|
|
_form->find_field('B', odd_page, 105).show(_gest_sca);
|
|
|
|
|
|
|
|
|
|
const int hh = 7;
|
|
|
|
|
const int fl = printer().formlen();
|
|
|
|
|
int rows[4]; // Righe orizzontali
|
|
|
|
|
rows[0] = hh-2;
|
|
|
|
|
rows[1] = hh;
|
|
|
|
|
rows[2] = fl-1;
|
|
|
|
|
rows[3] = 0;
|
|
|
|
|
_form->genera_intestazioni(odd_page, hh-1);
|
|
|
|
|
_form->genera_fincatura(odd_page, hh-2, fl-1, rows);
|
|
|
|
|
|
|
|
|
|
// stampa
|
|
|
|
|
if (_form->cursor()->items() > 0)
|
|
|
|
|
_form->print();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ve3300(int argc, char **argv)
|
|
|
|
|
{
|
|
|
|
|
TStampa_LCO_sintetica a;
|
|
|
|
|
|
|
|
|
|
a.run(argc, argv, "Stampa condizioni vendita");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|