414 lines
11 KiB
C++
Executable File
414 lines
11 KiB
C++
Executable File
#include <printapp.h>
|
|
#include <mask.h>
|
|
#include <tabutil.h>
|
|
#include <utility.h>
|
|
|
|
#include "cg1200a.h"
|
|
#include "cg1200b.h"
|
|
|
|
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_c1, _cur_c2, _cur_f1, _cur_f2;
|
|
int _sort;
|
|
int _interline;
|
|
bool _mov_only;
|
|
TLocalisamfile* _comuni;
|
|
TLocalisamfile* _saldi;
|
|
|
|
// etichette
|
|
int _startrow, _rows_et, _cols_et, _startcol;
|
|
|
|
// variable field slots
|
|
TString _piva;
|
|
TString _telefono;
|
|
TString _name;
|
|
|
|
public:
|
|
|
|
virtual bool preprocess_page(int counter);
|
|
virtual bool preprocess_print(int counter);
|
|
virtual print_action postprocess_print(int counter);
|
|
virtual void user_create();
|
|
virtual bool destroy();
|
|
virtual bool set_print(int);
|
|
|
|
int ccli() { return _sort == 1 ? _cur_c1 : _cur_c2; }
|
|
int cfor() { return _sort == 1 ? _cur_f1 : _cur_f2; }
|
|
|
|
TRectype& look_com(TString& cod);
|
|
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); }
|
|
|
|
void set_rows();
|
|
void set_elenco();
|
|
void set_rubriche();
|
|
void set_etichette();
|
|
|
|
CG1200_App() : TPrintapp(), _piva(30), _telefono(50),
|
|
_name(60)
|
|
{
|
|
_rel = NULL; _pr_type = undefined; _startrow = 2; _startcol = 3;
|
|
_rows_et = 9; _cols_et = 40;
|
|
}
|
|
};
|
|
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/* ---------------------------- Code ---------------------------------- */
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
|
|
TRectype& CG1200_App::look_com(TString& cod)
|
|
{
|
|
_comuni->curr().zero();
|
|
_comuni->curr().put("COM",cod);
|
|
_comuni->read();
|
|
if (_comuni->bad())
|
|
_comuni->curr().zero();
|
|
return _comuni->curr();
|
|
}
|
|
|
|
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 counter)
|
|
{
|
|
if (_mov_only)
|
|
{
|
|
// se non movimentato
|
|
_saldi->curr().zero();
|
|
_saldi->curr().put("GRUPPO",get_field(LF_CLIFO,"GRUPPO"));
|
|
_saldi->curr().put("CONTO",get_field(LF_CLIFO,"CONTO"));
|
|
_saldi->curr().put("SOTTOCONTO",get_field(LF_CLIFO,"CODCF"));
|
|
_saldi->read();
|
|
if (_saldi->curr().get("GRUPPO") == get_field(LF_CLIFO,"GRUPPO") &&
|
|
_saldi->curr().get("CONTO") == get_field(LF_CLIFO,"CONTO") &&
|
|
_saldi->curr().get("SOTTOCONTO") == get_field(LF_CLIFO,"CODCF"))
|
|
// OSTIA! e' MOVIMENTATO!
|
|
return FALSE;
|
|
}
|
|
|
|
// set variable fields
|
|
_piva = get_field(LF_CLIFO,"COFI");
|
|
if (_piva.empty()) _piva = get_field(LF_CLIFO,"PAIV");
|
|
_telefono = get_field(LF_CLIFO,"PTEL");
|
|
if (!_telefono.empty()) _telefono << "/";
|
|
_telefono << get_field(LF_CLIFO,"TEL");
|
|
|
|
_name = get_field(LF_CLIFO,"RAGSOC");
|
|
|
|
if (strcmp(get_field(LF_CLIFO,"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 counter)
|
|
{
|
|
static bool more = FALSE;
|
|
if (_pr_what == both)
|
|
{
|
|
if (more)
|
|
{
|
|
more = FALSE;
|
|
select_cursor(ccli());
|
|
return NEXT_PAGE;
|
|
}
|
|
else
|
|
{
|
|
more = TRUE;
|
|
select_cursor(cfor());
|
|
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_rows()
|
|
{
|
|
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_print();
|
|
reset_header();
|
|
// intestazione
|
|
set_header(1, "Ditta /*TBI*/@82gStudio /*TBI*/@102gData @<@125gPag @#");
|
|
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@55gIndirizzo@91gC.a.p.Localita'"
|
|
"@117gPr Telefono");
|
|
set_header(5,"@8gLuogo di nascita@29gData@40gProv. Nazione "
|
|
"Partita IVA Codice fiscale@91gConto di costo/ricavo");
|
|
set_header(6,"@55gCodice per allegato@90gPercipiente 770");
|
|
set_header(7, (const char *)(TString(132).fill('-')));
|
|
// body
|
|
set_row(1,"@pn #s@55g@s@91g@s @s@117g@s #s",
|
|
FLD(LF_CLIFO, "CODCF","@@@@@@"),
|
|
(const char*)_name,
|
|
FLD(LF_CLIFO, "INDCF"),
|
|
FLD(LF_CLIFO, "CAPCF"),
|
|
FLD(LF_COMUNI,"DENCOM"),
|
|
FLD(LF_COMUNI,"PROVCOM"),
|
|
(const char*)_telefono);
|
|
set_row(2,"@54g#s@90g@2n @2n @pn",
|
|
(const char *)_piva,
|
|
FLD(LF_CLIFO,"GRUPPORIC"),
|
|
FLD(LF_CLIFO,"CONTORIC"),
|
|
FLD(LF_CLIFO,"SOTTOCRIC","@@@@@@"));
|
|
|
|
for(int i = 0; i < _interline; i++)
|
|
set_row(i+3,"");
|
|
}
|
|
|
|
void CG1200_App::set_rubriche()
|
|
{
|
|
reset_print();
|
|
reset_header();
|
|
// intestazione
|
|
set_header(1, "Ditta /*TBI*/@82gStudio /*TBI*/@102gData @<@125gPag @#");
|
|
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 C Ragione sociale@41gIndirizzo@77gCap@83gLocalita'"
|
|
"@104gPr Partita iva Telefono");
|
|
set_header(5, (const char *)(TString(132).fill('-')));
|
|
// body
|
|
set_row(1,"@pn #s@55g@s@91g@s @s@117g@s #s",
|
|
FLD(LF_CLIFO,"CODCF","@@@@@@"),
|
|
(const char *)_name,
|
|
FLD(LF_CLIFO,"INDCF"),
|
|
FLD(LF_CLIFO,"CAPCF"),
|
|
FLD(LF_COMUNI,"DENCOM"),
|
|
FLD(LF_COMUNI,"PROVCOM"),
|
|
(const char*)_telefono);
|
|
}
|
|
|
|
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_print();
|
|
reset_header();
|
|
TMask mask2("cg1200b.msk");
|
|
|
|
/* TBI read/save from - to config file */
|
|
|
|
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));
|
|
|
|
for (int i = 1; i < _startrow; i++)
|
|
set_row(i,"");
|
|
|
|
set_row(_startrow, format("@%dg#%ds",_startcol, _cols_et - _startcol),
|
|
(const char*)_name);
|
|
set_row(_startrow+1, format("@%dg@%ds",_startcol, _cols_et - _startcol),
|
|
FLD(LF_CLIFO,"INDCF"));
|
|
set_row(_startrow+2, format("@%dg@5s @%ds @2s",_startcol,
|
|
_cols_et - _startcol - 9),
|
|
FLD(LF_CLIFO,"CAPCF"),
|
|
FLD(LF_COMUNI,"DENCOM"),
|
|
FLD(LF_COMUNI,"PROVCOM"));
|
|
|
|
for (i = _startrow+3; i <= _rows_et; i++)
|
|
set_row(i,"");
|
|
}
|
|
|
|
bool CG1200_App::set_print(int)
|
|
{
|
|
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:
|
|
return FALSE;
|
|
break;
|
|
case BUT_CG12_ELENCO:
|
|
_pr_type = elenco;
|
|
break;
|
|
case BUT_CG12_ETICHETTE:
|
|
_pr_type = etichette;
|
|
break;
|
|
case BUT_CG12_RUBRICHE:
|
|
_pr_type = rubriche;
|
|
break;
|
|
}
|
|
|
|
_sort = atoi(mask.get(RDB_CG12_SORT));
|
|
_pr_what = (pw)atoi(mask.get(RDB_CG12_TYPE));
|
|
_interline = atoi(mask.get(LST_CG12_INTERLINE));
|
|
_mov_only = mask.get(CHK_CG12_MOVIM) == "X";
|
|
|
|
TString cod_from(5), cod_to(5);
|
|
TLocalisamfile* fl;
|
|
|
|
if (_pr_what == fornitori)
|
|
select_cursor(cfor());
|
|
else select_cursor(ccli());
|
|
|
|
if (_pr_what != both)
|
|
{
|
|
// filter
|
|
if (_sort == 1)
|
|
{
|
|
cod_from = mask.get(_pr_what == clienti ? FLD_CLI_CODFR
|
|
: FLD_FOR_CODFR);
|
|
cod_to = mask.get(_pr_what == clienti ? FLD_CLI_CODTO
|
|
: FLD_FOR_CODTO);
|
|
}
|
|
else
|
|
{
|
|
cod_from = mask.get(_pr_what == clienti ? FLD_CLI_RAGSOCFR
|
|
: FLD_FOR_RAGSOCFR);
|
|
cod_to = mask.get(_pr_what == clienti ? FLD_CLI_RAGSOCTO
|
|
: FLD_FOR_RAGSOCTO);
|
|
}
|
|
if ((!cod_from.empty() || !cod_to.empty()) && _pr_what != both)
|
|
{
|
|
fl = current_cursor()->file(LF_CLIFO);
|
|
TRectype tr1(fl->curr());
|
|
TRectype tr2(fl->curr());
|
|
tr1.zero(); tr2.zero();
|
|
if (_sort == 1)
|
|
{
|
|
tr1.put("CODCF",cod_from);
|
|
tr2.put("CODCF",cod_to);
|
|
tr1.put("TIPOCF", _pr_what == clienti ? "C" : "F");
|
|
tr2.put("TIPOCF", _pr_what == clienti ? "C" : "F");
|
|
}
|
|
else
|
|
{
|
|
tr1.put("RAGSOC",cod_from);
|
|
tr2.put("RAGSOC",cod_to);
|
|
}
|
|
current_cursor()->setregion(cod_from.empty() ? NULL : &tr1,
|
|
cod_to.empty() ? NULL : &tr2);
|
|
}
|
|
}
|
|
|
|
// initialize (non dovrebbe servire)
|
|
(*current_cursor()) = 0l;
|
|
|
|
// set initial print rows & headers
|
|
set_rows();
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
bool CG1200_App::preprocess_print(int counter)
|
|
{
|
|
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, "COM=COMCF");
|
|
_comuni = _rel->lfile(LF_COMUNI);
|
|
_saldi = new TLocalisamfile(LF_SALDI); _saldi->setkey(2);
|
|
_cur_c1 = add_cursor(new TCursor(_rel,"TIPOCF=\"C\"",1));
|
|
_cur_c2 = add_cursor(new TCursor(_rel,"TIPOCF=\"C\"",2));
|
|
_cur_f1 = add_cursor(new TCursor(_rel,"TIPOCF=\"F\"",1));
|
|
_cur_f2 = add_cursor(new TCursor(_rel,"TIPOCF=\"F\"",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;
|
|
}
|