444 lines
12 KiB
C++
Executable File
444 lines
12 KiB
C++
Executable File
#include <printapp.h>
|
|
#include <mask.h>
|
|
#include <tabutil.h>
|
|
#include <utility.h>
|
|
#include <mailbox.h>
|
|
#include <execp.h>
|
|
|
|
#include <nditte.h>
|
|
#include <clifo.h>
|
|
#include <saldi.h>
|
|
#include <comuni.h>
|
|
#include "cg1200a.h"
|
|
#include "cg1200b.h"
|
|
|
|
#define COMRF_ALIAS 50
|
|
#define COMNASC_ALIAS 51
|
|
|
|
enum pt { undefined = 0, elenco = 1, rubriche = 2, etichette = 3 };
|
|
enum pw { clienti = 1, fornitori = 2, both = 3 };
|
|
|
|
bool mask2_reset_fields(TMask_field& mf, KEY k);
|
|
|
|
class CG1200_App : public TPrintapp
|
|
{
|
|
friend bool mask2_reset_fields(TMask_field& mf, KEY k);
|
|
|
|
pt _pr_type;
|
|
pw _pr_what;
|
|
TRelation* _rel;
|
|
int _cur_1, _cur_2;
|
|
int _sort;
|
|
int _interline;
|
|
bool _mov_only;
|
|
TLocalisamfile* _saldi;
|
|
|
|
// etichette
|
|
int _startrow, _rows_et, _cols_et, _startcol;
|
|
|
|
// variable field slots
|
|
TString _piva, _cpercip, _fax, _telex, _name, _telefono, _indir;
|
|
|
|
|
|
public:
|
|
|
|
virtual bool preprocess_page(int file, int counter);
|
|
virtual bool preprocess_print(int file, int counter);
|
|
virtual print_action postprocess_print(int file, int counter);
|
|
virtual void user_create();
|
|
virtual bool destroy();
|
|
virtual bool set_print(int);
|
|
|
|
int ccur() { return _sort == 1 ? _cur_1 : _cur_2; }
|
|
|
|
const char* look_tab(const char* tabname, TString& cod,
|
|
const char* fld = "S0");
|
|
const char* get_field(int ln, const char* fn)
|
|
{ return current_cursor()->curr(ln).get(fn); }
|
|
|
|
virtual void set_page (int file, int counter);
|
|
void set_elenco();
|
|
void set_rubriche();
|
|
void set_etichette();
|
|
void process_link(int id, const char* txt);
|
|
|
|
CG1200_App() : TPrintapp(),_piva(18), _cpercip(10), _fax(50), _telex(50),
|
|
_name(60), _telefono(90), _indir(70)
|
|
{
|
|
_rel = NULL; _pr_type = undefined; _startrow = 2; _startcol = 3;
|
|
_rows_et = 9; _cols_et = 40;
|
|
}
|
|
|
|
};
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/* ---------------------------- Code ---------------------------------- */
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
|
|
void CG1200_App::process_link(int id, const char* txt)
|
|
{
|
|
TString ss = "1|";
|
|
ss << txt;
|
|
TMessage fs(cmd2name("cg0","-1"), MSG_LN, ss);
|
|
TMailbox m;
|
|
m.send(fs);
|
|
TExternal_app cg0("cg0 -1");
|
|
if (cg0.run()) beep();
|
|
}
|
|
|
|
const char* CG1200_App::look_tab(const char* tabname, TString& cod,
|
|
const char* fld)
|
|
{
|
|
TTable tab(tabname);
|
|
tab.curr().zero();
|
|
tab.curr().put("CODTAB",cod);
|
|
tab.read();
|
|
if (tab.bad()) tab.curr().zero();
|
|
return tab.curr().get(fld);
|
|
}
|
|
|
|
bool CG1200_App::preprocess_page(int file, int counter)
|
|
{
|
|
if (_mov_only)
|
|
{
|
|
// se non movimentato
|
|
_saldi->curr().zero();
|
|
_saldi->curr().put(SLD_GRUPPO,get_field(LF_CLIFO,CLI_GRUPPO));
|
|
_saldi->curr().put(SLD_CONTO,get_field(LF_CLIFO, CLI_CONTO));
|
|
_saldi->curr().put(SLD_SOTTOCONTO,get_field(LF_CLIFO,CLI_CODCF));
|
|
_saldi->read();
|
|
if (_saldi->curr().get(SLD_GRUPPO) == get_field(LF_CLIFO, CLI_GRUPPO) &&
|
|
_saldi->curr().get(SLD_CONTO) == get_field(LF_CLIFO,CLI_CONTO) &&
|
|
_saldi->curr().get(SLD_SOTTOCONTO) == get_field(LF_CLIFO,CLI_CODCF))
|
|
// OSTIA! e' MOVIMENTATO!
|
|
return FALSE;
|
|
}
|
|
|
|
// set variable fields
|
|
_piva = get_field(LF_CLIFO, CLI_COFI);
|
|
if (_piva.empty()) _piva = get_field(LF_CLIFO, CLI_PAIV);
|
|
_telefono = get_field(LF_CLIFO, CLI_PTEL);
|
|
if (!_telefono.empty()) _telefono << "/";
|
|
_telefono << get_field(LF_CLIFO, CLI_TEL) << " ";
|
|
TString s(get_field(LF_CLIFO, CLI_PTEL2));
|
|
if (!s.empty()) s << "/";
|
|
_telefono << s << get_field(LF_CLIFO, CLI_TEL2) << " ";
|
|
s = get_field(LF_CLIFO, CLI_PTEL3);
|
|
if (!s.empty()) s << "/";
|
|
_telefono << s << get_field(LF_CLIFO, CLI_TEL3);
|
|
_fax = get_field(LF_CLIFO, CLI_PFAX);
|
|
if (!_fax.empty()) _fax << "/";
|
|
_fax << get_field(LF_CLIFO, CLI_FAX);
|
|
_telex = get_field(LF_CLIFO, CLI_PTELEX);
|
|
if (!_telex.empty()) _telex << "/";
|
|
_telex << get_field(LF_CLIFO, CLI_TELEX);
|
|
_indir = get_field(LF_CLIFO, CLI_INDCF);
|
|
|
|
if (!_indir.empty()) _indir << " ";
|
|
_indir << get_field(LF_CLIFO, CLI_CIVCF);
|
|
|
|
_name = get_field(LF_CLIFO, CLI_RAGSOC);
|
|
s = get_field(LF_CLIFO, CLI_CODANAGPER);
|
|
_cpercip = "";
|
|
if (s.not_empty()) _cpercip << get_field(LF_CLIFO, CLI_TIPOAPER) << " " << s;
|
|
|
|
// che minchia e' questo
|
|
// if (strcmp(get_field(LF_CLIFO, CLI_TIPOAPER),"F") == 0)
|
|
// {
|
|
// TString surname = _name.mid(30,50); surname.trim();
|
|
// _name = _name.mid(0,30); _name.trim();
|
|
// _name << " " << surname;
|
|
// }
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
print_action CG1200_App::postprocess_print(int file, int counter)
|
|
{
|
|
static bool more = FALSE;
|
|
if (_pr_what == both)
|
|
{
|
|
if (more)
|
|
{
|
|
more = FALSE;
|
|
select_cursor(ccur());
|
|
return NEXT_PAGE;
|
|
}
|
|
else
|
|
{
|
|
more = TRUE;
|
|
select_cursor(ccur());
|
|
return REPEAT_PAGE;
|
|
}
|
|
}
|
|
return NEXT_PAGE;
|
|
}
|
|
|
|
bool mask_ctrl_handler(TMask_field& mf, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
mf.mask().stop_run(mf.dlg());
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
// set printrows
|
|
|
|
void CG1200_App::set_page(int file, int counter)
|
|
{
|
|
switch(_pr_type)
|
|
{
|
|
case elenco:
|
|
set_elenco();
|
|
break;
|
|
case rubriche:
|
|
set_rubriche();
|
|
break;
|
|
case etichette:
|
|
set_etichette();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CG1200_App::set_elenco()
|
|
{
|
|
reset_header();
|
|
// intestazione
|
|
const long firm = get_firm();
|
|
TLocalisamfile ditte(LF_NDITTE);
|
|
ditte.zero();
|
|
ditte.put(NDT_CODDITTA, firm);
|
|
ditte.read();
|
|
if (ditte.bad()) ditte.zero();
|
|
TString s(ditte.get(NDT_RAGSOC));
|
|
set_header(1, "Ditta %ld %s @102gData @<@125gPag @#", firm, (const char*) s);
|
|
set_header(2, "Elenco %s",(_pr_what == both ? "Clienti+Fornitori" :
|
|
(_pr_what == clienti ? "Clienti" : "Fornitori")));
|
|
set_header(3, (const char *)(TString(132).fill('-')));
|
|
set_header(4, " Codice Ragione sociale");
|
|
set_header(5, "@9gIndirizzo@59gC.A.P.@66gLocalita'");
|
|
set_header(6, "@9gTelefoni@91gFAX @115gTelex");
|
|
set_header(7, "@9gLuogo di nascita@46gData"
|
|
"@56gPartita IVA Codice fiscale@93gConto di costo/ricavo@115gC.allegato@126gPerc.770");
|
|
set_header(8, (const char *)(TString(132).fill('-')));
|
|
// body
|
|
set_row(1,"$[r]@1s$[n] $[r]@pn$[n] #t", FLD(LF_CLIFO, CLI_TIPOCF),
|
|
FLD(LF_CLIFO, CLI_CODCF,"@@@@@@"), &_name);
|
|
set_row(2,"@9g#t@59g@s@66g@s @s", &_indir, FLD(LF_CLIFO, CLI_CAPCF),
|
|
FLD(-COMRF_ALIAS,COM_DENCOM), FLD(-COMRF_ALIAS,COM_PROVCOM));
|
|
set_row(3,"@9g#t@90g#t@115g#t", &_telefono, &_fax, &_telex);
|
|
set_row(4,"@9g@s @s@46g@ld@56g#t@92g@3n @3n @6n@115g@n@126g#t",
|
|
FLD(-COMNASC_ALIAS, COM_DENCOM), FLD(-COMNASC_ALIAS, COM_PROVCOM),
|
|
FLD(LF_CLIFO, CLI_DATANASC), &_piva, FLD(LF_CLIFO,CLI_GRUPPORIC),
|
|
FLD(LF_CLIFO,CLI_CONTORIC), FLD(LF_CLIFO, CLI_SOTTOCRIC),
|
|
FLD(LF_CLIFO, CLI_CODALLEG), &_cpercip);
|
|
|
|
for(int i = 0; i < _interline; i++)
|
|
set_row(i+5,"");
|
|
}
|
|
|
|
void CG1200_App::set_rubriche()
|
|
{
|
|
reset_header();
|
|
// intestazione
|
|
const long firm = get_firm();
|
|
TLocalisamfile ditte(LF_NDITTE);
|
|
ditte.zero();
|
|
ditte.put(NDT_CODDITTA, firm);
|
|
ditte.read();
|
|
if (ditte.bad()) ditte.zero();
|
|
TString s(ditte.get(NDT_RAGSOC));
|
|
set_header(1, "Ditta %ld %s @102gData @<@125gPag @#", firm, (const char*) s);
|
|
set_header(2, "Rubrica %s",(_pr_what == both ? "Clienti+Fornitori" :
|
|
(_pr_what == clienti ? "Clienti" : "Fornitori")));
|
|
set_header(3, (const char *)(TString(132).fill('-')));
|
|
set_header(4, " Codice Ragione sociale");
|
|
set_header(5, "@9gIndirizzo@59gC.A.P.@66gLocalita'");
|
|
set_header(6, "@9gTelefoni@91gFAX @115gTelex");
|
|
set_header(7, (const char *)(TString(132).fill('-')));
|
|
// body
|
|
set_row(1,"$[r]@1s$[n] $[r]@pn$[n] #t", FLD(LF_CLIFO,CLI_TIPOCF),
|
|
FLD(LF_CLIFO,CLI_CODCF,"@@@@@@"), &_name);
|
|
set_row(2,"@9g#t@59g@s@66g@s @s", &_indir, FLD(LF_CLIFO, CLI_CAPCF),
|
|
FLD(-COMRF_ALIAS,COM_DENCOM), FLD(-COMRF_ALIAS,COM_PROVCOM));
|
|
set_row(3,"@9g#t@90g#t@115g#t", &_telefono, &_fax, &_telex);
|
|
|
|
for(int i = 0; i < _interline; i++)
|
|
set_row(i+4,"");
|
|
}
|
|
|
|
bool mask2_reset_fields(TMask_field& mf, KEY k)
|
|
{
|
|
if (k == K_SPACE)
|
|
{
|
|
CG1200_App* a = (CG1200_App*)MainApp();
|
|
mf.mask().field(FLD_CGB_STARTROW).set(format("%d",a->_startrow));
|
|
mf.mask().field(FLD_CGB_STARTCOL).set(format("%d",a->_startcol));
|
|
mf.mask().field(FLD_CGB_ROWSET).set(format("%d",a->_rows_et));
|
|
mf.mask().field(FLD_CGB_COLSET).set(format("%d",a->_cols_et));
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void CG1200_App::set_etichette()
|
|
{
|
|
reset_header();
|
|
for (int i = 1; i < _startrow; i++)
|
|
set_row(i,"");
|
|
|
|
set_row(_startrow, format("@%dg#-%dt",_startcol, _cols_et - _startcol),
|
|
&_name);
|
|
set_row(_startrow+1, format("@%dg#-%dt",_startcol, _cols_et - _startcol),
|
|
&_indir);
|
|
set_row(_startrow+2, format("@%dg@5s @%ds @2s",_startcol,
|
|
_cols_et - _startcol - 9),
|
|
FLD(LF_CLIFO, CLI_CAPCF),
|
|
FLD(-COMRF_ALIAS, COM_DENCOM),
|
|
FLD(-COMRF_ALIAS, COM_PROVCOM));
|
|
|
|
for (i = _startrow+3; i <= _rows_et; i++)
|
|
set_row(i,"");
|
|
}
|
|
|
|
bool CG1200_App::set_print(int)
|
|
{
|
|
disable_links();
|
|
set_multiple_link(FALSE);
|
|
|
|
TMask mask("cg1200a.msk");
|
|
|
|
mask.set_handler(BUT_CG12_ELENCO, mask_ctrl_handler);
|
|
mask.set_handler(BUT_CG12_RUBRICHE, mask_ctrl_handler);
|
|
mask.set_handler(BUT_CG12_ETICHETTE, mask_ctrl_handler);
|
|
mask.run();
|
|
|
|
// set print type
|
|
switch (mask.last_key())
|
|
{
|
|
case K_ESC:
|
|
case K_QUIT:
|
|
return FALSE;
|
|
break;
|
|
case BUT_CG12_ELENCO:
|
|
_pr_type = elenco;
|
|
break;
|
|
case BUT_CG12_ETICHETTE:
|
|
{
|
|
TMask mask2("cg1200b.msk");
|
|
|
|
/* TBI read/save from - to config file */
|
|
_pr_type = etichette;
|
|
|
|
mask2.set_handler(BUT_CGB_RESET, mask2_reset_fields);
|
|
|
|
mask2.field(FLD_CGB_ROWSET).set(format("%d",_rows_et));
|
|
mask2.field(FLD_CGB_COLSET).set(format("%d",_cols_et));
|
|
|
|
mask2.field(FLD_CGB_STARTROW).set(format("%d",_startrow));
|
|
mask2.field(FLD_CGB_STARTCOL).set(format("%d",_startcol));
|
|
|
|
// set defaults
|
|
|
|
mask2.run();
|
|
|
|
_startrow = atoi(mask2.get(FLD_CGB_STARTROW));
|
|
_startcol = atoi(mask2.get(FLD_CGB_STARTCOL));
|
|
_rows_et = atoi(mask2.get(FLD_CGB_ROWSET));
|
|
_cols_et = atoi(mask2.get(FLD_CGB_COLSET));
|
|
break;
|
|
}
|
|
case BUT_CG12_RUBRICHE:
|
|
_pr_type = rubriche;
|
|
break;
|
|
}
|
|
|
|
if (_pr_type != etichette)
|
|
{
|
|
set_multiple_link(TRUE);
|
|
enable_link("Collegamento Archivio clienti e fornitori : ", 'r');
|
|
}
|
|
|
|
_sort = mask.get_int(RDB_CG12_SORT);
|
|
_pr_what = (pw) mask.get_int(RDB_CG12_TYPE);
|
|
_interline = mask.get_int(LST_CG12_INTERLINE);
|
|
_mov_only = mask.get_bool(CHK_CG12_MOVIM);
|
|
|
|
select_cursor(ccur());
|
|
|
|
TRectype tr1(current_cursor()->curr());
|
|
tr1.zero();
|
|
TRectype tr2(tr1);
|
|
|
|
if (_pr_what != both)
|
|
{
|
|
// filter
|
|
tr1.put(CLI_TIPOCF, _pr_what == clienti ? "C" : "F");
|
|
tr2.put(CLI_TIPOCF, _pr_what == clienti ? "C" : "F");
|
|
short fromid, toid;
|
|
TString nome_campo(12);
|
|
|
|
if (_sort == 1)
|
|
{
|
|
fromid = (_pr_what == clienti) ? FLD_CLI_CODFR : FLD_FOR_CODFR;
|
|
toid = (_pr_what == clienti) ? FLD_CLI_CODTO : FLD_FOR_CODTO;
|
|
nome_campo = CLI_CODCF;
|
|
}
|
|
else
|
|
{
|
|
fromid = (_pr_what == clienti) ? FLD_CLI_RAGSOCFR : FLD_FOR_RAGSOCFR;
|
|
toid = (_pr_what == clienti) ? FLD_CLI_RAGSOCTO : FLD_FOR_RAGSOCTO;
|
|
nome_campo = CLI_RAGSOC;
|
|
}
|
|
const TString cod_from(mask.get(fromid));
|
|
const TString cod_to(mask.get(toid));
|
|
|
|
if (cod_from.not_empty()) tr1.put(nome_campo, cod_from);
|
|
if (cod_to.not_empty()) tr2.put(nome_campo, cod_to);
|
|
}
|
|
current_cursor()->setregion(tr1, tr2);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
bool CG1200_App::preprocess_print(int file, int counter)
|
|
{
|
|
reset_print();
|
|
if (_pr_type == undefined)
|
|
return set_print(counter);
|
|
return TRUE;
|
|
}
|
|
|
|
void CG1200_App::user_create()
|
|
{
|
|
// set relation and cursors
|
|
_rel = new TRelation(LF_CLIFO);
|
|
_rel->add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1, 0, COMRF_ALIAS);
|
|
_rel->add(LF_COMUNI, "STATO==STATONASC|COM==COMNASC", 1, 0, COMNASC_ALIAS);
|
|
_saldi = new TLocalisamfile(LF_SALDI); _saldi->setkey(2);
|
|
_cur_1 = add_cursor(new TCursor(_rel,"",1));
|
|
_cur_2 = add_cursor(new TCursor(_rel,"",2));
|
|
add_file(LF_CLIFO);
|
|
enable_print_menu();
|
|
}
|
|
|
|
bool CG1200_App::destroy()
|
|
{
|
|
if (_rel)
|
|
delete _rel;
|
|
delete _saldi;
|
|
return TRUE;
|
|
}
|
|
|
|
int cg1200(int argc, char* argv[])
|
|
{
|
|
CG1200_App app;
|
|
app.run(argc, argv, "Stampe Clienti/Fornitori");
|
|
return 0;
|
|
}
|