1996-12-06 15:48:24 +00:00
|
|
|
|
#include <applicat.h>
|
|
|
|
|
#include <form.h>
|
|
|
|
|
#include <mask.h>
|
|
|
|
|
#include <relation.h>
|
|
|
|
|
#include <utility.h>
|
|
|
|
|
#include <urldefid.h>
|
|
|
|
|
#include <printer.h>
|
|
|
|
|
#include <progind.h>
|
|
|
|
|
#include <lffiles.h>
|
|
|
|
|
#include <effetti.h>
|
|
|
|
|
#include <reffetti.h>
|
|
|
|
|
#include "ef0.h"
|
|
|
|
|
#include "ef0301.h"
|
|
|
|
|
#include "ef0500.h"
|
|
|
|
|
|
|
|
|
|
class TRiba_form;
|
|
|
|
|
class TDistinta_form;
|
|
|
|
|
|
1997-01-15 16:00:56 +00:00
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Classe per l'emissione di effetti e distinte su carta o su floppy //
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
1996-12-06 15:48:24 +00:00
|
|
|
|
class TEmissione: public TApplication
|
|
|
|
|
{
|
|
|
|
|
TMask* _msk;
|
|
|
|
|
TRelation* _firmrel; // relazione di gestione dei dati della ditta corrente
|
|
|
|
|
TLocalisamfile *_eff, *_reff, *_cession;
|
|
|
|
|
TRiba_form *_formrb;
|
|
|
|
|
TDistinta_form *_formdse;
|
|
|
|
|
int _base_page_no; // numero della pagina base per la stampa del numero di pagina
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool create(void);
|
|
|
|
|
virtual bool destroy(void) ;
|
|
|
|
|
virtual void on_firm_change(void);
|
|
|
|
|
virtual bool menu(MENU_TAG);
|
|
|
|
|
void conferma(void);
|
|
|
|
|
virtual void print_rb(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis);
|
|
|
|
|
virtual void print_dse(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis);
|
|
|
|
|
virtual void print(void);
|
|
|
|
|
void floppy(void);
|
|
|
|
|
void aggiorna_rb(TCursor*);
|
|
|
|
|
void aggiorna_dist(TCursor*);
|
|
|
|
|
static bool annulla_handler(TMask_field& f, KEY k);
|
|
|
|
|
public:
|
|
|
|
|
int base_no() { return _base_page_no;}
|
|
|
|
|
TEmissione() {};
|
|
|
|
|
virtual ~TEmissione() {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// restituisce un riferimento all' applicazione
|
|
|
|
|
inline TEmissione& app() { return (TEmissione&) main_app();}
|
|
|
|
|
|
1997-01-15 16:00:56 +00:00
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
1996-12-06 15:48:24 +00:00
|
|
|
|
// Classe TRiba_form customizzata dalla Form per le Ri.Ba.//
|
1997-01-15 16:00:56 +00:00
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
1996-12-06 15:48:24 +00:00
|
|
|
|
class TRiba_form: public TForm
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
virtual bool validate(TForm_item &, TToken_string &);
|
|
|
|
|
public:
|
|
|
|
|
TRiba_form(const char *);
|
|
|
|
|
virtual ~TRiba_form(){};
|
|
|
|
|
};
|
|
|
|
|
|
1997-01-15 16:00:56 +00:00
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
1996-12-06 15:48:24 +00:00
|
|
|
|
// Classe TDistinta_form customizzata dalla Form per le Distinte //
|
1997-01-15 16:00:56 +00:00
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
1996-12-06 15:48:24 +00:00
|
|
|
|
|
|
|
|
|
class TDistinta_form: public TForm
|
|
|
|
|
{
|
|
|
|
|
TRelation *_firmrel; // relazione di gestione dei dati della ditta corrente
|
|
|
|
|
TSorted_cursor *_cursor; // curosore che permette l'ordinamento degli effetti nella distinta
|
|
|
|
|
protected: // per data scadenza o per dati fattura
|
|
|
|
|
virtual bool validate(TForm_item &, TToken_string &);
|
|
|
|
|
public:
|
|
|
|
|
void set_order(const char tipo); // setta l'ordinamento del cursore
|
|
|
|
|
virtual TCursor* cursor() const { return (TCursor*)_cursor;} // restituisce il cursore
|
|
|
|
|
TDistinta_form(const char*, TRelation *);
|
|
|
|
|
virtual ~TDistinta_form();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// creazione dell'applicazione
|
|
|
|
|
bool TEmissione::create()
|
|
|
|
|
{
|
|
|
|
|
TApplication::create();
|
|
|
|
|
_formrb = NULL; // l'inizializzazione avviene nel metodo print()
|
|
|
|
|
_formdse = NULL; // a seconda che si stampino le riba o la distinta
|
|
|
|
|
_msk = new TMask("ef0500a");
|
|
|
|
|
_firmrel= new TRelation(LF_NDITTE);
|
|
|
|
|
_firmrel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR");
|
|
|
|
|
_firmrel->add(LF_UNLOC,"CODDITTA=CODDITTA"); // si posiziona sulla prima unita' locale della ditta
|
|
|
|
|
_eff = new TLocalisamfile(LF_EFFETTI);
|
|
|
|
|
_reff = new TLocalisamfile(LF_REFFETTI);
|
|
|
|
|
_cession = new TLocalisamfile(LF_CESS);
|
|
|
|
|
_msk->set_handler(DLG_CANCEL, annulla_handler);
|
|
|
|
|
dispatch_e_menu(BAR_ITEM(1));
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// distruzione dell'applicazione
|
|
|
|
|
bool TEmissione::destroy()
|
|
|
|
|
{
|
|
|
|
|
if (_formrb) delete _formrb;
|
|
|
|
|
if (_formdse) delete _formdse;
|
|
|
|
|
delete _msk;
|
|
|
|
|
delete _firmrel;
|
|
|
|
|
delete _eff;
|
|
|
|
|
delete _reff;
|
|
|
|
|
delete _cession;
|
|
|
|
|
return TApplication::destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// carica la ditta corrente
|
|
|
|
|
void TEmissione::on_firm_change()
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile &firmfile= _firmrel->lfile();
|
|
|
|
|
firmfile.put("CODDITTA", get_firm());
|
|
|
|
|
_firmrel->read();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// carica la maschera per emissione effetti e distinte
|
|
|
|
|
bool TEmissione::menu(MENU_TAG)
|
|
|
|
|
{
|
|
|
|
|
KEY key = K_ENTER;
|
|
|
|
|
while (key != K_QUIT) // rimane in esecuzione finch<63> non si chiude la maschera
|
|
|
|
|
{
|
|
|
|
|
key = _msk->run();
|
|
|
|
|
if (key == K_ENTER) // se si confermano i dati inseriti
|
|
|
|
|
conferma();
|
|
|
|
|
}
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestisce la scelta fra le due possibili emissioni
|
|
|
|
|
void TEmissione::conferma()
|
|
|
|
|
{
|
|
|
|
|
int tipoemis = _msk->get_int(F_TIPOEMIS);
|
|
|
|
|
if (tipoemis == 1) // emissione su floppy
|
|
|
|
|
floppy();
|
|
|
|
|
else
|
|
|
|
|
print(); // emissione su carta
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestione emissione su floppy
|
|
|
|
|
void TEmissione::floppy()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// aggiorna, su file, numero e data di emissione ed il flag di stampa
|
|
|
|
|
// su tutti gli effetti nel cursore
|
|
|
|
|
void TEmissione::aggiorna_rb(TCursor* cur)
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile &eff = cur->file(LF_EFFETTI);
|
|
|
|
|
for (*cur = 0; cur->pos() < cur->items(); ++(*cur))
|
|
|
|
|
{
|
|
|
|
|
TEffetto effetto = eff.curr();
|
|
|
|
|
long numero = effetto.numero();
|
|
|
|
|
effetto.put("NUMEMISS", numero);
|
|
|
|
|
TDate data = _msk->get_date(F_DATAEMIS);
|
|
|
|
|
effetto.put("DATAEMISS", data);
|
|
|
|
|
bool cond = TRUE;
|
|
|
|
|
effetto.put("EFFSTAMP", cond);
|
|
|
|
|
effetto.rewrite(eff);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// aggiorna, su file, il flag di stampa della distinta
|
|
|
|
|
// su tutti gli effetti nel cursore
|
|
|
|
|
void TEmissione::aggiorna_dist(TCursor* cur)
|
|
|
|
|
{
|
|
|
|
|
TLocalisamfile &eff = cur->file(LF_EFFETTI);
|
|
|
|
|
for (*cur = 0; cur->pos() < cur->items(); ++(*cur))
|
|
|
|
|
{
|
|
|
|
|
TEffetto effetto = eff.curr();
|
|
|
|
|
bool cond = TRUE;
|
|
|
|
|
effetto.put("DISTSTAM", cond);
|
|
|
|
|
effetto.rewrite(eff);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestione emissione su carta delle riba
|
|
|
|
|
void TEmissione::print_rb(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis)
|
|
|
|
|
{
|
|
|
|
|
TCursor* fcur = _formrb->cursor();
|
|
|
|
|
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
|
|
|
|
|
TString16 filter;
|
|
|
|
|
if (tipost == 'D') // se stampa definitiva effetti
|
|
|
|
|
if (!_msk->get_bool(F_RIST)) // se non deve ristampare le riba
|
|
|
|
|
filter = "EFFSTAMP=\" \""; // setta il filtro del cursore per ...
|
|
|
|
|
fcur->setfilter(filter,TRUE); // ... stampare solo gli effetti non ancora stampati
|
|
|
|
|
// setta la chiave 4 per il cursore per poter leggere tutti gli effetti della distinta
|
|
|
|
|
fcur->setkey(4);
|
|
|
|
|
TRectype darec(eff.curr()); // fissa i dati per la scelta degli ...
|
|
|
|
|
darec.zero(); // ... effetti nel primo e nell'ultimo record del cursore
|
|
|
|
|
darec.put("NDIST", ndist);
|
|
|
|
|
darec.put("TIPODIST", tipodist);
|
|
|
|
|
TRectype arec(darec);
|
|
|
|
|
fcur->setregion(darec, arec);
|
|
|
|
|
long n = fcur->items();
|
|
|
|
|
fcur->freeze(); // congela lo stato del cursore
|
|
|
|
|
// se la stampa non si fa a video istanzia puntatore per la gestione della barra di attesa
|
|
|
|
|
for (int j=0; j < ncopie; j++)
|
|
|
|
|
{
|
|
|
|
|
TProgind* pi;
|
|
|
|
|
if (!is_vis)
|
|
|
|
|
pi = new TProgind(n,"Stampa Effetti/Distinte...",FALSE,TRUE,10);
|
|
|
|
|
for (*fcur = 0; fcur->pos() < n; ++(*fcur)) // ciclo sugli elementi del cursore di stampa
|
|
|
|
|
{
|
|
|
|
|
if (!is_vis)
|
|
|
|
|
pi->addstatus(1L); // aggiorna la barra d'attesa
|
|
|
|
|
_formrb->print(); // stampa il form
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (tipost == 'D') // se emetto riba in definitiva ...
|
|
|
|
|
aggiorna_rb(fcur); // ... devo aggiornare data, numero emissine e flag di stampa effetto
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestione emissione su carta delle distinte
|
|
|
|
|
void TEmissione::print_dse(char tipost, int ndist, char tipodist, int ncopie, const bool is_vis)
|
|
|
|
|
{
|
|
|
|
|
TCursor* fcur = _formdse->cursor();
|
|
|
|
|
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
|
|
|
|
|
// setta la chiave 4 per il cursore per poter leggere tutti gli effetti della distinta
|
|
|
|
|
TString16 filter;
|
|
|
|
|
fcur->setfilter(filter,TRUE);
|
|
|
|
|
fcur->setkey(4);
|
|
|
|
|
TRectype darec(eff.curr()); // fissa i dati per la scelta degli ...
|
|
|
|
|
darec.zero(); // ... effetti nel primo e nell'ultimo record del cursore
|
|
|
|
|
darec.put("NDIST", ndist);
|
|
|
|
|
darec.put("TIPODIST", tipodist);
|
|
|
|
|
TRectype arec(darec);
|
|
|
|
|
fcur->setregion(darec, arec);
|
|
|
|
|
long n = fcur->items();
|
|
|
|
|
fcur->freeze(); // congela lo stato del cursore
|
|
|
|
|
// se la stampa non si fa a video istanzia puntatore per la gestione della barra di attesa
|
|
|
|
|
for (int j=0; j < ncopie; j++)
|
|
|
|
|
{
|
|
|
|
|
TProgind* pi;
|
|
|
|
|
if (!is_vis)
|
|
|
|
|
pi = new TProgind(n,"Stampa Effetti/Distinte...",FALSE,TRUE,10);
|
|
|
|
|
_base_page_no = 0;
|
|
|
|
|
if (!is_vis)
|
|
|
|
|
pi->addstatus(1L); // aggiorna la barra d'attesa
|
|
|
|
|
_formdse->print(); // stampa il form
|
|
|
|
|
_base_page_no = printer().getcurrentpage() -1; // stampa numero di pagina (solo nella distinta)
|
|
|
|
|
}
|
|
|
|
|
if (tipost == 'D') // se emetto distinta in definitiva ...
|
|
|
|
|
aggiorna_dist(fcur); // ... devo aggiornare flag di stampa distinta
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestione emissione su carta
|
|
|
|
|
void TEmissione::print()
|
|
|
|
|
{
|
|
|
|
|
int ncopie = _msk->get_int(F_NCOPIE);
|
|
|
|
|
if (ncopie == 0) ncopie = 1;
|
|
|
|
|
printer().open(); // apre la stampante
|
|
|
|
|
const bool is_vis = printer().printtype() == screenvis; // TRUE se si stampa a video
|
|
|
|
|
int emis = _msk->get_int(F_EMIS);
|
|
|
|
|
int ndist = _msk->get_int(F_NUMBER);
|
|
|
|
|
char tipodist = _msk->get(F_TIPODIST)[0];
|
|
|
|
|
_eff->put("TIPODIST",tipodist);
|
|
|
|
|
_eff->put("NDIST",ndist);
|
|
|
|
|
_eff->put("NRIGADIST",1);
|
|
|
|
|
_eff->setkey(4);
|
|
|
|
|
_eff->read();
|
|
|
|
|
long codabi = _eff->get_long("CODABIP");
|
|
|
|
|
char tipost = _msk->get(F_TIPOST)[0];
|
|
|
|
|
char tipord = _msk->get(F_TIPORD)[0];
|
|
|
|
|
// se emetto riba istanzio il form per le riba
|
|
|
|
|
// se emetto distinta istanzio il form per le distinte
|
|
|
|
|
if (emis == 1) // emetto riba
|
|
|
|
|
{
|
|
|
|
|
TString16 nomeform;
|
|
|
|
|
nomeform.format("rb%05ld.frm",codabi);// compongo il nome del form
|
|
|
|
|
if (!fexist(nomeform)) // ne controllo l'esistenza
|
|
|
|
|
nomeform = "rb.frm"; // se non esiste utilizzo il form generico
|
|
|
|
|
_formrb = new TRiba_form(nomeform);
|
|
|
|
|
print_rb(tipost,ndist,tipodist,ncopie,is_vis);
|
|
|
|
|
}
|
|
|
|
|
else // emetto distinta
|
|
|
|
|
{
|
|
|
|
|
TString16 nomeform;
|
|
|
|
|
nomeform.format("dse%05ld.frm",codabi);// compongo il nome del form
|
|
|
|
|
if (!fexist(nomeform)) // ne controllo l'esistenza
|
|
|
|
|
nomeform = "dse.frm"; // se non esiste utilizzo il form generico
|
|
|
|
|
_formdse = new TDistinta_form(nomeform, _firmrel);
|
|
|
|
|
_formdse->set_order(tipord);
|
|
|
|
|
print_dse(tipost,ndist,tipodist,ncopie,is_vis);
|
|
|
|
|
}
|
|
|
|
|
printer().close(); // chiude la stampante
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handler per gestire la conferma dell'annullamento dei dati inseriti nella maschera
|
|
|
|
|
bool TEmissione::annulla_handler(TMask_field& f, KEY k)
|
|
|
|
|
{
|
|
|
|
|
TMask &m = f.mask();
|
|
|
|
|
if (k == K_SPACE)
|
|
|
|
|
{
|
|
|
|
|
if (yesno_box("Vuoi veramete annullare i dati inseriti"))
|
|
|
|
|
m.reset();
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// costruttore classe TRiba_form
|
|
|
|
|
TRiba_form::TRiba_form(const char* name): TForm()
|
|
|
|
|
{
|
|
|
|
|
read(name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestione dei messaggi estesi nei campi
|
|
|
|
|
bool TRiba_form::validate(TForm_item &cf, TToken_string &s)
|
|
|
|
|
{
|
|
|
|
|
const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio
|
|
|
|
|
TString valore;
|
|
|
|
|
if (code == "_FATT")
|
|
|
|
|
{
|
|
|
|
|
// gestione dei campi relativi alle/a fatture/a a cui si riferisce un effetto
|
|
|
|
|
// sintassi: _FATT,<macro>
|
|
|
|
|
// dove: <macro> <20> uno delle macro seguenti:
|
|
|
|
|
// "!A" fattura o fatture
|
|
|
|
|
// "!DATI" numero e data fattura
|
|
|
|
|
// "!IMPFATT" importo fattura
|
|
|
|
|
TCursor* fcur = cursor();
|
|
|
|
|
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
|
|
|
|
|
TEffetto effetto = eff.curr();
|
|
|
|
|
long num = effetto.numero();
|
|
|
|
|
bool condition = (effetto.fatt(num));
|
|
|
|
|
TToken_string* dati = effetto.dati_fatt(num);
|
|
|
|
|
TString in(s.get());
|
|
|
|
|
if (in[0]=='!')
|
|
|
|
|
{
|
|
|
|
|
in.ltrim(1);
|
|
|
|
|
// "!A" se 1 sola fattura stampa 'a' altrimenti stampa 'e'
|
|
|
|
|
if (in == "A")
|
|
|
|
|
{
|
|
|
|
|
if (condition)
|
|
|
|
|
cf.set("a");
|
|
|
|
|
else
|
|
|
|
|
cf.set("e");
|
|
|
|
|
}
|
|
|
|
|
// "!DATIFATT" stampa numero e data fattura delle fatture a cui si riferisce l'effetto
|
|
|
|
|
if (in == "DATIFATT")
|
|
|
|
|
{
|
|
|
|
|
int elem = dati->items();
|
|
|
|
|
TString descfatt;
|
|
|
|
|
for (int i = 0; i < elem; i+=3)
|
|
|
|
|
{
|
|
|
|
|
descfatt << dati->get(i);
|
|
|
|
|
descfatt << " ";
|
|
|
|
|
descfatt << dati->get(i+1);
|
|
|
|
|
descfatt << " ";
|
|
|
|
|
cf.set(descfatt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// "!IMPFATT" se 1 sola fattura ne stampa l' importo
|
|
|
|
|
if (in == "IMPFATT")
|
|
|
|
|
{
|
|
|
|
|
if (condition)
|
|
|
|
|
cf.set(dati->get(2));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
valore = cf.get();
|
|
|
|
|
cf.put_paragraph(valore);
|
|
|
|
|
cf.set("");
|
|
|
|
|
return (TRUE);
|
|
|
|
|
} // fine _FATT
|
|
|
|
|
return TForm::validate(cf, s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// costruttore classe TDistinta_form
|
|
|
|
|
TDistinta_form::TDistinta_form(const char* name, TRelation *rel): TForm(), _firmrel(rel)
|
|
|
|
|
{
|
|
|
|
|
read(name);
|
|
|
|
|
_cursor = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// setta l'ordinamento del TSordet_cursor del form
|
|
|
|
|
void TDistinta_form::set_order(const char tipo)
|
|
|
|
|
{
|
|
|
|
|
TString ordine;
|
|
|
|
|
// ordinamento secondo la data di scadenza dell'effetto
|
|
|
|
|
if (tipo == 'S') ordine = "DATASCAD|TIPODIST|NDIST|NRIGADIST";
|
|
|
|
|
// ordinamento seconda il numero e la data della fattura
|
|
|
|
|
else if (tipo == 'F') ordine = "14->NFATT|TIPODIST|NDIST|NRIGADIST";
|
|
|
|
|
|
|
|
|
|
_cursor = new TSorted_cursor(relation(),ordine);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// distruttore classe TDistinta_form
|
|
|
|
|
TDistinta_form::~TDistinta_form()
|
|
|
|
|
{
|
|
|
|
|
if (_cursor) delete _cursor;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// gestione dei messaggi estesi nei campi
|
|
|
|
|
bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
|
|
|
|
|
{
|
|
|
|
|
const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio
|
|
|
|
|
TString valore;
|
|
|
|
|
if (code == "_DITTA")
|
|
|
|
|
{
|
|
|
|
|
// gestione di campi della ditta corrente
|
|
|
|
|
// sintassi: _DITTA,<macro>
|
|
|
|
|
// dove: <macro> <20> uno delle macro seguenti:
|
|
|
|
|
// "!RAGSOC" ragione sociale
|
|
|
|
|
TString in(s.get());
|
|
|
|
|
if (in[0]=='!')
|
|
|
|
|
{
|
|
|
|
|
in.ltrim(1);
|
|
|
|
|
// "!RAGSOC" prende la ragione sociale della ditta corrente
|
|
|
|
|
if (in=="RAGSOC") cf.set(_firmrel->lfile().get("RAGSOC"));
|
|
|
|
|
}
|
|
|
|
|
valore = cf.get();
|
|
|
|
|
cf.put_paragraph(valore);
|
|
|
|
|
cf.set("");
|
|
|
|
|
return (TRUE);
|
|
|
|
|
} // fine _DITTA
|
|
|
|
|
if (code == "_FATT")
|
|
|
|
|
{
|
|
|
|
|
// gestione dei campi relativi alle fatture a cui si riferisce un effetto
|
|
|
|
|
// sintassi: _FATT,<macro>
|
|
|
|
|
// dove: <macro> <20> uno delle macro seguenti:
|
|
|
|
|
// "!DATI" numero e data fattura
|
|
|
|
|
TCursor* fcur = cursor();
|
|
|
|
|
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
|
|
|
|
|
TEffetto effetto = eff.curr();
|
|
|
|
|
long num = effetto.numero();
|
|
|
|
|
TToken_string* dati = effetto.dati_fatt(num);
|
|
|
|
|
int elem = dati->items();
|
|
|
|
|
TString descfatt;
|
|
|
|
|
TString in(s.get()); // prende il primo parametro, il codice del messaggio
|
|
|
|
|
if (in[0]=='!')
|
|
|
|
|
{
|
|
|
|
|
in.ltrim(1);
|
|
|
|
|
// "!DATIFATT" stampa numero e data fattura delle fatture a cui si riferisce l'effetto
|
|
|
|
|
if (in == "DATIFATT")
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < elem; i+=3)
|
|
|
|
|
{
|
|
|
|
|
descfatt << dati->get(i);
|
|
|
|
|
descfatt << " ";
|
|
|
|
|
descfatt << dati->get(i+1);
|
|
|
|
|
descfatt << " ";
|
|
|
|
|
cf.set(descfatt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
valore = cf.get();
|
|
|
|
|
cf.put_paragraph(valore);
|
|
|
|
|
cf.set(""); // resetta il campo per la prossima stampa di questo item
|
|
|
|
|
return (TRUE);
|
|
|
|
|
} // fine _FATT
|
|
|
|
|
if (code == "_FOOTER")
|
|
|
|
|
{
|
|
|
|
|
// gestione dei campi del fondo pagina della distinta
|
|
|
|
|
// sintassi: _FOOTER,<macro>
|
|
|
|
|
// dove: <macro> <20> uno delle macro seguenti:
|
|
|
|
|
// "!NDOC" numero riba nella distinta
|
|
|
|
|
// "!TOTALE" totale presentato
|
|
|
|
|
TString in(s.get()); // prende il primo parametro, il codice del messaggio
|
|
|
|
|
if (in[0]=='!')
|
|
|
|
|
{
|
|
|
|
|
in.ltrim(1);
|
|
|
|
|
TCursor* fcur = cursor();
|
|
|
|
|
long i = fcur->items();
|
|
|
|
|
//"!NDOC" prende il numero riba nella distinta guardando quanti elementi ha il cursore di stampa
|
|
|
|
|
if (in == "NDOC")
|
|
|
|
|
cf.set(format("%ld",i));
|
|
|
|
|
//"!TOTALE" calcola il totale presentato prendendo i totale degli effetti nel cursore di stampa
|
|
|
|
|
if (in == "TOTALE")
|
|
|
|
|
{
|
|
|
|
|
long totale = 0;
|
|
|
|
|
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
|
|
|
|
|
for (*fcur = 0; fcur->pos() < i; ++(*fcur))
|
|
|
|
|
{
|
|
|
|
|
TEffetto effetto = eff.curr();
|
|
|
|
|
long imp = effetto.importo();
|
|
|
|
|
totale +=imp;
|
|
|
|
|
}
|
|
|
|
|
cf.set(format("%ld",totale));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
valore = cf.get();
|
|
|
|
|
cf.put_paragraph(valore);
|
|
|
|
|
cf.set("");
|
|
|
|
|
return (TRUE);
|
|
|
|
|
} // fine _FOOTER
|
|
|
|
|
if (code== "_PAGENO")
|
|
|
|
|
{
|
|
|
|
|
// messaggio per stampare il numero di pagina corrente
|
|
|
|
|
TString16 pg; pg << int(printer().getcurrentpage() - app().base_no());
|
|
|
|
|
cf.set(pg); cf.put_paragraph(pg);
|
|
|
|
|
cf.set("");
|
|
|
|
|
}
|
|
|
|
|
return TForm::validate(cf, s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ef0500(int argc, char* argv[])
|
|
|
|
|
{
|
|
|
|
|
TEmissione a ;
|
|
|
|
|
a.run(argc, argv, "Emissione Effetti e Distinte");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|