campo-sirio/cg/cg1200.cpp

414 lines
11 KiB
C++
Raw Normal View History

#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;
}