diff --git a/ba/ba1102.cpp b/ba/ba1102.cpp index cf12eb466..c09f126fb 100755 --- a/ba/ba1102.cpp +++ b/ba/ba1102.cpp @@ -1,196 +1,196 @@ -#include -#include -#include -#include -#include - -#include "ba1100.h" - - - -bool TEdit_file::browse(int logicnum, const char* name) -{ - TRelation relation(logicnum); - TCursor cursor(&relation); - TRectype& curr = cursor.curr(); - TRectype svrec(cursor.curr()); - - TToken_string head(256); - TToken_string trac(256); - - const char* n; - trac.add(""); - head.add("@1"); - - for(int i = 0; (n = curr.fieldname(i)) != NULL; i++) - { - trac.add(n); - head.add(n); - - int len = curr.length(n); - if (curr.type(n) == _datefld) len = 10; - if (len > strlen(n)) head << '@' << len; - } - - KEY ch; - TCursor_sheet sheet(&cursor, trac, name, head, 6); - - while ((ch = sheet.run()) != K_ESC) - { - if (ch == K_DEL && sheet.one_checked()) - { - TProgind* pind = NULL; - cursor.freeze(TRUE); - bool go = FALSE; - bool first = FALSE; - int j; - for (j = 0, cursor = 0; j < sheet.items(); ++cursor, j++) - { - if (sheet.checked(j)) - { - if (!go && !first) - go = yesno_box("Confermi la cancellazione dei %d " - "record indicati?", sheet.checked()); - first = TRUE; - - if (!pind) - { - pind = new TProgind(sheet.checked(),"Attendere...", - TRUE, TRUE, 32); - pind->addstatus(1); - } - else - { - if (pind->iscancelled()) break; - pind->addstatus(1); - } - - if (go) cursor.file()->remove(); - sheet.uncheck(j); - } - } - if (pind) delete pind; - cursor.freeze(FALSE); - - if (first) {sheet.select(1); continue;} - } - if (ch == K_ENTER || ch == K_DEL) - cursor = sheet.selected(); - - switch(ch) - { - case K_ENTER: // edit fields - svrec = curr; - if (edit_record(curr, FALSE) == K_ENTER) - { - TString s(svrec.key(1)); - - if (s != curr.key(1)) - { - cursor.file()->write(); - if (cursor.file()->good()) - { - curr = svrec; - cursor.file()->remove(); - } - } - else - cursor.file()->rewrite(); - } - break; - case K_DEL: // delete record - if (yesno_box("Confermare la cancellazione del record")) - cursor.file()->remove(); - break; - case K_INS: // insert new record - curr.zero(); - if (edit_record(curr,FALSE) == K_ENTER) - cursor.file()->write(); - break; - } - sheet.force_update(); - } - return K_ESC; -} - -KEY TEdit_file::edit_record(TRectype& rec, bool readonly) -{ - for(int recs = 0; rec.fieldname(recs) != NULL; recs++); - - int rows = recs > 15 ? 20 : recs+4; - int pages = recs/15 + (recs % 15 ? 1 : 0); - TMask m("Modifica record", pages, 78, rows); - - int curpage = 0, currow = 1, nid = 100; - const char* cp; - - for(int i = 0; (cp = rec.fieldname(i)) != NULL; i++) - { - // add fields ONE by ONE - TString16 s(cp); s.left_just(16); - int len = rec.length(cp); - switch (rec.type(cp)) - { - case _alfafld: - m.add_string(nid++,curpage, s, 3, currow, len, "", - len > 50 ? 50 : len); - break; - case _intfld: - case _longfld: - case _wordfld: - case _realfld: - m.add_number(nid++, curpage, s, 3, currow, len, "", - rec.ndec(cp)); - break; - case _datefld: - m.add_date(nid++, curpage, s, 3, currow); - break; - case _charfld: - case _boolfld: - m.add_string(nid++,curpage, s, 3, currow, 1); - break; - case _intzerofld: - case _longzerofld: - m.add_number(nid++, curpage, s, 3, currow, len, "Z", - rec.ndec(cp)); - break; - default: - break; - } - - m.field(nid-1).set(rec.get(cp)); - - if (((i+1) % 15) == 0 || i == recs-1) - { - m.add_button(DLG_OK, curpage, "", -12, -1, 9, 2); - m.add_button(DLG_CANCEL, curpage, "", -22, -1, 9, 2); - curpage++; currow = 1; - } - else currow++; - } - - if (readonly) - { - const int max = m.fields(); - for (int i = 0; i < max; i++) - { - TMask_field& f = m.fld(i); - if (f.class_id() != CLASS_BUTTON_FIELD) - f.disable(); - } - } - - const KEY k = m.run(); - - if (k == K_ENTER && !readonly) - { - nid = 100; - for(i = 0; (cp = rec.fieldname(i)) != NULL; i++) - rec.put(cp, m.get(nid++)); - } - - return k; -} - - - +#include +#include +#include +#include +#include + +#include "ba1100.h" + + + +bool TEdit_file::browse(int logicnum, const char* name) +{ + TRelation relation(logicnum); + TCursor cursor(&relation); + TRectype& curr = cursor.curr(); + TRectype svrec(cursor.curr()); + + TToken_string head(256); + TToken_string trac(256); + + const char* n; + trac.add(""); + head.add("@1"); + + for(int i = 0; (n = curr.fieldname(i)) != NULL; i++) + { + trac.add(n); + head.add(n); + + int len = curr.length(n); + if (curr.type(n) == _datefld) len = 10; + if (len > (int)strlen(n)) head << '@' << len; + } + + KEY ch; + TCursor_sheet sheet(&cursor, trac, name, head, 6); + + while ((ch = sheet.run()) != K_ESC) + { + if (ch == K_DEL && sheet.one_checked()) + { + TProgind* pind = NULL; + cursor.freeze(TRUE); + bool go = FALSE; + bool first = FALSE; + int j; + for (j = 0, cursor = 0; j < sheet.items(); ++cursor, j++) + { + if (sheet.checked(j)) + { + if (!go && !first) + go = yesno_box("Confermi la cancellazione dei %d " + "record indicati?", sheet.checked()); + first = TRUE; + + if (!pind) + { + pind = new TProgind(sheet.checked(),"Attendere...", + TRUE, TRUE, 32); + pind->addstatus(1); + } + else + { + if (pind->iscancelled()) break; + pind->addstatus(1); + } + + if (go) cursor.file().remove(); + sheet.uncheck(j); + } + } + if (pind) delete pind; + cursor.freeze(FALSE); + + if (first) {sheet.select(1); continue;} + } + if (ch == K_ENTER || ch == K_DEL) + cursor = sheet.selected(); + + switch(ch) + { + case K_ENTER: // edit fields + svrec = curr; + if (edit_record(curr, FALSE) == K_ENTER) + { + TString s(svrec.key(1)); + + if (s != curr.key(1)) + { + cursor.file().write(); + if (cursor.file().good()) + { + curr = svrec; + cursor.file().remove(); + } + } + else + cursor.file().rewrite(); + } + break; + case K_DEL: // delete record + if (yesno_box("Confermare la cancellazione del record")) + cursor.file().remove(); + break; + case K_INS: // insert new record + curr.zero(); + if (edit_record(curr,FALSE) == K_ENTER) + cursor.file().write(); + break; + } + sheet.force_update(); + } + return K_ESC; +} + +KEY TEdit_file::edit_record(TRectype& rec, bool readonly) +{ + for(int recs = 0; rec.fieldname(recs) != NULL; recs++); + + int rows = recs > 15 ? 20 : recs+4; + int pages = recs/15 + (recs % 15 ? 1 : 0); + TMask m("Modifica record", pages, 78, rows); + + int curpage = 0, currow = 1, nid = 100; + const char* cp; + + for(int i = 0; (cp = rec.fieldname(i)) != NULL; i++) + { + // add fields ONE by ONE + TString16 s(cp); s.left_just(16); + int len = rec.length(cp); + switch (rec.type(cp)) + { + case _alfafld: + m.add_string(nid++,curpage, s, 3, currow, len, "", + len > 50 ? 50 : len); + break; + case _intfld: + case _longfld: + case _wordfld: + case _realfld: + m.add_number(nid++, curpage, s, 3, currow, len, "", + rec.ndec(cp)); + break; + case _datefld: + m.add_date(nid++, curpage, s, 3, currow); + break; + case _charfld: + case _boolfld: + m.add_string(nid++,curpage, s, 3, currow, 1); + break; + case _intzerofld: + case _longzerofld: + m.add_number(nid++, curpage, s, 3, currow, len, "Z", + rec.ndec(cp)); + break; + default: + break; + } + + m.field(nid-1).set(rec.get(cp)); + + if (((i+1) % 15) == 0 || i == recs-1) + { + m.add_button(DLG_OK, curpage, "", -12, -1, 9, 2); + m.add_button(DLG_CANCEL, curpage, "", -22, -1, 9, 2); + curpage++; currow = 1; + } + else currow++; + } + + if (readonly) + { + const int max = m.fields(); + for (int i = 0; i < max; i++) + { + TMask_field& f = m.fld(i); + if (f.class_id() != CLASS_BUTTON_FIELD) + f.disable(); + } + } + + const KEY k = m.run(); + + if (k == K_ENTER && !readonly) + { + nid = 100; + for(i = 0; (cp = rec.fieldname(i)) != NULL; i++) + rec.put(cp, m.get(nid++)); + } + + return k; +} + + + diff --git a/ba/ba3100.cpp b/ba/ba3100.cpp index 916a1fc96..c0632a5d1 100755 --- a/ba/ba3100.cpp +++ b/ba/ba3100.cpp @@ -1,152 +1,152 @@ -#include -#include -#include -#include -#include -#include -#include "ba3.h" -#include "ba3100.h" -#include "batbreg.h" - -#define FPC "FPC" -#define REG_JOURNAL 5 - -class BA3100_application : public TRelation_application -{ - TMask* _msk; - TRelation* _rel; - TString _tabname; - long _oldditta; - int _oldanno; - bool _exist_journal; - - bool user_create() ; - bool user_destroy() ; - virtual bool protected_record(TRectype& rec); - virtual TMask* get_mask( int mode) { return _msk;} - virtual bool changing_mask( int mode) { return FALSE;} - virtual TRelation* get_relation() const { return _rel;} - virtual void init_query_mode(TMask& m); - virtual void init_insert_mode(TMask& m); - virtual void init_modify_mode(TMask& m); - -public: - BA3100_application(const char* tabname) : _tabname(tabname) , _oldditta(-1), _oldanno(-1), _exist_journal(FALSE) {} - virtual ~BA3100_application() {} - bool exist_journal() {return _exist_journal;} - void print(); -}; - -void BA3100_application::print() -{ -#if XVT_OS == XVT_OS_WIN - TExternal_app stampa(format("ba3a -1 %s", (const char *) _tabname)); -#else - TExternal_app stampa(format("ba3 -1 %s", (const char *) _tabname)); -#endif - stampa.run(); -} - -void BA3100_application::init_query_mode(TMask& m) - -{ - m.send_key(K_SHIFT + K_CTRL + 'e', -GR_MODIFY_PROTECTED); - m.send_key(K_SHIFT + K_CTRL + 'e', -GR_RECORD_PROTECTED); -} - -void BA3100_application::init_insert_mode(TMask& m) - -{ - if (_tabname != "REG") return; - - long ditta = get_firm(); - int anno = atoi(m.get(F_ANNO)); - - if (ditta != _oldditta || anno != _oldanno) - { - _oldditta = ditta; - _oldanno = anno; - - TTable reg(_tabname); - - reg.zero(); - reg.put("CODTAB", m.get(F_ANNO)); - - TRectype to(reg.curr()); - _exist_journal = FALSE; - - for (reg.read(_isgteq); !_exist_journal && reg.good() && reg.curr() <= to; reg.next()) - _exist_journal = (reg.get_long("I0") == REG_JOURNAL); - } -} - -void BA3100_application::init_modify_mode(TMask& m) - -{ - m.send_key(K_SHIFT + K_CTRL + 'd', -GR_MODIFY_PROTECTED); - const bool enable = !(_rel->curr().get_bool(FPC)); - - m.send_key(K_SHIFT + K_CTRL + 'd' + enable, -GR_RECORD_PROTECTED); -} - -bool BA3100_application::protected_record(TRectype& rec) -{ - bool prot = rec.get_bool(FPC); - if (!prot) - { - if (_tabname == "%IVD") // Impedisce la cancellazione di una classe se ha sottoclassi - { - const TRecnotype pos = _rel->lfile()->recno(); - const TString cod(rec.get("CODTAB")); - const int err = _rel->lfile()->next(); - if (err == NOERR) - { - TString next(_rel->lfile()->get("CODTAB")); next.cut(cod.len()); - prot = cod == next; - } - _rel->lfile()->readat(pos); - } - } - return prot; -} - - -HIDDEN bool tiporeg_handler(TMask_field& f, KEY k) - -{ - if ((k == K_TAB || k == K_ENTER) && - ((BA3100_application*) MainApp())->exist_journal() && - atoi(f.get()) == REG_JOURNAL) - return error_box("Non e' possibile avere due registri giornale nello stesso anno"); - return TRUE; -} -bool BA3100_application::user_create() -{ - _tabname.upper(); - TString m(16); m << "BATB" << _tabname; - _msk = new TMask(m) ; - for (int i = 0; i < _msk->fields(); i++) - if (_msk->fld(i).in_group(GR_SEARCH)) - { - set_search_field(_msk->fld(i).dlg()); - break; - } - _rel = new TRelation(_tabname); - set_title(_msk->get_caption()); - if (_tabname == "REG") _msk->set_handler(F_TIPO, tiporeg_handler); - return TRUE; -} - -bool BA3100_application::user_destroy() -{ - delete _msk; - delete _rel; - return TRUE; -} - -int ba3100(int argc, char* argv[]) -{ - BA3100_application a(argv[2]) ; - a.run(argc, argv, "Tabella"); - return 0; -} +#include +#include +#include +#include +#include + +#include "ba3.h" +#include "ba3100.h" +#include "batbreg.h" + +#define FPC "FPC" +#define REG_JOURNAL 5 + +class BA3100_application : public TRelation_application +{ + TMask* _msk; + TRelation* _rel; + TString _tabname; + long _oldditta; + int _oldanno; + bool _exist_journal; + + bool user_create() ; + bool user_destroy() ; + virtual bool protected_record(const TRectype& rec); + virtual TMask* get_mask( int mode) { return _msk;} + virtual bool changing_mask( int mode) { return FALSE;} + virtual TRelation* get_relation() const { return _rel;} + virtual void init_query_mode(TMask& m); + virtual void init_insert_mode(TMask& m); + virtual void init_modify_mode(TMask& m); + +public: + BA3100_application(const char* tabname) : _tabname(tabname) , _oldditta(-1), _oldanno(-1), _exist_journal(FALSE) {} + virtual ~BA3100_application() {} + bool exist_journal() {return _exist_journal;} + void print(); +}; + +void BA3100_application::print() +{ +#if XVT_OS == XVT_OS_WIN + TExternal_app stampa(format("ba3a -1 %s", (const char *) _tabname)); +#else + TExternal_app stampa(format("ba3 -1 %s", (const char *) _tabname)); +#endif + stampa.run(); +} + +void BA3100_application::init_query_mode(TMask& m) + +{ + m.send_key(K_SHIFT + K_CTRL + 'e', -GR_MODIFY_PROTECTED); + m.send_key(K_SHIFT + K_CTRL + 'e', -GR_RECORD_PROTECTED); +} + +void BA3100_application::init_insert_mode(TMask& m) + +{ + if (_tabname != "REG") return; + + long ditta = get_firm(); + int anno = atoi(m.get(F_ANNO)); + + if (ditta != _oldditta || anno != _oldanno) + { + _oldditta = ditta; + _oldanno = anno; + + TTable reg(_tabname); + + reg.zero(); + reg.put("CODTAB", m.get(F_ANNO)); + + TRectype to(reg.curr()); + _exist_journal = FALSE; + + for (reg.read(_isgteq); !_exist_journal && reg.good() && reg.curr() <= to; reg.next()) + _exist_journal = (reg.get_long("I0") == REG_JOURNAL); + } +} + +void BA3100_application::init_modify_mode(TMask& m) + +{ + m.send_key(K_SHIFT + K_CTRL + 'd', -GR_MODIFY_PROTECTED); + const bool enable = !(_rel->curr().get_bool(FPC)); + + m.send_key(K_SHIFT + K_CTRL + 'd' + enable, -GR_RECORD_PROTECTED); +} + +bool BA3100_application::protected_record(const TRectype& rec) +{ + bool prot = rec.get_bool(FPC); + if (!prot) + { + if (_tabname == "%IVD") // Impedisce la cancellazione di una classe se ha sottoclassi + { + const TRecnotype pos = _rel->lfile().recno(); + const TString cod(rec.get("CODTAB")); + const int err = _rel->lfile().next(); + if (err == NOERR) + { + TString next(_rel->lfile().get("CODTAB")); next.cut(cod.len()); + prot = cod == next; + } + _rel->lfile().readat(pos); + } + } + return prot; +} + + +HIDDEN bool tiporeg_handler(TMask_field& f, KEY k) + +{ + if ((k == K_TAB || k == K_ENTER) && + ((BA3100_application*) MainApp())->exist_journal() && + atoi(f.get()) == REG_JOURNAL) + return error_box("Non e' possibile avere due registri giornale nello stesso anno"); + return TRUE; +} +bool BA3100_application::user_create() +{ + _tabname.upper(); + TString m(16); m << "BATB" << _tabname; + _msk = new TMask(m) ; + for (int i = 0; i < _msk->fields(); i++) + if (_msk->fld(i).in_group(GR_SEARCH)) + { + set_search_field(_msk->fld(i).dlg()); + break; + } + _rel = new TRelation(_tabname); + set_title(_msk->get_caption()); + if (_tabname == "REG") _msk->set_handler(F_TIPO, tiporeg_handler); + return TRUE; +} + +bool BA3100_application::user_destroy() +{ + delete _msk; + delete _rel; + return TRUE; +} + +int ba3100(int argc, char* argv[]) +{ + BA3100_application a(argv[2]) ; + a.run(argc, argv, "Tabella"); + return 0; +} diff --git a/ba/ba3200.cpp b/ba/ba3200.cpp index e744332cc..eb2597cc2 100755 --- a/ba/ba3200.cpp +++ b/ba/ba3200.cpp @@ -1,337 +1,334 @@ -// ba3200 Stampa tabelle -// -// legge un file con estensione .rpt che descrive la stampa. -// Vedi file leggimi.txt per il formato del file -// - -#include -#include -#include -#include -#include - -#include "ba3.h" -#include "ba3200.h" - -#define FOOTER_LEN 4 // se non ridefinito nel .rpt - -class BA3200_application : public TPrintapp -{ - TString _tabname; - TFilename _rptname; - TRelation* _rel; - TCursor *_cur; - TMask* _msk; - TString _maskname; - int _logicnum; - TArray _string_roman; - TArray _field_roman; - -public: - - virtual void user_create() ; - virtual void user_destroy() ; - virtual bool set_print(int) ; - - virtual void set_page(int, int); - virtual bool preprocess_page (int, int); - - void leggi_rpt(); - void set_headers(); - void set_rows(); - void set_footers(); - void set_translations(); - void set_relations(); - BA3200_application(const char * tabname) : _tabname(tabname) {} - virtual ~BA3200_application() {} -}; - - -bool BA3200_application::set_print(int) -{ - TRectype from(_rel->lfile()->curr()); from.zero(); - TRectype to (from); - - if (_msk->run() == K_ENTER) - { - const int campi_maschera = _msk->fields(); - for (int i = 0; i < campi_maschera; i++) - { - const TMask_field& campo_maschera = _msk->fld(i); - const char* val = campo_maschera.get(); - if (*val) - { - const TFieldref* campo_ref = campo_maschera.field(); - - if (campo_ref != NULL && campo_ref->ok()) - { - if (campo_maschera.in_group(1)) campo_ref->write(val, from); - else - if (campo_maschera.in_group(2)) campo_ref->write(val, to); - } - } - } - - _cur->setregion (from, to); - return TRUE; - } - return FALSE; -} - -void BA3200_application::set_page (int , int ) -{ - _string_roman.destroy(); - _field_roman.destroy(); - leggi_rpt(); -} - -bool BA3200_application::preprocess_page(int , int) -{ - const int items = _field_roman.items(); - - if (items > 0) - { - for (int i = 0; i < items; i++) - { - TString& fn = (TString &) _field_roman[i]; - TFieldref fld(fn, 0); - TString& s = (TString &) _string_roman[i]; - - const int n = atoi(fld.read(_rel)); - s = itor(n); - } - } - return TRUE; -} - -void BA3200_application::set_headers() -{ - TString NomeTabella, sep, formato_intesta, testo_intesta; - int LungRiga, riga_intesta=0, last_riga=1; - TToken_string line; - - reset_header (); - - TScanner rpt(_rptname); - rpt.paragraph("Headers"); - - // Leggo la lunghezza della riga (usata per centrare l'intestazione) - line = rpt.line(); - LungRiga = line.get_int(); - - // Leggo il nome della tabella - line = rpt.line(); - NomeTabella = line.get(); - - // Centro il nome della tabella e aggiungo il numero di pagina - NomeTabella.center_just (LungRiga); - NomeTabella.overwrite ("Pag. @#", NomeTabella.len()-8); - set_header (last_riga, "%s", (const char *)NomeTabella); - last_riga++; - - // Aggiungo una riga vuota per separare prima intestazione - sep.fill ('-', LungRiga); - set_header (last_riga, "%s", (const char *)sep); - - line = rpt.line(); - while ( (line != "") && (line[0] != '[') ) - { - riga_intesta = atoi (line.get()); - formato_intesta = line.get(); - testo_intesta = (const char *) line.get(); - if (riga_intesta) - set_header (last_riga+riga_intesta, (const char *)formato_intesta, - (const char *)testo_intesta); - line = rpt.line(); - } - - if (riga_intesta) last_riga += riga_intesta; - last_riga++; - set_header (last_riga, (const char *)sep); - last_riga++; - sep.fill(' '); - set_header (last_riga, (const char *)sep); -} - -void BA3200_application::set_rows() -{ - TToken_string line; - TFieldref campo; - int from, to, riga_record; - TString formato_campo, picture; - const char * name; - - TScanner rpt(_rptname); - rpt.paragraph("Rows"); - - line = rpt.line(); - while ( (line != "") && (line[0] != '[') ) - { - riga_record = line.get_int(); - - TString s(line.get()); - - campo = s; - from = campo.from(); - to = campo.to(); - name = campo.name(); - int logicnum = campo.file() == 0 ? _logicnum : campo.file(); - - formato_campo = line.get(); - formato_campo.trim(); - formato_campo.lower(); - const int p = formato_campo.find("@m"); - - if (p != -1) - { - formato_campo.cut(p); - formato_campo << "#t"; - _string_roman.add(new TString); - _field_roman.add(s); - const int last = _string_roman.items() - 1; - - set_row (riga_record, formato_campo, _string_roman.objptr(last)); - } - else - { - if (formato_campo.find("@pn")) - picture = line.get(); - else - picture = ""; - - if (to == -1) - if (picture != "") - set_row (riga_record, formato_campo, FLD(logicnum,name,picture) ); - else - set_row (riga_record, formato_campo, FLD(logicnum,name) ); - else - set_row (riga_record, formato_campo, FLD(logicnum,name,from,to) ); - } - - line = (const char *) rpt.line(); - } -} - -void BA3200_application::set_footers() -{ - TToken_string line; - int footer_len, riga; - TString formato, testo; - - reset_footer(); - - TScanner rpt(_rptname); - rpt.paragraph("Footers"); - - line = rpt.line(); - footer_len = line.get_int(); - if (footer_len) printer().footerlen (footer_len); - - line = rpt.line(); - while ( (line != "") && (line[0] != '[') ) - { - riga = line.get_int(); - formato = line.get(); - testo = line.get(); - set_footer (riga, (const char *)formato, (const char*)testo); - line = rpt.line(); - } -} - -void BA3200_application::set_translations() -{ - TString campo, from, to; - TToken_string line; - int logicnum; - - TScanner rpt(_rptname); - rpt.paragraph("Translations"); - - line = rpt.line(); - while ( (line != "") && (line[0] != '[') ) - { - logicnum = line.get_int(); - campo = line.get(); - from = line.get(); - to = line.get(); - set_translation (logicnum, (char*)(const char *)campo, (char*)(const char *)from, (char*)(const char *)to); - line = rpt.line(); - } -} - -void BA3200_application::set_relations() -{ - TToken_string line("", ','); - TString tab(16), expr(40); - int key, linkto, alias, logicnum; - - TScanner rpt(_rptname); - rpt.paragraph("Relations"); - - line = rpt.line(); - while ( (line != "") && (line[0] != '[') ) - { - tab = line.get(); - logicnum = atoi(tab); - expr = line.get(); - key = line.get_int(); - if (key == 0) key = 1; - linkto = line.get_int(); - alias = line.get_int(); - if (logicnum > 0) - _rel->add(logicnum, expr, key, linkto, alias); - else - _rel->add(tab, expr, key, linkto, alias); - - line = rpt.line(); - } -} -void BA3200_application::leggi_rpt() -{ - set_rows(); -} - -void BA3200_application::user_create() -{ - _rptname << "batb" << _tabname << ".rpt" ; - if (!fexist(_rptname)) - fatal_box("Impossibile aprire il file '%s'", (const char*)_rptname); - - - // _tab = new TTable (_tabname); - _rel = new TRelation (_tabname); - _cur = new TCursor (_rel); - - _maskname << "bast" << _tabname; - _msk = new TMask (_maskname) ; - - add_cursor (_cur); - add_file (_tabname); - - _logicnum = _cur->file()->num(); - - reset_print (); - - printer().footerlen (FOOTER_LEN); - for (int i=1; i <= FOOTER_LEN; i++) set_footer(i, "%s", " "); - - set_headers(); - set_footers(); - set_translations(); - set_relations(); -} - -void BA3200_application::user_destroy() -{ - delete _msk; - delete _cur; - delete _rel; - // delete _tab; -} - -int ba3200(int argc, char* argv[]) -{ - BA3200_application a(argv[2]) ; - a.run(argc, argv, "Stampa tabella"); - return 0; -} +// ba3200 Stampa tabelle +// +// legge un file con estensione .rpt che descrive la stampa. +// Vedi file leggimi.txt per il formato del file +// + +#include +#include +#include +#include +#include + +#include "ba3.h" +#include "ba3200.h" + +#define FOOTER_LEN 4 // se non ridefinito nel .rpt + +class BA3200_application : public TPrintapp +{ + TString _tabname; + TFilename _rptname; + TRelation* _rel; + TCursor *_cur; + TMask* _msk; + TString _maskname; + int _logicnum; + TArray _string_roman; + TArray _field_roman; + +public: + + virtual void user_create() ; + virtual void user_destroy() ; + virtual bool set_print(int) ; + + virtual void set_page(int, int); + virtual bool preprocess_page (int, int); + + void leggi_rpt(); + void set_headers(); + void set_rows(); + void set_footers(); + void set_translations(); + void set_relations(); + BA3200_application(const char * tabname) : _tabname(tabname) {} + virtual ~BA3200_application() {} +}; + + +bool BA3200_application::set_print(int) +{ + TRectype from(_rel->lfile().curr()); from.zero(); + TRectype to (from); + + if (_msk->run() == K_ENTER) + { + const int campi_maschera = _msk->fields(); + for (int i = 0; i < campi_maschera; i++) + { + const TMask_field& campo_maschera = _msk->fld(i); + const char* val = campo_maschera.get(); + if (*val) + { + const TFieldref* campo_ref = campo_maschera.field(); + + if (campo_ref != NULL && campo_ref->ok()) + { + if (campo_maschera.in_group(1)) campo_ref->write(val, from); + else + if (campo_maschera.in_group(2)) campo_ref->write(val, to); + } + } + } + + _cur->setregion (from, to); + return TRUE; + } + return FALSE; +} + +void BA3200_application::set_page (int , int ) +{ + _string_roman.destroy(); + _field_roman.destroy(); + leggi_rpt(); +} + +bool BA3200_application::preprocess_page(int , int) +{ + const int items = _field_roman.items(); + + if (items > 0) + { + for (int i = 0; i < items; i++) + { + TString& fn = (TString &) _field_roman[i]; + TFieldref fld(fn, 0); + TString& s = (TString &) _string_roman[i]; + + const int n = atoi(fld.read(_rel)); + s = itor(n); + } + } + return TRUE; +} + +void BA3200_application::set_headers() +{ + TString NomeTabella, sep, formato_intesta, testo_intesta; + int LungRiga, riga_intesta=0, last_riga=1; + TToken_string line; + + reset_header (); + + TScanner rpt(_rptname); + rpt.paragraph("Headers"); + + // Leggo la lunghezza della riga (usata per centrare l'intestazione) + line = rpt.line(); + LungRiga = line.get_int(); + + // Leggo il nome della tabella + line = rpt.line(); + NomeTabella = line.get(); + + // Centro il nome della tabella e aggiungo il numero di pagina + NomeTabella.center_just (LungRiga); + NomeTabella.overwrite ("Pag. @#", NomeTabella.len()-8); + set_header (last_riga, "%s", (const char *)NomeTabella); + last_riga++; + + // Aggiungo una riga vuota per separare prima intestazione + sep.fill ('-', LungRiga); + set_header (last_riga, "%s", (const char *)sep); + + line = rpt.line(); + while ( (line != "") && (line[0] != '[') ) + { + riga_intesta = atoi (line.get()); + formato_intesta = line.get(); + testo_intesta = (const char *) line.get(); + if (riga_intesta) + set_header (last_riga+riga_intesta, (const char *)formato_intesta, + (const char *)testo_intesta); + line = rpt.line(); + } + + if (riga_intesta) last_riga += riga_intesta; + last_riga++; + set_header (last_riga, (const char *)sep); + last_riga++; + sep.fill(' '); + set_header (last_riga, (const char *)sep); +} + +void BA3200_application::set_rows() +{ + TToken_string line; + TFieldref campo; + int from, to, riga_record; + TString formato_campo, picture; + const char * name; + + TScanner rpt(_rptname); + rpt.paragraph("Rows"); + + line = rpt.line(); + while ( (line != "") && (line[0] != '[') ) + { + riga_record = line.get_int(); + + TString s(line.get()); + + campo = s; + from = campo.from(); + to = campo.to(); + name = campo.name(); + int logicnum = campo.file() == 0 ? _logicnum : campo.file(); + + formato_campo = line.get(); + formato_campo.trim(); + formato_campo.lower(); + const int p = formato_campo.find("@m"); + + if (p != -1) + { + formato_campo.cut(p); + formato_campo << "#t"; + _string_roman.add(new TString); + _field_roman.add(s); + const int last = _string_roman.items() - 1; + + set_row (riga_record, formato_campo, _string_roman.objptr(last)); + } + else + { + if (formato_campo.find("@pn")) + picture = line.get(); + else + picture = ""; + + if (to == -1) + if (picture != "") + set_row (riga_record, formato_campo, FLD(logicnum,name,picture) ); + else + set_row (riga_record, formato_campo, FLD(logicnum,name) ); + else + set_row (riga_record, formato_campo, FLD(logicnum,name,from,to) ); + } + + line = (const char *) rpt.line(); + } +} + +void BA3200_application::set_footers() +{ + TToken_string line; + int footer_len, riga; + TString formato, testo; + + reset_footer(); + + TScanner rpt(_rptname); + rpt.paragraph("Footers"); + + line = rpt.line(); + footer_len = line.get_int(); + if (footer_len) printer().footerlen (footer_len); + + line = rpt.line(); + while ( (line != "") && (line[0] != '[') ) + { + riga = line.get_int(); + formato = line.get(); + testo = line.get(); + set_footer (riga, (const char *)formato, (const char*)testo); + line = rpt.line(); + } +} + +void BA3200_application::set_translations() +{ + TString campo, from, to; + TToken_string line; + int logicnum; + + TScanner rpt(_rptname); + rpt.paragraph("Translations"); + + line = rpt.line(); + while ( (line != "") && (line[0] != '[') ) + { + logicnum = line.get_int(); + campo = line.get(); + from = line.get(); + to = line.get(); + set_translation (logicnum, (char*)(const char *)campo, (char*)(const char *)from, (char*)(const char *)to); + line = rpt.line(); + } +} + +void BA3200_application::set_relations() +{ + TToken_string line("", ','); + TString tab(16), expr(40); + int key, linkto, alias, logicnum; + + TScanner rpt(_rptname); + rpt.paragraph("Relations"); + + line = rpt.line(); + while ( (line != "") && (line[0] != '[') ) + { + tab = line.get(); + logicnum = atoi(tab); + expr = line.get(); + key = line.get_int(); + if (key == 0) key = 1; + linkto = line.get_int(); + alias = line.get_int(); + if (logicnum > 0) + _rel->add(logicnum, expr, key, linkto, alias); + else + _rel->add(tab, expr, key, linkto, alias); + + line = rpt.line(); + } +} +void BA3200_application::leggi_rpt() +{ + set_rows(); +} + +void BA3200_application::user_create() +{ + _rptname << "batb" << _tabname << ".rpt" ; + if (!fexist(_rptname)) + fatal_box("Impossibile aprire il file '%s'", (const char*)_rptname); + + _rel = new TRelation (_tabname); + _cur = new TCursor (_rel); + + _maskname << "bast" << _tabname; + _msk = new TMask (_maskname) ; + + add_cursor (_cur); + add_file (_tabname); + + _logicnum = _cur->file().num(); + + reset_print (); + + printer().footerlen (FOOTER_LEN); + for (int i=1; i <= FOOTER_LEN; i++) set_footer(i, "%s", " "); + + set_headers(); + set_footers(); + set_translations(); + set_relations(); +} + +void BA3200_application::user_destroy() +{ + delete _msk; + delete _cur; + delete _rel; +} + +int ba3200(int argc, char* argv[]) +{ + BA3200_application a(argv[2]) ; + a.run(argc, argv, "Stampa tabella"); + return 0; +} diff --git a/ba/ba3300.cpp b/ba/ba3300.cpp index e660c7ff3..02cb08d3c 100755 --- a/ba/ba3300.cpp +++ b/ba/ba3300.cpp @@ -1,289 +1,289 @@ -#include -#include -#include -#include -#include - -#include "ba3.h" -#include "ba3300.h" - -class BA3300_application : public TPrintapp -{ - friend bool codice_handler(TMask_field& field, KEY key); - - TMask* _msk; - TTable* _tab; // Tabella dei registri - TString _cod_reg, _comulc, _ragsoc, _indulc, _civulc, _capulc, _com, _prov, _cofi, _paiv, _tipoa; - long _codice_ditta, _agg, _codanagr; - long _num_pag, _pag_ini, _pag_fin; - int _cod_anno; - bool _inizia_dopo; - TLocalisamfile* _nditte; - TLocalisamfile* _anag; - TLocalisamfile* _unloc; - TLocalisamfile* _comuni; - -public: - - bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; } - virtual void user_destroy(); - virtual void user_create() ; - bool set_print(int); - - const char* decodifica_reg (); - - virtual void set_page (int, int); - virtual print_action postprocess_page (int, int); - - BA3300_application(); -}; - -print_action BA3300_application::postprocess_page(int, int counter) -{ - if (counter == _num_pag - 1) - { - TString16 dep; dep.format("%04d%-3s", _cod_anno, (const char*)_cod_reg); - _tab->curr().put("CODTAB", (const char*)dep); - _tab->read(); - if (_tab->bad()) _tab->curr().zero(); - _agg = _tab->curr().get_long("I2"); - _agg = _agg + _num_pag; - _tab->curr().put("I2", _agg); - _tab->rewrite(); - return NEXT_PAGE; - } - - return REPEAT_PAGE; -} - -void BA3300_application::set_page(int , int counter) -{ - reset_print(); - - const TString80 descr(decodifica_reg()); - long contatore = _pag_ini + counter; - - if (counter == 0) - { - if (!_inizia_dopo) - { - reset_row(8); - set_row(8, "@65gPag.@70g%ld", contatore); - } - - reset_row(1); - reset_row(2); - reset_row(3); - reset_row(4); - reset_row(5); - reset_row(6); - reset_row(7); - - set_row (1, "@50g%-50s", (const char*) descr); - set_row (2, "@50g%-50s", (const char*)_ragsoc); - set_row (3, "@50g%-35s", (const char*)_indulc); - set_row (3, "@90g%-10s", (const char*)_civulc); - set_row (4, "@50g%5s", (const char*)_capulc); - set_row (4, "@60g%-50s", (const char*)_com); - set_row (4, "@115g%5s", (const char*)_prov); - set_row (5, "@50g%16s", (const char*)_cofi); - set_row (6, "@50g%11s", (const char*)_paiv); - - } - else if (counter==_num_pag-1) - { - reset_row(1); - reset_row(2); - reset_row(3); - reset_row(4); - reset_row(5); - reset_row(6); - reset_row(7); - reset_row(8); - set_row (1, "@1gSocieta'@10g%-50s", (const char*) _ragsoc); - set_row (1, "@62g%-29s", (const char*) _indulc); - set_row (1, "@93g%-9s", (const char*) _civulc); - set_row (1, "@103g%-5s", (const char*) _capulc); - set_row (1, "@110g%-18s", (const char*) _com); - set_row (1, "@130g%-3s", (const char*) _prov); - set_row (2, "@1g%-50s", (const char*) descr); - set_row (2, "@52g%16s", (const char*) _cofi); - set_row (2, "@70g%11s", (const char*) _paiv); - set_row (4, "@50gN. ........ DI REPERTORIO"); - set_row (5, "@50gIL PRESENTE LIBRO DELLA@75g%50s", (const char*) _ragsoc); - set_row (6, "@50g%-35s", (const char*) _indulc); - set_row (6, "@88g%10s", (const char*) _civulc); - set_row (7, "@50g%5s", (const char*) _capulc); - set_row (7, "@58g%50s", (const char*) _com); - set_row (7, "@111g%5s", (const char*) _prov); - set_row (8, "@120gPag.@125g%ld", contatore); - } - else - { - reset_row(1); - reset_row(2); - reset_row(3); - reset_row(4); - reset_row(5); - reset_row(6); - reset_row(7); - reset_row(8); - set_row (1, "@1gSocieta'@10g%-50s", (const char*) _ragsoc); - set_row (1, "@62g%-29s", (const char*) _indulc); - // set_row (1, "@93g%-9s", (const char*) _civulc); - // set_row (1, "@103g%-5s", (const char*) _capulc); - set_row (1, "@110g%-18s", (const char*) _com); - set_row (1, "@130g%-3s", (const char*) _prov); - set_row (2, "@1g%-50s", (const char*) descr); - set_row (2, "@52g%16s", (const char*) _cofi); - set_row (2, "@70g%11s", (const char*) _paiv); - set_row (3, "@85gPag.@90g%ld", contatore); - } -} - -BA3300_application::BA3300_application() -{ -} - -bool BA3300_application::set_print(int) -{ - KEY tasto; - TString16 app; - - _nditte->setkey(1); - _codice_ditta = get_firm(); - _nditte->curr().zero(); - _nditte->curr().put(N_CODDITTA,_codice_ditta); - _nditte->read(); - app=_nditte->curr().get(N_CODDITTA); - _msk->set(F_CODDITTA,app); - _ragsoc=_nditte->curr().get(N_RAGSOC); - _tipoa =_nditte->curr().get(N_TIPOA); - _codanagr =atol(_nditte->curr().get(N_CODANAGR)); - _msk->set(F_RAGSOC,_ragsoc); - - _unloc->setkey(1); - _unloc->curr().zero(); - _unloc->curr().put(N_CODDITTA,app); - _unloc->curr().put(N_CODULC,"1"); - _unloc->read(); - _indulc=_unloc->curr().get(N_INDULC); - _msk->set(F_INDIRIZZO,_indulc); - _civulc=_unloc->curr().get(N_CIVULC); - _msk->set(F_CIV,_civulc); - _capulc=_unloc->curr().get(N_CAPULC); - _msk->set(F_CAP,_capulc); - _comulc=_unloc->curr().get(N_COMULC); - _msk->set(F_CODCOM,_comulc); - - _comuni->setkey(1); - _comuni->curr().zero(); - _comuni->curr().put(N_CODCOM,_comulc); - _comuni->read(); - _com=_comuni->curr().get(N_COM); - _msk->set(F_COM,_com); - _prov=_comuni->curr().get(N_PROV); - _msk->set(F_PROV,_prov); - - _anag->setkey(1); - _anag->curr().zero(); - _anag->curr().put(N_TIPOA,_tipoa); - _anag->curr().put(N_CODANAGR,_codanagr); - _anag->read(); - _cofi=_anag->curr().get(N_COFI); - _msk->set(F_COFI,_cofi); - _paiv=_anag->curr().get(N_PAIV); - _msk->set(F_PAIV,_paiv); - - _msk->set(F_LUNG,66); - - tasto = _msk->run(); - - if (tasto == K_ENTER) - { - _cod_reg = _msk->get(F_CODICE); - _cod_anno = _msk->get_int(F_ANNO); - _pag_ini = _msk->get_long(F_NPAGINI); - _pag_fin = _msk->get_long(F_NPAGFI); - _inizia_dopo = _msk->get_bool(F_PRIMO); - _num_pag = (_pag_fin - _pag_ini) + 1; - enable_print_menu(); - return TRUE; - } - - return FALSE; -} - -static bool codice_handler (TMask_field& field, KEY key) -{ - if (key == K_TAB) - { - const TEdit_field& e = (const TEdit_field&)field; - const TLocalisamfile* t = e.browse()->cursor()->file(); - const long num = t->get_long("I2"); - field.mask().set(F_NPAGINI, num+1); - field.mask().set(F_NPAGFI, 0L); - } - return TRUE; -} - -const char* BA3300_application::decodifica_reg () -{ - TString16 dep; dep.format("%04d%-3s", _cod_anno, (const char*)_cod_reg); - - _tab->curr().put("CODTAB", (const char*)dep); - _tab->read(); - if (_tab->bad()) _tab->curr().zero(); - return _tab->curr().get ("S0"); -} - -void BA3300_application::user_create() -{ - enable_print_menu(); - - _nditte = new TLocalisamfile (LF_NDITTE); - _unloc = new TLocalisamfile (LF_UNLOC); - _comuni = new TLocalisamfile (LF_COMUNI); - _anag = new TLocalisamfile (LF_ANAG); - _tab = new TTable(TAB_REG); - - _msk = new TMask ("ba3300a") ; - _msk->set_handler(F_CODICE, codice_handler); - - add_cursor (NULL); - set_auto_ff (TRUE); -} - -void BA3300_application::user_destroy() // releasev e arrmask -{ - delete _msk; - delete _nditte; - delete _unloc; - delete _comuni; - delete _anag; - delete _tab; -} - -int ba3300(int argc, char* argv[]) -{ - BA3300_application a; - a.run(argc, argv, "Stampa fogli libro bollato"); - return 0; -} - - - - - - - - - - - - - - - - - +#include +#include +#include +#include +#include + +#include "ba3.h" +#include "ba3300.h" + +class BA3300_application : public TPrintapp +{ + friend bool codice_handler(TMask_field& field, KEY key); + + TMask* _msk; + TTable* _tab; // Tabella dei registri + TString _cod_reg, _comulc, _ragsoc, _indulc, _civulc, _capulc, _com, _prov, _cofi, _paiv, _tipoa; + long _codice_ditta, _agg, _codanagr; + long _num_pag, _pag_ini, _pag_fin; + int _cod_anno; + bool _inizia_dopo; + TLocalisamfile* _nditte; + TLocalisamfile* _anag; + TLocalisamfile* _unloc; + TLocalisamfile* _comuni; + +public: + + bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; } + virtual void user_destroy(); + virtual void user_create() ; + bool set_print(int); + + const char* decodifica_reg (); + + virtual void set_page (int, int); + virtual print_action postprocess_page (int, int); + + BA3300_application(); +}; + +print_action BA3300_application::postprocess_page(int, int counter) +{ + if (counter == _num_pag - 1) + { + TString16 dep; dep.format("%04d%-3s", _cod_anno, (const char*)_cod_reg); + _tab->curr().put("CODTAB", (const char*)dep); + _tab->read(); + if (_tab->bad()) _tab->curr().zero(); + _agg = _tab->curr().get_long("I2"); + _agg = _agg + _num_pag; + _tab->curr().put("I2", _agg); + _tab->rewrite(); + return NEXT_PAGE; + } + + return REPEAT_PAGE; +} + +void BA3300_application::set_page(int , int counter) +{ + reset_print(); + + const TString80 descr(decodifica_reg()); + long contatore = _pag_ini + counter; + + if (counter == 0) + { + if (!_inizia_dopo) + { + reset_row(8); + set_row(8, "@65gPag.@70g%ld", contatore); + } + + reset_row(1); + reset_row(2); + reset_row(3); + reset_row(4); + reset_row(5); + reset_row(6); + reset_row(7); + + set_row (1, "@50g%-50s", (const char*) descr); + set_row (2, "@50g%-50s", (const char*)_ragsoc); + set_row (3, "@50g%-35s", (const char*)_indulc); + set_row (3, "@90g%-10s", (const char*)_civulc); + set_row (4, "@50g%5s", (const char*)_capulc); + set_row (4, "@60g%-50s", (const char*)_com); + set_row (4, "@115g%5s", (const char*)_prov); + set_row (5, "@50g%16s", (const char*)_cofi); + set_row (6, "@50g%11s", (const char*)_paiv); + + } + else if (counter==_num_pag-1) + { + reset_row(1); + reset_row(2); + reset_row(3); + reset_row(4); + reset_row(5); + reset_row(6); + reset_row(7); + reset_row(8); + set_row (1, "@1gSocieta'@10g%-50s", (const char*) _ragsoc); + set_row (1, "@62g%-29s", (const char*) _indulc); + set_row (1, "@93g%-9s", (const char*) _civulc); + set_row (1, "@103g%-5s", (const char*) _capulc); + set_row (1, "@110g%-18s", (const char*) _com); + set_row (1, "@130g%-3s", (const char*) _prov); + set_row (2, "@1g%-50s", (const char*) descr); + set_row (2, "@52g%16s", (const char*) _cofi); + set_row (2, "@70g%11s", (const char*) _paiv); + set_row (4, "@50gN. ........ DI REPERTORIO"); + set_row (5, "@50gIL PRESENTE LIBRO DELLA@75g%50s", (const char*) _ragsoc); + set_row (6, "@50g%-35s", (const char*) _indulc); + set_row (6, "@88g%10s", (const char*) _civulc); + set_row (7, "@50g%5s", (const char*) _capulc); + set_row (7, "@58g%50s", (const char*) _com); + set_row (7, "@111g%5s", (const char*) _prov); + set_row (8, "@120gPag.@125g%ld", contatore); + } + else + { + reset_row(1); + reset_row(2); + reset_row(3); + reset_row(4); + reset_row(5); + reset_row(6); + reset_row(7); + reset_row(8); + set_row (1, "@1gSocieta'@10g%-50s", (const char*) _ragsoc); + set_row (1, "@62g%-29s", (const char*) _indulc); + // set_row (1, "@93g%-9s", (const char*) _civulc); + // set_row (1, "@103g%-5s", (const char*) _capulc); + set_row (1, "@110g%-18s", (const char*) _com); + set_row (1, "@130g%-3s", (const char*) _prov); + set_row (2, "@1g%-50s", (const char*) descr); + set_row (2, "@52g%16s", (const char*) _cofi); + set_row (2, "@70g%11s", (const char*) _paiv); + set_row (3, "@85gPag.@90g%ld", contatore); + } +} + +BA3300_application::BA3300_application() +{ +} + +bool BA3300_application::set_print(int) +{ + KEY tasto; + TString16 app; + + _nditte->setkey(1); + _codice_ditta = get_firm(); + _nditte->curr().zero(); + _nditte->curr().put(N_CODDITTA,_codice_ditta); + _nditte->read(); + app=_nditte->curr().get(N_CODDITTA); + _msk->set(F_CODDITTA,app); + _ragsoc=_nditte->curr().get(N_RAGSOC); + _tipoa =_nditte->curr().get(N_TIPOA); + _codanagr =atol(_nditte->curr().get(N_CODANAGR)); + _msk->set(F_RAGSOC,_ragsoc); + + _unloc->setkey(1); + _unloc->curr().zero(); + _unloc->curr().put(N_CODDITTA,app); + _unloc->curr().put(N_CODULC,"1"); + _unloc->read(); + _indulc=_unloc->curr().get(N_INDULC); + _msk->set(F_INDIRIZZO,_indulc); + _civulc=_unloc->curr().get(N_CIVULC); + _msk->set(F_CIV,_civulc); + _capulc=_unloc->curr().get(N_CAPULC); + _msk->set(F_CAP,_capulc); + _comulc=_unloc->curr().get(N_COMULC); + _msk->set(F_CODCOM,_comulc); + + _comuni->setkey(1); + _comuni->curr().zero(); + _comuni->curr().put(N_CODCOM,_comulc); + _comuni->read(); + _com=_comuni->curr().get(N_COM); + _msk->set(F_COM,_com); + _prov=_comuni->curr().get(N_PROV); + _msk->set(F_PROV,_prov); + + _anag->setkey(1); + _anag->curr().zero(); + _anag->curr().put(N_TIPOA,_tipoa); + _anag->curr().put(N_CODANAGR,_codanagr); + _anag->read(); + _cofi=_anag->curr().get(N_COFI); + _msk->set(F_COFI,_cofi); + _paiv=_anag->curr().get(N_PAIV); + _msk->set(F_PAIV,_paiv); + + _msk->set(F_LUNG,66); + + tasto = _msk->run(); + + if (tasto == K_ENTER) + { + _cod_reg = _msk->get(F_CODICE); + _cod_anno = _msk->get_int(F_ANNO); + _pag_ini = _msk->get_long(F_NPAGINI); + _pag_fin = _msk->get_long(F_NPAGFI); + _inizia_dopo = _msk->get_bool(F_PRIMO); + _num_pag = (_pag_fin - _pag_ini) + 1; + enable_print_menu(); + return TRUE; + } + + return FALSE; +} + +static bool codice_handler (TMask_field& field, KEY key) +{ + if (key == K_TAB) + { + const TEdit_field& e = (const TEdit_field&)field; + const TLocalisamfile& t = e.browse()->cursor()->file(); + const long num = t.get_long("I2"); + field.mask().set(F_NPAGINI, num+1); + field.mask().set(F_NPAGFI, 0L); + } + return TRUE; +} + +const char* BA3300_application::decodifica_reg () +{ + TString16 dep; dep.format("%04d%-3s", _cod_anno, (const char*)_cod_reg); + + _tab->curr().put("CODTAB", (const char*)dep); + _tab->read(); + if (_tab->bad()) _tab->curr().zero(); + return _tab->curr().get ("S0"); +} + +void BA3300_application::user_create() +{ + enable_print_menu(); + + _nditte = new TLocalisamfile (LF_NDITTE); + _unloc = new TLocalisamfile (LF_UNLOC); + _comuni = new TLocalisamfile (LF_COMUNI); + _anag = new TLocalisamfile (LF_ANAG); + _tab = new TTable(TAB_REG); + + _msk = new TMask ("ba3300a") ; + _msk->set_handler(F_CODICE, codice_handler); + + add_cursor (NULL); + set_auto_ff (TRUE); +} + +void BA3300_application::user_destroy() // releasev e arrmask +{ + delete _msk; + delete _nditte; + delete _unloc; + delete _comuni; + delete _anag; + delete _tab; +} + +int ba3300(int argc, char* argv[]) +{ + BA3300_application a; + a.run(argc, argv, "Stampa fogli libro bollato"); + return 0; +} + + + + + + + + + + + + + + + + + diff --git a/ba/ba3500.cpp b/ba/ba3500.cpp index e3c0b9388..29e7e37cf 100755 --- a/ba/ba3500.cpp +++ b/ba/ba3500.cpp @@ -113,23 +113,24 @@ TMask* BA3500_application::get_mask(int mode) void BA3500_application::read_tabinl(TMask& m) { - long paginilib,pagfinlib,codditta,paginiut,pagfinut,annoreg; - int mesereg; + long paginilib,pagfinlib,codditta,paginiut,pagfinut; + int mesereg,annoreg; TString codvidim,codreg; bool stampa_bol = FALSE; bool pagine_ann = FALSE; bool ok = FALSE; // TTable* tab_inl = (TTable*)_rel->lfile(TAB_INL); - TTable* tab_inl = (TTable*)_rel->lfile(-ALIAS); - long numrig, anno; + TTable& tab_inl = (TTable&)_rel->lfile(-ALIAS); + long numrig; + int anno; TString codlib; - anno = atol(m.get(F_ANNO)); + anno = m.get_int(F_ANNO); codlib = m.get(F_CODLIB); _rel->update(); - _righe_gia_presenti = new TRighe_gia_presenti(tab_inl->items()); + _righe_gia_presenti = new TRighe_gia_presenti(tab_inl.items()); _righe_gia_presenti->reset(); // int lognum = name2log(TAB_INL); //trasformo il nome della tab in un logicnum @@ -138,19 +139,19 @@ void BA3500_application::read_tabinl(TMask& m) while (ok) { - TRecfield num (tab_inl->curr(),"CODTAB",7,12); + TRecfield num (tab_inl.curr(),"CODTAB",7,12); numrig = long(num); - annoreg = tab_inl->get_long("I0"); - mesereg = tab_inl->get_int ("I1"); - paginilib = tab_inl->get_long("I2"); - pagfinlib = tab_inl->get_long("I3"); - codditta = tab_inl->get_long("I4"); - codreg = tab_inl->get("S0"); - paginiut = tab_inl->get_long("I5"); - pagfinut = tab_inl->get_long("I6"); - codvidim = tab_inl->get("S1"); - stampa_bol = tab_inl->get_bool("B0"); - pagine_ann = tab_inl->get_bool("B1"); + annoreg = tab_inl.get_int("I0"); + mesereg = tab_inl.get_int ("I1"); + paginilib = tab_inl.get_long("I2"); + pagfinlib = tab_inl.get_long("I3"); + codditta = tab_inl.get_long("I4"); + codreg = tab_inl.get("S0"); + paginiut = tab_inl.get_long("I5"); + pagfinut = tab_inl.get_long("I6"); + codvidim = tab_inl.get("S1"); + stampa_bol = tab_inl.get_bool("B0"); + pagine_ann = tab_inl.get_bool("B1"); _righe_tabinl.add_riga(annoreg,mesereg,paginilib,pagfinlib,codditta,codreg,paginiut,pagfinut,codvidim,stampa_bol,pagine_ann); _righe_gia_presenti->set(numrig); @@ -224,7 +225,7 @@ int BA3500_application::rewrite(const TMask& m) { long items; // TTable *tab_inl = (TTable*)_rel->lfile(TAB_INL); - TTable *tab_inl = (TTable*)_rel->lfile(-ALIAS); + TTable& tab_inl = (TTable&)_rel->lfile(-ALIAS); int anno = m.get_int(F_ANNO); TString cod_lib = m.get(F_CODLIB); @@ -242,25 +243,25 @@ int BA3500_application::rewrite(const TMask& m) long year = atol(riga.get(0)); if (year != 0) { - tab_inl->put ("CODTAB", codtab); - tab_inl->put ("I0", year); - tab_inl->put ("I1", riga.get()); - tab_inl->put ("I2", riga.get()); - tab_inl->put ("I3", riga.get()); - tab_inl->put ("I4", riga.get()); - tab_inl->put ("S0", riga.get()); - tab_inl->put ("I5", riga.get()); - tab_inl->put ("I6", riga.get()); - tab_inl->put ("S1", riga.get()); - tab_inl->put ("B0", riga.get()); - tab_inl->put ("B1", riga.get()); + tab_inl.put ("CODTAB", codtab); + tab_inl.put ("I0", year); + tab_inl.put ("I1", riga.get()); + tab_inl.put ("I2", riga.get()); + tab_inl.put ("I3", riga.get()); + tab_inl.put ("I4", riga.get()); + tab_inl.put ("S0", riga.get()); + tab_inl.put ("I5", riga.get()); + tab_inl.put ("I6", riga.get()); + tab_inl.put ("S1", riga.get()); + tab_inl.put ("B0", riga.get()); + tab_inl.put ("B1", riga.get()); if (_righe_gia_presenti->IS_IN(i)) { - tab_inl->rewrite(); + tab_inl.rewrite(); _righe_gia_presenti->togli(i); } else - tab_inl->write(); + tab_inl.write(); } } return _rel->rewrite(); @@ -270,7 +271,7 @@ int BA3500_application::write(const TMask& m) { long items; // TTable *tab_inl = (TTable*)_rel->lfile(TAB_INL); - TTable *tab_inl = (TTable*)_rel->lfile(-ALIAS); + TTable& tab_inl = (TTable&)_rel->lfile(-ALIAS); int anno = m.get_int(F_ANNO); TString cod_lib = m.get(F_CODLIB); @@ -281,7 +282,7 @@ int BA3500_application::write(const TMask& m) items = cs.items(); - tab_inl->zero(); + tab_inl.zero(); for (int i = 0; i < items; i++) { @@ -290,19 +291,19 @@ int BA3500_application::write(const TMask& m) long year = atol(riga.get(0)); if (year != 0) { - tab_inl->put ("CODTAB", codtab); - tab_inl->put ("I0", year); - tab_inl->put ("I1", riga.get()); - tab_inl->put ("I2", riga.get()); - tab_inl->put ("I3", riga.get()); - tab_inl->put ("I4", riga.get()); - tab_inl->put ("S0", riga.get()); - tab_inl->put ("I5", riga.get()); - tab_inl->put ("I6", riga.get()); - tab_inl->put ("S1", riga.get()); - tab_inl->put ("B0", riga.get()); - tab_inl->put ("B1", riga.get()); - tab_inl->write(); + tab_inl.put ("CODTAB", codtab); + tab_inl.put ("I0", year); + tab_inl.put ("I1", riga.get()); + tab_inl.put ("I2", riga.get()); + tab_inl.put ("I3", riga.get()); + tab_inl.put ("I4", riga.get()); + tab_inl.put ("S0", riga.get()); + tab_inl.put ("I5", riga.get()); + tab_inl.put ("I6", riga.get()); + tab_inl.put ("S1", riga.get()); + tab_inl.put ("B0", riga.get()); + tab_inl.put ("B1", riga.get()); + tab_inl.write(); } } return _rel->write(); @@ -322,9 +323,9 @@ bool BA3500_application::remove() int BA3500_application::cancella(long items) { - TTable *tab_inl = (TTable*)_rel->lfile(-ALIAS); - TRecfield an (_rel->lfile(-ALIAS)->curr(),"CODTAB",0,3); - TRecfield cl (_rel->lfile(-ALIAS)->curr(),"CODTAB",4,6); + TTable& tab_inl = (TTable&)_rel->lfile(-ALIAS); + TRecfield an(tab_inl.curr(),"CODTAB",0,3); + TRecfield cl(tab_inl.curr(),"CODTAB",4,6); long anno; TString codlib, dep; @@ -332,15 +333,15 @@ int BA3500_application::cancella(long items) codlib = (const char*)cl; for (long i = 0; i < items; i++) { - tab_inl->zero(); + tab_inl.zero(); dep = format ("%04d", anno); dep << format ("%-3s" , (const char*) codlib); dep << format ("%6d" , i); - tab_inl->put("CODTAB", dep); - if (tab_inl->read(_isequal, _lock) == NOERR) - tab_inl->remove(); + tab_inl.put("CODTAB", dep); + if (tab_inl.read(_isequal, _lock) == NOERR) + tab_inl.remove(); } - return tab_inl->status(); + return tab_inl.status(); } /********* diff --git a/ba/ba3700.cpp b/ba/ba3700.cpp index e415679c6..035fac6cf 100755 --- a/ba/ba3700.cpp +++ b/ba/ba3700.cpp @@ -1,940 +1,940 @@ -// ba3700.cpp - Tabella condizioni di pagamento - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ba3700.h" -#include "nditte.h" - -#define ALIAS 1 - -class Riga_tabrpg : public TToken_string -{ -public: - const TString& operator = (const TString& s) - {return TToken_string::operator=(s);} - Riga_tabrpg (long,const char*,const char*,const char*); -}; - -Riga_tabrpg::Riga_tabrpg(long num_giorni,const char* perc,const char* tipo_pag, const char* ulter_class) -: TToken_string(80) -{ - add(num_giorni); add(perc); add(tipo_pag); add(ulter_class); -} - -class TRighe_tabrpg : public TArray -{ -public: - void add_riga(long=0l,const char* percent="",const char* tipo_pagam="", - const char* ult_class=""); - - TRighe_tabrpg() {} -}; - -void TRighe_tabrpg::add_riga(long num_giorni,const char* perc, const char* tipo_pag,const char* ulter_class) -{ - add(new Riga_tabrpg(num_giorni,perc,tipo_pag,ulter_class)); -} - - -class BA3700_application : public TRelation_application -{ - static bool intervallo_rate (TMask_field& f, KEY k); - static bool rate_differenziate (TMask_field& f, KEY k); - static bool tipo_prima_rata (TMask_field& f, KEY k); - static bool numero_rate (TMask_field& f, KEY k); - static bool mese_commerciale (TMask_field& f, KEY k); - static bool riga_sheet(int r, KEY k); - - TRelation * _rel; - TMask * _msk; - TBit_array _righe_gia_presenti; - - int _mode; // Modo maschera corrente - TRighe_tabrpg _righe_tabrpg; - long _interv_rate, _numero_rate; - int _riga; - - void read_tabrpg (TMask&); - bool fill_sheet (TMask&); - void togli_dal_file (const TString&); - void calcola_percentuale (TMask& m); - bool ricalcola_numero_giorni (TMask_field& f, KEY k); - bool ricalcolo_percentuale (TMask_field& f, KEY k); - void tipo_pagamento (TMask_field& f, KEY k); - void ulteriore_riclass (TMask_field& f, KEY k); - -protected: - - virtual bool user_create(); - virtual bool user_destroy(); - - virtual TRelation* get_relation() const { return _rel; } - virtual TMask* get_mask(int mode); - virtual bool changing_mask(int mode) {return FALSE; } - virtual bool remove(); - - virtual void init_modify_mode(TMask&); - virtual void init_insert_mode(TMask&); - virtual int rewrite(const TMask& m); - virtual int write(const TMask& m); - virtual int read(TMask& m); - - int cancella(long items); - -public: - - TMask * main_mask() { return _msk; } - BA3700_application() : TRelation_application() {} - virtual ~BA3700_application() {} -}; - - -HIDDEN BA3700_application * app() { return (BA3700_application*) MainApp(); } - -TMask* BA3700_application::get_mask(int mode) -{ - return _msk; -} - -void BA3700_application::togli_dal_file(const TString& cod_pag) -{ - long i; - TTable* tab_rpg = (TTable*)_rel->lfile(-ALIAS); - long last = _righe_gia_presenti.last_one(); - long start = _righe_gia_presenti.first_one(); - TString dep; - - for (i=start; i<=last; i++) - { - if (_righe_gia_presenti[i]) - { - tab_rpg->zero(); - dep.format ("%-4s%3d", (const char*) cod_pag, i); - tab_rpg->put("CODTAB", dep); - tab_rpg->remove(); - } - } -} - -void BA3700_application::read_tabrpg(TMask& m) -{ - long numero_giorni, num_giorni_prima_rata; - TString tipo_pagamento; - TString percentuale, cod_pag, ult_class; - bool ok = FALSE; - TTable* tab_rpg = (TTable*)_rel->lfile(-ALIAS); - long numrig; - int i = 0; - - _numero_rate = 0; - - cod_pag = m.get(F_CODICE); - - _rel->update(); - - _righe_gia_presenti.reset(); - - ok = _rel->is_first_match(-ALIAS); - - while (ok) - { - TRecfield num (tab_rpg->curr(),"CODTAB",4,6); - numrig = long(num); - numero_giorni = tab_rpg->get_long("I0"); - percentuale = tab_rpg->get ("R0"); - tipo_pagamento = tab_rpg->get ("S0"); - ult_class = tab_rpg->get ("S1"); - - if (i == 0) //Sono sulla prima rata - num_giorni_prima_rata = numero_giorni; - - if (i == 1) //Sono sulla seconda rata - _interv_rate = numero_giorni - num_giorni_prima_rata; - - _righe_tabrpg.add_riga(numero_giorni,percentuale,tipo_pagamento,ult_class); - _righe_gia_presenti.set(numrig); - ok = _rel->next_match(-ALIAS); - i++; - } - _numero_rate = i; -} - -bool BA3700_application::fill_sheet(TMask& m) -{ - long items; - - _righe_tabrpg.destroy(); - - TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); - cs.reset(); - - read_tabrpg(m); - - items = _righe_tabrpg.items(); - - for (int i = 0; i < items; i++) - { - TToken_string &riga = cs.row(i); - - riga.cut(0); - riga = (Riga_tabrpg&)_righe_tabrpg[i]; - } - - bool rate_diff = m.get_bool(F_RATE_DIFF); - - if (!rate_diff) - calcola_percentuale(m); - - cs.force_update(); - - _righe_tabrpg.destroy(); - - return TRUE; -} - -void BA3700_application::init_insert_mode(TMask& m) -{ - _interv_rate = 0; -} - -void BA3700_application::init_modify_mode(TMask& m) -{ - bool rate_differenziate = FALSE; - - rate_differenziate = m.get_bool(F_RATE_DIFF); - - if (rate_differenziate) - _interv_rate = 0; -} - -bool BA3700_application::rate_differenziate(TMask_field& f, KEY k) -{ - long items; - - TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); - items = cs.items(); - - bool rate_diff = f.mask().get_bool(F_RATE_DIFF); - - if (k == K_SPACE) - { - if (rate_diff) - { - f.mask().disable(F_NUM_RATE); - f.mask().disable(F_INT_RATE); - - for (int i = 1; i < items; i++) - { - if (i == 1) - cs.enable_cell(i,1); - - if (i >= 2) - cs.enable_cell(i,-1); - } - } - else - { - f.mask().enable(F_NUM_RATE); - f.mask().enable(F_INT_RATE); - - f.mask().set(F_NUM_RATE, items); - f.mask().set(F_INT_RATE, app()->_interv_rate); - - for (int i = 0; i < items; i++) - { - - if (i == 1) - cs.disable_cell(i,1); - - if (i >= 2) - cs.disable_cell(i,-1); - } - } - cs.force_update(); - } - return TRUE; -} - -bool BA3700_application::intervallo_rate(TMask_field& f, KEY k) -{ - bool mese_comm = FALSE; - long numero_giorni, num_giorni, items, interv_rate; - - if (f.to_check(k)) - { - mese_comm = f.mask().get_bool(F_MESECOMM); - interv_rate = f.mask().get_long(F_INT_RATE); - - if (mese_comm) - { - if ((interv_rate % 30) != 0) - { - f.error_box("L' intervallo tra rate successive deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); - return FALSE; - } - } - - TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); - items = cs.items(); - - for (int i = 0; i < items; i++) - { - TToken_string& riga = cs.row(i); - - if (i >= 1) - { - numero_giorni = num_giorni + interv_rate; - TString ng (format("%4d", numero_giorni)); - riga.add(ng, 0); - } - - num_giorni = atol(riga.get(0)); - } - cs.force_update(); - } - return TRUE; -} - -bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k) -{ - char tipo_rata; - long items; - - TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); - items = cs.items(); - - bool rate_diff = f.mask().get_bool(F_RATE_DIFF); - - if (f.to_check(k, TRUE)) - { - tipo_rata = f.mask().get(F_TIPO_PRIMA_RATA)[0]; - - for (int i = 0; i < items; i++) - { - TToken_string& riga = cs.row(i); - - if ((tipo_rata == '1') || (tipo_rata == '2') || (tipo_rata == '3')) - { - - if (i == 0) - { - riga.add("0.00", 1); - cs.disable_cell(i,1); - } - else - { - if (rate_diff) - cs.enable_cell(i,1); - else - if (i == 0) - cs.enable_cell(i,1); - } - } - else - if ((tipo_rata == '4') || (tipo_rata == '5') || (tipo_rata == '6')) - { - - if (i == 0) - riga.add("100.00", 1); - - if (i >= 1) - riga.add("0.00", 1); - - cs.disable_cell(i,1); - } - else - { - if (tipo_rata == 0) - if (rate_diff) - cs.enable_cell(i,1); - else - if (i == 0) - cs.enable_cell(i,1); - } - } - if (rate_diff) - { - TString perc_str; - real percentuale; - - long items = cs.items(); - - for (int i = 0; i < items; i++) - { - TToken_string& riga = cs.row(i); - - perc_str = riga.get(1); - real perc(perc_str); - percentuale += perc; - } - - if (percentuale != 100) - { - f.error_box("La somma delle percentuali di tutte le rate deve essere 100"); - return FALSE; - } - } - else - app()->calcola_percentuale(f.mask()); - cs.force_update(); - } - return TRUE; -} - -bool BA3700_application::numero_rate(TMask_field& f, KEY k) -{ - long items, num_giorni, numero_giorni; - TString perc_str; - real perc,percentuale,perc_rimasta; - - TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); - items = cs.items(); - - if (f.to_check(k)) - { - long numero_rate = f.mask().get_long(F_NUM_RATE); - char tipo_rata = f.mask().get (F_TIPO_PRIMA_RATA)[0]; - long interv_rate = f.mask().get_long(F_INT_RATE); - - if (numero_rate == 0) - { - f.error_box("Valore non consentito ! Deve esistere almeno la prima rata."); - return FALSE; - } - else - { - if (items < numero_rate) - { - TToken_string& riga_app = cs.row((int)items - 1); //Mi posiziono sull'ultima rata - - num_giorni = atol(riga_app.get(0)); - - for (long i = items; i < numero_rate; i++) - { - TToken_string& riga = cs.row((int)i); - - riga.cut(0); - riga = riga_app; - numero_giorni = num_giorni + interv_rate; - TString ng (format("%4d", numero_giorni)); - riga.add(ng, 0); - num_giorni = atol(riga.get(0)); - - if (i == 1l) - cs.disable_cell((int)i,1); - - else if (i >= 2l) - cs.disable_cell((int)i,-1); - - // cs.disable_cell(i,-1); - } - } - else - if (items > numero_rate) - { - TToken_string& riga_appI = cs.row(0); //Mi posiziono sulla prima rata - TToken_string& riga_appII = cs.row(1); //Mi posiziono sulla seconda rata *** - - num_giorni = atol(riga_appI.get(0)); - - cs.reset(); - - for (int i = 0; i < numero_rate; i++) - { - TToken_string& riga = cs.row(i); - - if (i == 0) // *** - { //Ricopio i dati della prima rata nella prima rata - riga.cut(0); // *** - riga = riga_appI; // *** - } - - if (i > 0) - { - riga.cut(0); - riga = riga_appII; //Ricopio i dati della seconda rata in tutte le altre - numero_giorni = num_giorni + interv_rate; - TString ng (format("%4d", numero_giorni)); - riga.add(ng, 0); - } - num_giorni = atol(riga.get(0)); - - - if (i == 1) - cs.disable_cell(i,1); - if (i >=2) - cs.disable_cell(i,-1); - } - } - } - - items = numero_rate; - - for (int i = 0; i0)) - ||(((tipo_rata=='1')||(tipo_rata=='2')||(tipo_rata=='3'))&&(perc==0))) - { - perc_rimasta = 100 - perc; - percentuale = perc_rimasta / (numero_rate - 1); - } - } - - if (i >= 1) - { - TString perc = percentuale.string(); - riga.add(perc, 1); - } - } - cs.force_update(); - } - return TRUE; -} - -bool BA3700_application::mese_commerciale(TMask_field& f, KEY k) -{ - long interv_rate; - - if (k == K_SPACE) - { - bool mese_comm = f.mask().get_bool(F_MESECOMM); - bool rate_diff = f.mask().get_bool(F_RATE_DIFF); - - if (!rate_diff) - { - if (mese_comm) - { - interv_rate = f.mask().get_long(F_INT_RATE); - if ((interv_rate % 30) != 0) - { - f.error_box("L' intervallo tra rate successive deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); - return FALSE; - } - } - } - } - return TRUE; -} - -void BA3700_application::calcola_percentuale(TMask& m) -{ - TString perc_str; - real perc_rimasta, percentuale; - long items; - -// TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); - TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); - items = cs.items(); - - for (int i = 0; i= 1) - { - TString perc = percentuale.string(); - riga.add(perc, 1); - } - } -} - -bool BA3700_application::ricalcolo_percentuale(TMask_field& f, KEY k) -{ -// TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); - TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); - long items = cs.items(); - - if (f.mask().mode() == MODE_QUERY) - return TRUE; - - if (k == K_ENTER) - { - bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); - if (rate_diff) - { - TString perc_str; - real percentuale; - - long items = cs.items(); - - for (int i = 0; i < items; i++) - { - TToken_string& riga = cs.row(i); - - perc_str = riga.get(1); - real perc(perc_str); - percentuale += perc; - } - - if (percentuale != 100) - { - f.error_box("La somma delle percentuali di tutte le rate deve essere 100"); - return FALSE; - } - } - else - { - if (_riga == 0) - { - app()->_numero_rate = items; - app()->calcola_percentuale(f.mask()); - } - } - - cs.force_update(); - } - return TRUE; -} - -bool BA3700_application::ricalcola_numero_giorni(TMask_field& f, KEY k) -{ - long items, ng, giorni; - -// TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); - TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); - items = cs.items(); - - if (f.mask().mode() == MODE_QUERY) - return TRUE; - - if (k == K_ENTER) - { - bool mese_comm = app()->main_mask()->get_bool(F_MESECOMM); - bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); - - if (!rate_diff) - { - if (app()->_riga == 0) - { - TToken_string& riga_app = cs.row(0); - giorni = atol(riga_app.get(0)); - - long interv_rate = app()->main_mask()->get_long(F_INT_RATE); - - if (mese_comm) - { - if ((giorni % 30) != 0) - { - f.error_box("Il numero di giorni deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); - return FALSE; - } - } - - for (int i = 1; i < items; i++) - { - TToken_string& riga = cs.row(i); - - ng = giorni + interv_rate; - TString ngiorni (format("%4d", ng)); - riga.add(ngiorni, 0); - - giorni = atol(riga.get(0)); - } - } - - if (app()->_riga == 1) - { - long gg_I_rata, interv_rate; - - for (int i = 0; i < items; i++) - { - TToken_string& riga = cs.row(i); - - if (i == 0) - gg_I_rata = atol(riga.get(0)); - - if (i == 1) - { - giorni = atol(riga.get(0)); - - if (mese_comm) - { - if ((giorni % 30) != 0) - { - f.error_box("Il numero di giorni deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); - return FALSE; - } - } - - interv_rate = giorni - gg_I_rata; - } - - if (i >= 2) - { - ng = giorni + interv_rate; - TString ngiorni (format("%4d", ng)); - riga.add(ngiorni, 0); - giorni = atol(riga.get(0)); - } - } - } - cs.force_update(); - } - } - return TRUE; -} - -void BA3700_application::tipo_pagamento(TMask_field& f, KEY k) -{ - long items; - - TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); - items = cs.items(); - - if (k == K_ENTER) - { - bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); - - if (!rate_diff) - { - if (app()->_riga == 1) - { - TToken_string& riga_app = cs.row(1); - TString tp_pag = riga_app.get(2); - - for (int i = 2; i < items; i++) - { - TToken_string& riga = cs.row(i); - - riga.add(tp_pag, 2); - } - } - } - } -} - -void BA3700_application::ulteriore_riclass(TMask_field& f, KEY k) -{ - long items; - - TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); - items = cs.items(); - - if (k == K_ENTER) - { - bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); - - if (!rate_diff) - { - if (app()->_riga == 1) - { - TToken_string& riga_app = cs.row(1); - TString ult_riclass = riga_app.get(3); - - for (int i = 2; i < items; i++) - { - TToken_string& riga = cs.row(i); - - riga.add(ult_riclass, 3); - } - } - } - } -} - -bool BA3700_application::riga_sheet(int r, KEY k) -{ - if (k == K_SPACE) - app()->_riga = r; - - TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); - TMask_field& fld = cs.sheet_mask().field(101); - - TMask_field& ftp = cs.sheet_mask().field(103); - app()->tipo_pagamento(ftp,k); - - TMask_field& fuc = cs.sheet_mask().field(104); - app()->ulteriore_riclass(fuc,k); - - TMask_field& f = cs.sheet_mask().field(102); - - if ((app()->ricalcola_numero_giorni(fld,k))&&(app()->ricalcolo_percentuale(f,k))) - return TRUE; - else - return FALSE; -} - -int BA3700_application::rewrite(const TMask& m) -{ - long items; - TTable *tab_rpg = (TTable*)_rel->lfile(-ALIAS); - TString dep; - - TString cod_pag = m.get(F_CODICE); - - m.autosave(_rel); - - TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); - - items = cs.items(); - - for (int i = 0; i < items; i++) - { - TToken_string &riga = cs.row(i); - TString codtab (format("%-4s%3d",(const char*)cod_pag,i)); - long numero_giorni = atol(riga.get(0)); - if (numero_giorni != 0) - { - tab_rpg->put ("CODTAB", codtab); - tab_rpg->put ("I0", numero_giorni); - tab_rpg->put ("R0", riga.get()); - dep = riga.get(); - if (dep != "") - tab_rpg->put ("S0", dep); - dep = riga.get(); - if (dep != "") - tab_rpg->put ("S1", dep); - - if (_righe_gia_presenti[i]) - { - tab_rpg->rewrite(); - _righe_gia_presenti.reset(i); - } - else - tab_rpg->write(); - } - } - togli_dal_file(cod_pag); - return _rel->rewrite(); -} - -int BA3700_application::write(const TMask& m) -{ - long items; - TTable *tab_rpg = (TTable*)_rel->lfile(-ALIAS); - TString dep; - - TString cod_pag = m.get(F_CODICE); - - m.autosave(_rel); - - TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); - - items = cs.items(); - - tab_rpg->zero(); - - for (int i = 0; i < items; i++) - { - TToken_string &riga = cs.row(i); - TString codtab (format("%-4s%3d",(const char*)cod_pag,i)); - long numero_giorni = atol(riga.get(0)); - if (numero_giorni != 0) - { - tab_rpg->put ("CODTAB", codtab); - tab_rpg->put ("I0", numero_giorni); - tab_rpg->put ("R0", riga.get()); - dep = riga.get(); - if (dep != "") - tab_rpg->put ("S0", dep); - dep = riga.get(); - if (dep != "") - tab_rpg->put ("S1", dep); - tab_rpg->write(); - } - } - return _rel->write(); -} - -bool BA3700_application::remove() -{ - TSheet_field& cs = (TSheet_field&)_msk->field(F_SHEET_RPG); - cancella(cs.items()); - TRelation_application::remove(); - return TRUE; -} - -int BA3700_application::cancella(long items) -{ - TTable* tab_rpg = (TTable*)_rel->lfile(-ALIAS); - TRecfield an (tab_rpg->curr(),"CODTAB",0,3); - TString cod_pag,dep; - - cod_pag = (const char*)(an); - - for (long i = 0; i < items; i++) - { - tab_rpg->zero(); - dep = format ("%-4s", (const char*) cod_pag); - dep << format ("%3d" , i); - tab_rpg->put("CODTAB", dep); - if (tab_rpg->read(_isequal, _lock) == NOERR) - tab_rpg->remove(); - } - return tab_rpg->status(); -} - -int BA3700_application::read(TMask& m) -{ - m.autoload(_rel); - fill_sheet(m); - - return NOERR; -} - -bool BA3700_application::user_create() -{ - _rel = new TRelation (TAB_CPG); - -//E' stato usato un solo = perche' altrimenti per come sono fatte le lib. vi -//sono problemi di allineamento all' interno di relation.cpp. - - _rel->add(TAB_RPG, "CODTAB[1,4]=CODTAB" ,1, 0, ALIAS); //-4 = alias,perche'le - //due tabelle sono entrambe in TABCOM.dta - - _interv_rate = 0; - - _msk = new TMask("ba3700a"); - - _msk->set_handler (F_INT_RATE , intervallo_rate); - _msk->set_handler (F_RATE_DIFF , rate_differenziate); - _msk->set_handler (F_TIPO_PRIMA_RATA , tipo_prima_rata); - _msk->set_handler (F_NUM_RATE , numero_rate); - _msk->set_handler (F_MESECOMM , mese_commerciale); - - TSheet_field& cs = (TSheet_field&)_msk->field(F_SHEET_RPG); -// cs.sheet_mask().set_handler (102 , ricalcolo_percentuale); -// cs.sheet_mask().set_handler (101 , ricalcola_numero_giorni); - cs.set_notify (riga_sheet); - - return TRUE; -} - -bool BA3700_application::user_destroy() -{ - delete _msk; - delete _rel; - return TRUE; -} - -int ba3700(int argc, char* argv[]) -{ - BA3700_application a; - a.run(argc, argv, "Tabella condizioni di pagamento"); - return 0; -} - - - +// ba3700.cpp - Tabella condizioni di pagamento + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ba3700.h" +#include "nditte.h" + +#define ALIAS 1 + +class Riga_tabrpg : public TToken_string +{ +public: + const TString& operator = (const TString& s) + {return TToken_string::operator=(s);} + Riga_tabrpg (long,const char*,const char*,const char*); +}; + +Riga_tabrpg::Riga_tabrpg(long num_giorni,const char* perc,const char* tipo_pag, const char* ulter_class) +: TToken_string(80) +{ + add(num_giorni); add(perc); add(tipo_pag); add(ulter_class); +} + +class TRighe_tabrpg : public TArray +{ +public: + void add_riga(long=0l,const char* percent="",const char* tipo_pagam="", + const char* ult_class=""); + + TRighe_tabrpg() {} +}; + +void TRighe_tabrpg::add_riga(long num_giorni,const char* perc, const char* tipo_pag,const char* ulter_class) +{ + add(new Riga_tabrpg(num_giorni,perc,tipo_pag,ulter_class)); +} + + +class BA3700_application : public TRelation_application +{ + static bool intervallo_rate (TMask_field& f, KEY k); + static bool rate_differenziate (TMask_field& f, KEY k); + static bool tipo_prima_rata (TMask_field& f, KEY k); + static bool numero_rate (TMask_field& f, KEY k); + static bool mese_commerciale (TMask_field& f, KEY k); + static bool riga_sheet(int r, KEY k); + + TRelation * _rel; + TMask * _msk; + TBit_array _righe_gia_presenti; + + int _mode; // Modo maschera corrente + TRighe_tabrpg _righe_tabrpg; + long _interv_rate, _numero_rate; + int _riga; + + void read_tabrpg (TMask&); + bool fill_sheet (TMask&); + void togli_dal_file (const TString&); + void calcola_percentuale (TMask& m); + bool ricalcola_numero_giorni (TMask_field& f, KEY k); + bool ricalcolo_percentuale (TMask_field& f, KEY k); + void tipo_pagamento (TMask_field& f, KEY k); + void ulteriore_riclass (TMask_field& f, KEY k); + +protected: + + virtual bool user_create(); + virtual bool user_destroy(); + + virtual TRelation* get_relation() const { return _rel; } + virtual TMask* get_mask(int mode); + virtual bool changing_mask(int mode) {return FALSE; } + virtual bool remove(); + + virtual void init_modify_mode(TMask&); + virtual void init_insert_mode(TMask&); + virtual int rewrite(const TMask& m); + virtual int write(const TMask& m); + virtual int read(TMask& m); + + int cancella(long items); + +public: + + TMask * main_mask() { return _msk; } + BA3700_application() : TRelation_application() {} + virtual ~BA3700_application() {} +}; + + +HIDDEN BA3700_application * app() { return (BA3700_application*) MainApp(); } + +TMask* BA3700_application::get_mask(int mode) +{ + return _msk; +} + +void BA3700_application::togli_dal_file(const TString& cod_pag) +{ + long i; + TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); + long last = _righe_gia_presenti.last_one(); + long start = _righe_gia_presenti.first_one(); + TString16 dep; + + for (i=start; i<=last; i++) + { + if (_righe_gia_presenti[i]) + { + tab_rpg.zero(); + dep.format ("%-4s%3d", (const char*) cod_pag, i); + tab_rpg.put("CODTAB", dep); + tab_rpg.remove(); + } + } +} + +void BA3700_application::read_tabrpg(TMask& m) +{ + long numero_giorni, num_giorni_prima_rata; + TString tipo_pagamento; + TString percentuale, cod_pag, ult_class; + bool ok = FALSE; + TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); + long numrig; + int i = 0; + + _numero_rate = 0; + + cod_pag = m.get(F_CODICE); + + _rel->update(); + + _righe_gia_presenti.reset(); + + ok = _rel->is_first_match(-ALIAS); + + while (ok) + { + TRecfield num (tab_rpg.curr(),"CODTAB",4,6); + numrig = long(num); + numero_giorni = tab_rpg.get_long("I0"); + percentuale = tab_rpg.get ("R0"); + tipo_pagamento = tab_rpg.get ("S0"); + ult_class = tab_rpg.get ("S1"); + + if (i == 0) //Sono sulla prima rata + num_giorni_prima_rata = numero_giorni; + + if (i == 1) //Sono sulla seconda rata + _interv_rate = numero_giorni - num_giorni_prima_rata; + + _righe_tabrpg.add_riga(numero_giorni,percentuale,tipo_pagamento,ult_class); + _righe_gia_presenti.set(numrig); + ok = _rel->next_match(-ALIAS); + i++; + } + _numero_rate = i; +} + +bool BA3700_application::fill_sheet(TMask& m) +{ + long items; + + _righe_tabrpg.destroy(); + + TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); + cs.reset(); + + read_tabrpg(m); + + items = _righe_tabrpg.items(); + + for (int i = 0; i < items; i++) + { + TToken_string &riga = cs.row(i); + + riga.cut(0); + riga = (Riga_tabrpg&)_righe_tabrpg[i]; + } + + bool rate_diff = m.get_bool(F_RATE_DIFF); + + if (!rate_diff) + calcola_percentuale(m); + + cs.force_update(); + + _righe_tabrpg.destroy(); + + return TRUE; +} + +void BA3700_application::init_insert_mode(TMask& m) +{ + _interv_rate = 0; +} + +void BA3700_application::init_modify_mode(TMask& m) +{ + bool rate_differenziate = FALSE; + + rate_differenziate = m.get_bool(F_RATE_DIFF); + + if (rate_differenziate) + _interv_rate = 0; +} + +bool BA3700_application::rate_differenziate(TMask_field& f, KEY k) +{ + long items; + + TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); + items = cs.items(); + + bool rate_diff = f.mask().get_bool(F_RATE_DIFF); + + if (k == K_SPACE) + { + if (rate_diff) + { + f.mask().disable(F_NUM_RATE); + f.mask().disable(F_INT_RATE); + + for (int i = 1; i < items; i++) + { + if (i == 1) + cs.enable_cell(i,1); + + if (i >= 2) + cs.enable_cell(i,-1); + } + } + else + { + f.mask().enable(F_NUM_RATE); + f.mask().enable(F_INT_RATE); + + f.mask().set(F_NUM_RATE, items); + f.mask().set(F_INT_RATE, app()->_interv_rate); + + for (int i = 0; i < items; i++) + { + + if (i == 1) + cs.disable_cell(i,1); + + if (i >= 2) + cs.disable_cell(i,-1); + } + } + cs.force_update(); + } + return TRUE; +} + +bool BA3700_application::intervallo_rate(TMask_field& f, KEY k) +{ + bool mese_comm = FALSE; + long numero_giorni, num_giorni, items, interv_rate; + + if (f.to_check(k)) + { + mese_comm = f.mask().get_bool(F_MESECOMM); + interv_rate = f.mask().get_long(F_INT_RATE); + + if (mese_comm) + { + if ((interv_rate % 30) != 0) + { + f.error_box("L' intervallo tra rate successive deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); + return FALSE; + } + } + + TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); + items = cs.items(); + + for (int i = 0; i < items; i++) + { + TToken_string& riga = cs.row(i); + + if (i >= 1) + { + numero_giorni = num_giorni + interv_rate; + TString ng (format("%4d", numero_giorni)); + riga.add(ng, 0); + } + + num_giorni = atol(riga.get(0)); + } + cs.force_update(); + } + return TRUE; +} + +bool BA3700_application::tipo_prima_rata(TMask_field& f, KEY k) +{ + char tipo_rata; + long items; + + TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); + items = cs.items(); + + bool rate_diff = f.mask().get_bool(F_RATE_DIFF); + + if (f.to_check(k, TRUE)) + { + tipo_rata = f.mask().get(F_TIPO_PRIMA_RATA)[0]; + + for (int i = 0; i < items; i++) + { + TToken_string& riga = cs.row(i); + + if ((tipo_rata == '1') || (tipo_rata == '2') || (tipo_rata == '3')) + { + + if (i == 0) + { + riga.add("0.00", 1); + cs.disable_cell(i,1); + } + else + { + if (rate_diff) + cs.enable_cell(i,1); + else + if (i == 0) + cs.enable_cell(i,1); + } + } + else + if ((tipo_rata == '4') || (tipo_rata == '5') || (tipo_rata == '6')) + { + + if (i == 0) + riga.add("100.00", 1); + + if (i >= 1) + riga.add("0.00", 1); + + cs.disable_cell(i,1); + } + else + { + if (tipo_rata == 0) + if (rate_diff) + cs.enable_cell(i,1); + else + if (i == 0) + cs.enable_cell(i,1); + } + } + if (rate_diff) + { + TString perc_str; + real percentuale; + + long items = cs.items(); + + for (int i = 0; i < items; i++) + { + TToken_string& riga = cs.row(i); + + perc_str = riga.get(1); + real perc(perc_str); + percentuale += perc; + } + + if (percentuale != 100) + { + f.error_box("La somma delle percentuali di tutte le rate deve essere 100"); + return FALSE; + } + } + else + app()->calcola_percentuale(f.mask()); + cs.force_update(); + } + return TRUE; +} + +bool BA3700_application::numero_rate(TMask_field& f, KEY k) +{ + long items, num_giorni, numero_giorni; + TString perc_str; + real perc,percentuale,perc_rimasta; + + TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); + items = cs.items(); + + if (f.to_check(k)) + { + long numero_rate = f.mask().get_long(F_NUM_RATE); + char tipo_rata = f.mask().get (F_TIPO_PRIMA_RATA)[0]; + long interv_rate = f.mask().get_long(F_INT_RATE); + + if (numero_rate == 0) + { + f.error_box("Valore non consentito ! Deve esistere almeno la prima rata."); + return FALSE; + } + else + { + if (items < numero_rate) + { + TToken_string& riga_app = cs.row((int)items - 1); //Mi posiziono sull'ultima rata + + num_giorni = atol(riga_app.get(0)); + + for (long i = items; i < numero_rate; i++) + { + TToken_string& riga = cs.row((int)i); + + riga.cut(0); + riga = riga_app; + numero_giorni = num_giorni + interv_rate; + TString ng (format("%4d", numero_giorni)); + riga.add(ng, 0); + num_giorni = atol(riga.get(0)); + + if (i == 1l) + cs.disable_cell((int)i,1); + + else if (i >= 2l) + cs.disable_cell((int)i,-1); + + // cs.disable_cell(i,-1); + } + } + else + if (items > numero_rate) + { + TToken_string& riga_appI = cs.row(0); //Mi posiziono sulla prima rata + TToken_string& riga_appII = cs.row(1); //Mi posiziono sulla seconda rata *** + + num_giorni = atol(riga_appI.get(0)); + + cs.reset(); + + for (int i = 0; i < numero_rate; i++) + { + TToken_string& riga = cs.row(i); + + if (i == 0) // *** + { //Ricopio i dati della prima rata nella prima rata + riga.cut(0); // *** + riga = riga_appI; // *** + } + + if (i > 0) + { + riga.cut(0); + riga = riga_appII; //Ricopio i dati della seconda rata in tutte le altre + numero_giorni = num_giorni + interv_rate; + TString ng (format("%4d", numero_giorni)); + riga.add(ng, 0); + } + num_giorni = atol(riga.get(0)); + + + if (i == 1) + cs.disable_cell(i,1); + if (i >=2) + cs.disable_cell(i,-1); + } + } + } + + items = numero_rate; + + for (int i = 0; i0)) + ||(((tipo_rata=='1')||(tipo_rata=='2')||(tipo_rata=='3'))&&(perc==0))) + { + perc_rimasta = 100 - perc; + percentuale = perc_rimasta / (numero_rate - 1); + } + } + + if (i >= 1) + { + TString perc = percentuale.string(); + riga.add(perc, 1); + } + } + cs.force_update(); + } + return TRUE; +} + +bool BA3700_application::mese_commerciale(TMask_field& f, KEY k) +{ + long interv_rate; + + if (k == K_SPACE) + { + bool mese_comm = f.mask().get_bool(F_MESECOMM); + bool rate_diff = f.mask().get_bool(F_RATE_DIFF); + + if (!rate_diff) + { + if (mese_comm) + { + interv_rate = f.mask().get_long(F_INT_RATE); + if ((interv_rate % 30) != 0) + { + f.error_box("L' intervallo tra rate successive deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); + return FALSE; + } + } + } + } + return TRUE; +} + +void BA3700_application::calcola_percentuale(TMask& m) +{ + TString perc_str; + real perc_rimasta, percentuale; + long items; + +// TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); + TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); + items = cs.items(); + + for (int i = 0; i= 1) + { + TString perc = percentuale.string(); + riga.add(perc, 1); + } + } +} + +bool BA3700_application::ricalcolo_percentuale(TMask_field& f, KEY k) +{ +// TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); + TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); + long items = cs.items(); + + if (f.mask().mode() == MODE_QUERY) + return TRUE; + + if (k == K_ENTER) + { + bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); + if (rate_diff) + { + TString perc_str; + real percentuale; + + long items = cs.items(); + + for (int i = 0; i < items; i++) + { + TToken_string& riga = cs.row(i); + + perc_str = riga.get(1); + real perc(perc_str); + percentuale += perc; + } + + if (percentuale != 100) + { + f.error_box("La somma delle percentuali di tutte le rate deve essere 100"); + return FALSE; + } + } + else + { + if (_riga == 0) + { + app()->_numero_rate = items; + app()->calcola_percentuale(f.mask()); + } + } + + cs.force_update(); + } + return TRUE; +} + +bool BA3700_application::ricalcola_numero_giorni(TMask_field& f, KEY k) +{ + long items, ng, giorni; + +// TSheet_field& cs = (TSheet_field&)f.mask().field(F_SHEET_RPG); + TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); + items = cs.items(); + + if (f.mask().mode() == MODE_QUERY) + return TRUE; + + if (k == K_ENTER) + { + bool mese_comm = app()->main_mask()->get_bool(F_MESECOMM); + bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); + + if (!rate_diff) + { + if (app()->_riga == 0) + { + TToken_string& riga_app = cs.row(0); + giorni = atol(riga_app.get(0)); + + long interv_rate = app()->main_mask()->get_long(F_INT_RATE); + + if (mese_comm) + { + if ((giorni % 30) != 0) + { + f.error_box("Il numero di giorni deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); + return FALSE; + } + } + + for (int i = 1; i < items; i++) + { + TToken_string& riga = cs.row(i); + + ng = giorni + interv_rate; + TString ngiorni (format("%4d", ng)); + riga.add(ngiorni, 0); + + giorni = atol(riga.get(0)); + } + } + + if (app()->_riga == 1) + { + long gg_I_rata, interv_rate; + + for (int i = 0; i < items; i++) + { + TToken_string& riga = cs.row(i); + + if (i == 0) + gg_I_rata = atol(riga.get(0)); + + if (i == 1) + { + giorni = atol(riga.get(0)); + + if (mese_comm) + { + if ((giorni % 30) != 0) + { + f.error_box("Il numero di giorni deve essere un multiplo di 30, perche' e' stato selezionato il mese commerciale"); + return FALSE; + } + } + + interv_rate = giorni - gg_I_rata; + } + + if (i >= 2) + { + ng = giorni + interv_rate; + TString ngiorni (format("%4d", ng)); + riga.add(ngiorni, 0); + giorni = atol(riga.get(0)); + } + } + } + cs.force_update(); + } + } + return TRUE; +} + +void BA3700_application::tipo_pagamento(TMask_field& f, KEY k) +{ + long items; + + TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); + items = cs.items(); + + if (k == K_ENTER) + { + bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); + + if (!rate_diff) + { + if (app()->_riga == 1) + { + TToken_string& riga_app = cs.row(1); + TString tp_pag = riga_app.get(2); + + for (int i = 2; i < items; i++) + { + TToken_string& riga = cs.row(i); + + riga.add(tp_pag, 2); + } + } + } + } +} + +void BA3700_application::ulteriore_riclass(TMask_field& f, KEY k) +{ + long items; + + TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); + items = cs.items(); + + if (k == K_ENTER) + { + bool rate_diff = app()->main_mask()->get_bool(F_RATE_DIFF); + + if (!rate_diff) + { + if (app()->_riga == 1) + { + TToken_string& riga_app = cs.row(1); + TString ult_riclass = riga_app.get(3); + + for (int i = 2; i < items; i++) + { + TToken_string& riga = cs.row(i); + + riga.add(ult_riclass, 3); + } + } + } + } +} + +bool BA3700_application::riga_sheet(int r, KEY k) +{ + if (k == K_SPACE) + app()->_riga = r; + + TSheet_field& cs = (TSheet_field&)app()->main_mask()->field(F_SHEET_RPG); + TMask_field& fld = cs.sheet_mask().field(101); + + TMask_field& ftp = cs.sheet_mask().field(103); + app()->tipo_pagamento(ftp,k); + + TMask_field& fuc = cs.sheet_mask().field(104); + app()->ulteriore_riclass(fuc,k); + + TMask_field& f = cs.sheet_mask().field(102); + + if ((app()->ricalcola_numero_giorni(fld,k))&&(app()->ricalcolo_percentuale(f,k))) + return TRUE; + else + return FALSE; +} + +int BA3700_application::rewrite(const TMask& m) +{ + long items; + TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); + TString dep; + + TString cod_pag = m.get(F_CODICE); + + m.autosave(_rel); + + TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); + + items = cs.items(); + + for (int i = 0; i < items; i++) + { + TToken_string &riga = cs.row(i); + TString codtab (format("%-4s%3d",(const char*)cod_pag,i)); + long numero_giorni = atol(riga.get(0)); + if (numero_giorni != 0) + { + tab_rpg.put ("CODTAB", codtab); + tab_rpg.put ("I0", numero_giorni); + tab_rpg.put ("R0", riga.get()); + dep = riga.get(); + if (dep != "") + tab_rpg.put ("S0", dep); + dep = riga.get(); + if (dep != "") + tab_rpg.put ("S1", dep); + + if (_righe_gia_presenti[i]) + { + tab_rpg.rewrite(); + _righe_gia_presenti.reset(i); + } + else + tab_rpg.write(); + } + } + togli_dal_file(cod_pag); + return _rel->rewrite(); +} + +int BA3700_application::write(const TMask& m) +{ + long items; + TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); + TString dep; + + TString cod_pag = m.get(F_CODICE); + + m.autosave(_rel); + + TSheet_field& cs = (TSheet_field&)m.field(F_SHEET_RPG); + + items = cs.items(); + + tab_rpg.zero(); + + for (int i = 0; i < items; i++) + { + TToken_string &riga = cs.row(i); + TString codtab (format("%-4s%3d",(const char*)cod_pag,i)); + long numero_giorni = atol(riga.get(0)); + if (numero_giorni != 0) + { + tab_rpg.put ("CODTAB", codtab); + tab_rpg.put ("I0", numero_giorni); + tab_rpg.put ("R0", riga.get()); + dep = riga.get(); + if (dep != "") + tab_rpg.put ("S0", dep); + dep = riga.get(); + if (dep != "") + tab_rpg.put ("S1", dep); + tab_rpg.write(); + } + } + return _rel->write(); +} + +bool BA3700_application::remove() +{ + TSheet_field& cs = (TSheet_field&)_msk->field(F_SHEET_RPG); + cancella(cs.items()); + TRelation_application::remove(); + return TRUE; +} + +int BA3700_application::cancella(long items) +{ + TTable& tab_rpg = (TTable&)_rel->lfile(-ALIAS); + TRecfield an (tab_rpg.curr(),"CODTAB",0,3); + TString cod_pag,dep; + + cod_pag = (const char*)(an); + + for (long i = 0; i < items; i++) + { + tab_rpg.zero(); + dep = format ("%-4s", (const char*) cod_pag); + dep << format ("%3d" , i); + tab_rpg.put("CODTAB", dep); + if (tab_rpg.read(_isequal, _lock) == NOERR) + tab_rpg.remove(); + } + return tab_rpg.status(); +} + +int BA3700_application::read(TMask& m) +{ + m.autoload(_rel); + fill_sheet(m); + + return NOERR; +} + +bool BA3700_application::user_create() +{ + _rel = new TRelation (TAB_CPG); + +//E' stato usato un solo = perche' altrimenti per come sono fatte le lib. vi +//sono problemi di allineamento all' interno di relation.cpp. + + _rel->add(TAB_RPG, "CODTAB[1,4]=CODTAB" ,1, 0, ALIAS); //-4 = alias,perche'le + //due tabelle sono entrambe in TABCOM.dta + + _interv_rate = 0; + + _msk = new TMask("ba3700a"); + + _msk->set_handler (F_INT_RATE , intervallo_rate); + _msk->set_handler (F_RATE_DIFF , rate_differenziate); + _msk->set_handler (F_TIPO_PRIMA_RATA , tipo_prima_rata); + _msk->set_handler (F_NUM_RATE , numero_rate); + _msk->set_handler (F_MESECOMM , mese_commerciale); + + TSheet_field& cs = (TSheet_field&)_msk->field(F_SHEET_RPG); +// cs.sheet_mask().set_handler (102 , ricalcolo_percentuale); +// cs.sheet_mask().set_handler (101 , ricalcola_numero_giorni); + cs.set_notify (riga_sheet); + + return TRUE; +} + +bool BA3700_application::user_destroy() +{ + delete _msk; + delete _rel; + return TRUE; +} + +int ba3700(int argc, char* argv[]) +{ + BA3700_application a; + a.run(argc, argv, "Tabella condizioni di pagamento"); + return 0; +} + + + diff --git a/ba/ba4200.cpp b/ba/ba4200.cpp index db3c5b1f5..260078575 100755 --- a/ba/ba4200.cpp +++ b/ba/ba4200.cpp @@ -1,501 +1,505 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "ba4.h" -#include "ba4200.h" - -#define FLD_GD1_TIPOA 126 -#define FLD_GD1_CODANAGR 127 -#define FLD_GD1_CODDITTAH 627 - - -class BA4200_application : public TRelation_application -{ - char _tip_ana ; - TString _cod_ana ; - TMask* _msk[2] ; - TRelation* _rel[2]; - TLocalisamfile* _comuni; - TLocalisamfile* _tabcom; - -protected: - virtual bool user_create() ; - virtual bool user_destroy() ; - virtual int read(TMask& m); - virtual int rewrite(const TMask& m); - virtual void init_query_mode(TMask& m); - virtual void init_insert_mode(TMask& m); - virtual void init_modify_mode(TMask& m); - virtual bool changing_mask(int mode) {return _msk[tip_msk()] == NULL;} - virtual const char* get_next_key(); - virtual TMask* get_mask(int mode) ; - virtual void write_enable(const bool on = TRUE); - - static bool ba4200_handler(TMask& m, KEY k); - -public: - virtual int write(const TMask& m); - virtual TRelation* get_relation() const { return _rel[tip_msk()];} - void manual_save(const TMask& m); - int tip_msk() const { return _tip_ana == TFIS ? MSKF : MSKG;} - bool ana_fis() const { return _tip_ana == TFIS;} - bool ana_giu() const { return _tip_ana == TGIU;} - void set_tip_ana(char tip) { _tip_ana = toupper(tip);} - void set_cod_ana(const char* cod) { _cod_ana = cod;} - const char* cod_ana() { return _cod_ana;} - char tip_ana() { return _tip_ana;} - virtual bool force_cursor_usage() const { return TRUE;} - - BA4200_application(char ta) { set_tip_ana(ta); } - virtual ~BA4200_application() {} -}; - -bool BA4200_application::ba4200_handler(TMask& m, KEY k) -{ - BA4200_application& app = (BA4200_application&)main_app(); - - if (k == K_F10) - { - if (app.ana_fis()) app.set_tip_ana(TGIU); - else app.set_tip_ana(TFIS); - m.stop_run(K_ESC); - return FALSE; - } - if (k != K_F5 || m.mode() != MODE_MOD) return TRUE; - TToken_string body(16); - - body.add(format("%d", FLD_GD1_CODDITTAH)); - if ( app.tip_ana() == TFIS ) - { - body.add(format("%d=F", FLD_GD1_TIPOA)); - body.add(format("%d=%s", FLD_GD1_CODANAGR, (const char*) app.cod_ana())); - } - else - { - body.add(format("%d=G", FLD_GD1_TIPOA)); - body.add(format("%d=%s", FLD_GD1_CODANAGR, (const char*) app.cod_ana())); - } -#if XVT_OS == XVT_OS_WIN - TString16 cmd("ba4b -2"); -#else - TString16 cmd("ba4 -2"); -#endif - TMessage msg(cmd2name(cmd), MSG_FS, (const char*) body); - TMailbox mb; - mb.send(msg); - TLocalisamfile* d = app.get_relation()->lfile(); - - d->setkey(1); - d->zero(); - d->put(N_TIPOA, app.ana_fis() ? "F" : "G"); - d->put(N_CODANAGR, m.get(FLD_CODANAGR)); - d->read(_isequal, _unlock) ; - TExternal_app a(cmd); - a.run(); - d->read(_iscurr, _lock) ; - m.set_focus(); - return FALSE; -} - -void BA4200_application::init_query_mode(TMask& m) - -{ - m.disable(DLG_DITTE); - m.enable(DLG_CHGTIP); -} - -const char* BA4200_application::get_next_key() - -{ - TLocalisamfile& anag = *get_relation()->lfile() ; - long cod_anagr = 1; - - if (!anag.empty() ) - { - anag.zero() ; - anag.setkey(1) ; - if (ana_fis()) - { - anag.put(N_TIPOA, TGIU); - anag.read(_isgteq) ; - if (anag.good()) anag.prev(); - const char t_ret = anag.get_char(N_TIPOA); - if ( t_ret == TFIS ) - cod_anagr = anag.get_long(N_CODANAGR)+1; - } - else - { - anag.last( ) ; - if (anag.good()) - { - const char t_ret = anag.get_char(N_TIPOA); - if ( t_ret == TGIU ) - cod_anagr = anag.get_long(N_CODANAGR)+1; - } - } - } - _cod_ana.format("%ld", cod_anagr); - return format("%d|%ld", FLD_CODANAGR, cod_anagr); -} - - -void BA4200_application::init_insert_mode(TMask& m) -{ - m.disable(DLG_DITTE); - m.disable(DLG_CHGTIP); -} - - -void BA4200_application::init_modify_mode(TMask& m) -{ - m.enable(DLG_DITTE); - m.disable(DLG_CHGTIP); -} - - -bool gest_nazionalita(TMask_field& f, KEY key) -{ - if (f.mask().query_mode() || key == K_SPACE) return TRUE; - TMask& msk = f.mask() ; - TString nazionalita = (const char*)msk.get(FLD_AF1_STATONASC_TABSTE_S0) ; - - if (f.to_check(key) || nazionalita.empty()) - { - TString cod_stato = (const char* ) f.get() ; - - if ( cod_stato.empty() ) - msk.set(FLD_AF1_STATONASC_TABSTE_S0,"italiana") ; - else - { - TTable t_stati("%STA"); - TRectype& rectab = t_stati.curr() ; - rectab.zero() ; - rectab.put(N_CODTAB, cod_stato); - t_stati.read() ; - if ( t_stati.good() ) - msk.set( FLD_AF1_STATONASC_TABSTE_S0 , rectab.get(N_NAZIONALITA) ) ; - } - } - return TRUE ; -} - -// Handler dell'ufficio imposte dirette -bool gest_uff_imp_nr(TMask_field& f, KEY key) -{ - /* - if (!f.to_check(key)) return TRUE; - - const TString cod_uff(f.get()); - if (cod_uff.empty()) return TRUE; - - TMask& msk = f.mask() ; - TTable uff_imp("%UID"); - - uff_imp.zero() ; - uff_imp.put(N_CODTAB, cod_uff); - uff_imp.read() ; - if ( uff_imp.good() ) - { - const bool giuridica = ((BA4200_application*)MainApp())->ana_giu(); - const TFixed_string codcom(uff_imp.get(N_COMUNE)); - const char* com = msk.get(giuridica ? FLD_AG1_COMRF : FLD_AF2_COMRF); - if (*com) - { - if(codcom != com) - return f.error_box("L'ufficio deve appartenere al comune di residenza fiscale: %s", com); - } - else - { - com = msk.get(giuridica ? FLD_AG2_COMRES : FLD_AF1_COMRES); - if(codcom != com) - return f.error_box("L'ufficio deve appartenere al comune di residenza: %s", com); - } - } - */ - return TRUE; -} - - -// Handler del comunde di residenza e residenza fiscale -bool gest_uff_imp(TMask_field& f, KEY key) -{ - if (f.mask().query_mode() || !f.to_check(key, TRUE)) - return TRUE; - - TString cod_sta, cod_com; - TMask& msk = f.mask() ; - const short dlg = f.dlg(); - const bool giuridica = ((BA4200_application*)MainApp())->ana_giu(); - - if ( giuridica ) - { - cod_com = msk.get(FLD_AG1_COMRF); - if ((dlg == FLD_AG2_COMRES) || (dlg == FLD_AG2_STATORES)) - if (cod_com.not_empty()) return TRUE; - cod_sta = msk.get(FLD_AG1_STATORF); - } - else - { - cod_com = msk.get(FLD_AF2_COMRF); - if ((dlg == FLD_AF1_COMRES) || (dlg == FLD_AF1_STATORES)) - if (cod_com.not_empty()) return TRUE; - cod_sta = msk.get(FLD_AF2_STATORF); - } - - if (cod_com.empty()) - { - cod_com = msk.get(giuridica ? FLD_AG2_COMRES : FLD_AF1_COMRES) ; - cod_sta = msk.get(giuridica ? FLD_AG2_STATORES : FLD_AF1_STATORES) ; - } - - if (cod_com.empty()) - return TRUE; - - TLocalisamfile comuni(LF_COMUNI) ; - comuni.setkey(1) ; - comuni.zero() ; - comuni.put(N_STATO, cod_sta); - comuni.put(N_COM, cod_com ); - if (comuni.read() == NOERR) - { - msk.set(F_IMP_DENCOM, comuni.get("DENCOM")); - msk.set(F_IMP_PROVCOM, comuni.get("PROVCOM")); - - TString s(comuni.get(N_IMPDIR1)) ; - if (s.empty()) s = comuni.get(N_IMPDIR2) ; - if (s.empty()) s = comuni.get(N_IMPDIR3) ; - msk.set(F_UFFIIDD, s) ; msk.field(F_UFFIIDD).on_key(K_TAB); - msk.set(F_UFFREG, comuni.get("UFFREG")); msk.field(F_UFFREG).on_key(K_TAB); - msk.set(F_UFFCONC, comuni.get("UFFCONC")); msk.field(F_UFFCONC).on_key(K_TAB); - msk.set(F_UFFSERV, comuni.get("UFFCSERV")); msk.field(F_UFFSERV).on_key(K_TAB); - - msk.set(F_CODCONTR_EP, comuni.get("UFFESPROV").mid(1, 2)); - msk.set(F_CODCONTR_EC, comuni.get("UFFESCOM")); - } - - return TRUE; -} - -bool no_dup_fis(TMask_field& f, KEY key) -{ - if (f.mask().query_mode() || !f.to_check(key)) return TRUE; - BA4200_application* app = (BA4200_application*) MainApp(); - TLocalisamfile& anag = *app->get_relation()->lfile(LF_ANAG) ; - - const TString16 cofi(f.get()); - if ( cofi.not_empty() ) - { - anag.zero() ; - anag.put(N_TIPOA, app->tip_ana()); - anag.put(N_COFI, cofi ) ; - anag.setkey(3) ; - anag.read() ; - anag.setkey(1) ; - const char t = anag.get_char(N_TIPOA), t1 = app->tip_ana(); - const TString16 s = anag.get(N_CODANAGR), s1 = app->cod_ana(); - - if (anag.good() && (t1 != t || s1 != s)) - { - f.error_box("Codice fiscale gia' utilizzato per il codice %c/%s", - t, (const char*)s); - return FALSE; - } - } - return TRUE ; -} - -bool gest_iva(TMask_field& f, KEY key , short fd_sta ,short fd_iva ) -{ - if (f.mask().query_mode() || !f.to_check(key)) return TRUE; - - BA4200_application* app = (BA4200_application*) MainApp(); - TLocalisamfile& anag = *app->get_relation()->lfile(LF_ANAG) ; - TMask& msk = f.mask() ; - - if ( f.get().not_empty() && !anag.empty() ) - { - anag.zero() ; - anag.put(N_TIPOA, app->tip_ana()); - anag.put(N_STATOPAIV, msk.get(fd_sta) ) ; - anag.put(N_PAIV, msk.get(fd_iva) ) ; - anag.setkey(4) ; - anag.read() ; - anag.setkey(1) ; - const char t = anag.get_char(N_TIPOA), t1 = app->tip_ana(); - const TFixed_string s(anag.get(N_CODANAGR)), s1(app->cod_ana()); - if (anag.good() && (t1 != t || s1 != s)) - { - f.error_box("Partita iva gia' definita per il codice : %c/%s", - t, (const char*) s); - return FALSE ; - } - } - return TRUE ; -} - -bool no_dup_iva_f(TMask_field& f, KEY key) - -{ - if (f.mask().query_mode() || !f.to_check(key)) return TRUE; - return ( gest_iva(f , key , FLD_AF1_STATOPAIV ,FLD_AF1_PAIV ) ) ; -} - -bool no_dup_iva_g(TMask_field& f, KEY key) -{ - if (key == K_ENTER && !f.mask().query_mode() && f.get().empty()) - { - bool ok = FALSE; - if (!f.mask().get_bool(CHK_AG1_ENTENCOMM)) - { - const TString cofi(f.mask().get(FLD_AG1_COFI)); - if (pi_check("IT", cofi)) - { - f.set(cofi); - ok = TRUE; - } - } - if (!ok) return error_box("Partita IVA obbligatoria!"); - } - - return gest_iva(f , key , FLD_AG1_STATOPAIV ,FLD_AG1_PAIV ) ; -} - -TMask* BA4200_application::get_mask(int mode) -{ - if (!changing_mask(mode)) return _msk[tip_msk()]; - if (ana_fis()) - { - if (_msk[MSKG] != NULL) delete _msk[MSKG]; - _msk[MSKG] = NULL; - _msk[MSKF] = new TMask("ba4200b") ; - _msk[MSKF]->set_handler(FLD_AF1_PAIV, no_dup_iva_f); - _msk[MSKF]->set_handler(FLD_AF1_COFI, no_dup_fis); - _msk[MSKF]->set_handler(FLD_AF1_COMRES, gest_uff_imp); - _msk[MSKF]->set_handler(FLD_AF2_COMRF, gest_uff_imp); - _msk[MSKF]->set_handler(F_UFFIIDD, gest_uff_imp_nr); - _msk[MSKF]->set_handler(FLD_AF1_STATORES, gest_nazionalita); - _msk[MSKF]->set_handler(FLD_AF1_PAIV, no_dup_iva_f); - _msk[MSKF]->set_handler(FLD_AF1_COFI, no_dup_fis); - _msk[MSKF]->set_handler(ba4200_handler); - } - else - { - if (_msk[MSKF] != NULL) delete _msk[MSKF]; - _msk[MSKF] = NULL; - _msk[MSKG] = new TMask("ba4200c") ; - _msk[MSKG]->set_handler(FLD_AG2_COMRES, gest_uff_imp); - _msk[MSKG]->set_handler(FLD_AG1_COMRF, gest_uff_imp); - _msk[MSKG]->set_handler(F_UFFIIDD, gest_uff_imp_nr); - _msk[MSKG]->set_handler(FLD_AG1_COFI, no_dup_fis); - _msk[MSKG]->set_handler(FLD_AG1_PAIV, no_dup_iva_g); - _msk[MSKG]->set_handler(ba4200_handler); - } - return _msk[tip_msk()]; -} - -bool BA4200_application::user_create() - -{ - _msk[MSKF] = NULL; - _rel[MSKF] = new TRelation(LF_ANAG); - // _rel[MSKF]->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, 0, 0, TRUE); verificare - _rel[MSKF]->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, 0, 0); - - _msk[MSKG] = NULL; - _rel[MSKG] = new TRelation(LF_ANAG); - // _rel[MSKG]->add(LF_ANAGGIU, "CODANAGR=CODANAGR", 1, 0, 0, TRUE); verificare - _rel[MSKG]->add(LF_ANAGGIU, "CODANAGR=CODANAGR", 1, 0, 0); - - _comuni = new TLocalisamfile(LF_COMUNI) ; - _tabcom = new TLocalisamfile(LF_TABCOM) ; - - return TRUE; -} - -void BA4200_application::write_enable(const bool on) - -{ - _rel[MSKF]->write_enable(-1, on); - _rel[MSKG]->write_enable(-1, on); -} - -bool BA4200_application::user_destroy() -{ - for ( int j = 0 ; j < 2 ; j++ ) - { - if (_msk[j]) delete _msk[j] ; - if (_rel[j]) delete _rel[j] ; - } - delete _comuni; - delete _tabcom; - - return TRUE; -} - -void BA4200_application::manual_save(const TMask& m) - -{ - TRelation *r = get_relation(); - TLocalisamfile& anag = *r->lfile(LF_ANAG) ; - - if (ana_fis()) - { - TLocalisamfile& anafis = *r->lfile(LF_ANAGFIS) ; - - anafis.put(N_CODANAGR, _cod_ana); - } - else - { - TLocalisamfile& anagiu = *r->lfile(LF_ANAGGIU) ; - anagiu.put(N_CODANAGR, _cod_ana); - } - - const TDate oggi(TODAY) ; - anag.put(N_DATAAGG, oggi.string()); -} - -int BA4200_application::read(TMask& m) - -{ - const TRelation *r = get_relation(); - m.autoload(r); - _cod_ana = r->lfile()->get(N_CODANAGR); - return NOERR; -} - -int BA4200_application::write(const TMask& m) - -{ - TRelation *r = get_relation(); - r->zero(); - m.autosave(r); - set_cod_ana(r->lfile()->get(N_CODANAGR)); - manual_save(m); - return r->write(); -} - -int BA4200_application::rewrite(const TMask& m) - -{ - TRelation *r = get_relation(); - - r->zero(); - m.autosave(r); - manual_save(m); - return r->rewrite(); -} - -int ba4200(int argc, char* argv[]) -{ - char ta = 'F'; - if (argc > 2 && toupper(*argv[2]) == 'G') ta = 'G'; - - BA4200_application a(ta); - a.run(argc, argv, "Anagrafica persone fisiche e giuridiche"); - return 0; -} +#include +#include +#include +#include +#include +#include +#include + +#include "ba4.h" +#include "ba4200.h" + +#define FLD_GD1_TIPOA 126 +#define FLD_GD1_CODANAGR 127 +#define FLD_GD1_CODDITTAH 627 + + +class BA4200_application : public TRelation_application +{ + char _tip_ana ; + TString _cod_ana ; + TMask* _msk[2] ; + TRelation* _rel[2]; + TLocalisamfile* _comuni; + TLocalisamfile* _tabcom; + +protected: + virtual bool user_create() ; + virtual bool user_destroy() ; + virtual int read(TMask& m); + virtual int rewrite(const TMask& m); + virtual void init_query_mode(TMask& m); + virtual void init_insert_mode(TMask& m); + virtual void init_modify_mode(TMask& m); + virtual bool changing_mask(int mode) {return _msk[tip_msk()] == NULL;} + virtual const char* get_next_key(); + virtual TMask* get_mask(int mode) ; + virtual void write_enable(const bool on = TRUE); + + static bool ba4200_handler(TMask& m, KEY k); + +public: + virtual int write(const TMask& m); + virtual TRelation* get_relation() const { return _rel[tip_msk()];} + void manual_save(const TMask& m); + int tip_msk() const { return _tip_ana == TFIS ? MSKF : MSKG;} + bool ana_fis() const { return _tip_ana == TFIS;} + bool ana_giu() const { return _tip_ana == TGIU;} + void set_tip_ana(char tip) { _tip_ana = toupper(tip);} + void set_cod_ana(const char* cod) { _cod_ana = cod;} + const char* cod_ana() { return _cod_ana;} + char tip_ana() { return _tip_ana;} + virtual bool force_cursor_usage() const { return TRUE;} + + BA4200_application(char ta) { set_tip_ana(ta); } + virtual ~BA4200_application() {} +}; + +bool BA4200_application::ba4200_handler(TMask& m, KEY k) +{ + BA4200_application& app = (BA4200_application&)main_app(); + + if (k == K_F10) + { + if (app.ana_fis()) app.set_tip_ana(TGIU); + else app.set_tip_ana(TFIS); + m.stop_run(K_ESC); + return FALSE; + } + if (k != K_F5 || m.mode() != MODE_MOD) return TRUE; + TToken_string body(16); + + body.add(format("%d", FLD_GD1_CODDITTAH)); + if ( app.tip_ana() == TFIS ) + { + body.add(format("%d=F", FLD_GD1_TIPOA)); + body.add(format("%d=%s", FLD_GD1_CODANAGR, (const char*) app.cod_ana())); + } + else + { + body.add(format("%d=G", FLD_GD1_TIPOA)); + body.add(format("%d=%s", FLD_GD1_CODANAGR, (const char*) app.cod_ana())); + } +#if XVT_OS == XVT_OS_WIN + TString16 cmd("ba4b -2"); +#else + TString16 cmd("ba4 -2"); +#endif + TMessage msg(cmd2name(cmd), MSG_FS, (const char*) body); + TMailbox mb; + mb.send(msg); + TLocalisamfile& d = app.get_relation()->lfile(); + + d.setkey(1); + d.zero(); + d.put(N_TIPOA, app.ana_fis() ? "F" : "G"); + d.put(N_CODANAGR, m.get(FLD_CODANAGR)); + d.read(_isequal, _unlock) ; + TExternal_app a(cmd); + a.run(); + d.read(_iscurr, _lock) ; + m.set_focus(); + return FALSE; +} + +void BA4200_application::init_query_mode(TMask& m) + +{ + m.disable(DLG_DITTE); + m.enable(DLG_CHGTIP); +} + +const char* BA4200_application::get_next_key() + +{ + TLocalisamfile& anag = get_relation()->lfile() ; + long cod_anagr = 1; + + if (!anag.empty() ) + { + anag.zero() ; + anag.setkey(1) ; + if (ana_fis()) + { + anag.put(N_TIPOA, TGIU); + anag.read(_isgteq) ; + if (anag.good()) anag.prev(); + const char t_ret = anag.get_char(N_TIPOA); + if ( t_ret == TFIS ) + cod_anagr = anag.get_long(N_CODANAGR)+1; + } + else + { + anag.last( ) ; + if (anag.good()) + { + const char t_ret = anag.get_char(N_TIPOA); + if ( t_ret == TGIU ) + cod_anagr = anag.get_long(N_CODANAGR)+1; + } + } + } + _cod_ana.format("%ld", cod_anagr); + return format("%d|%ld", FLD_CODANAGR, cod_anagr); +} + + +void BA4200_application::init_insert_mode(TMask& m) +{ + m.disable(DLG_DITTE); + m.disable(DLG_CHGTIP); +} + + +void BA4200_application::init_modify_mode(TMask& m) +{ + m.enable(DLG_DITTE); + m.disable(DLG_CHGTIP); +} + + +bool gest_nazionalita(TMask_field& f, KEY key) +{ + if (f.mask().query_mode() || key == K_SPACE) return TRUE; + TMask& msk = f.mask() ; + TString nazionalita = (const char*)msk.get(FLD_AF1_STATONASC_TABSTE_S0) ; + + if (f.to_check(key) || nazionalita.empty()) + { + TString cod_stato = (const char* ) f.get() ; + + if ( cod_stato.empty() ) + msk.set(FLD_AF1_STATONASC_TABSTE_S0,"italiana") ; + else + { + TTable t_stati("%STA"); + TRectype& rectab = t_stati.curr() ; + rectab.zero() ; + rectab.put(N_CODTAB, cod_stato); + t_stati.read() ; + if ( t_stati.good() ) + msk.set( FLD_AF1_STATONASC_TABSTE_S0 , rectab.get(N_NAZIONALITA) ) ; + } + } + return TRUE ; +} + +// Handler dell'ufficio imposte dirette +bool gest_uff_imp_nr(TMask_field& f, KEY key) +{ + /* + if (!f.to_check(key)) return TRUE; + + const TString cod_uff(f.get()); + if (cod_uff.empty()) return TRUE; + + TMask& msk = f.mask() ; + TTable uff_imp("%UID"); + + uff_imp.zero() ; + uff_imp.put(N_CODTAB, cod_uff); + uff_imp.read() ; + if ( uff_imp.good() ) + { + const bool giuridica = ((BA4200_application*)main_app())->ana_giu(); + const TFixed_string codcom(uff_imp.get(N_COMUNE)); + const char* com = msk.get(giuridica ? FLD_AG1_COMRF : FLD_AF2_COMRF); + if (*com) + { + if(codcom != com) + return f.error_box("L'ufficio deve appartenere al comune di residenza fiscale: %s", com); + } + else + { + com = msk.get(giuridica ? FLD_AG2_COMRES : FLD_AF1_COMRES); + if(codcom != com) + return f.error_box("L'ufficio deve appartenere al comune di residenza: %s", com); + } + } + */ + return TRUE; +} + + +// Handler del comunde di residenza e residenza fiscale +bool gest_uff_imp(TMask_field& f, KEY key) +{ + if (f.mask().query_mode() || !f.to_check(key, TRUE)) + return TRUE; + + TString cod_sta, cod_com; + TMask& msk = f.mask() ; + const short dlg = f.dlg(); + const bool giuridica = ((BA4200_application&)main_app()).ana_giu(); + + if ( giuridica ) + { + cod_com = msk.get(FLD_AG1_COMRF); + if ((dlg == FLD_AG2_COMRES) || (dlg == FLD_AG2_STATORES)) + if (cod_com.not_empty()) return TRUE; + cod_sta = msk.get(FLD_AG1_STATORF); + } + else + { + cod_com = msk.get(FLD_AF2_COMRF); + if ((dlg == FLD_AF1_COMRES) || (dlg == FLD_AF1_STATORES)) + if (cod_com.not_empty()) return TRUE; + cod_sta = msk.get(FLD_AF2_STATORF); + } + + if (cod_com.empty()) + { + cod_com = msk.get(giuridica ? FLD_AG2_COMRES : FLD_AF1_COMRES) ; + cod_sta = msk.get(giuridica ? FLD_AG2_STATORES : FLD_AF1_STATORES) ; + } + + if (cod_com.empty()) + return TRUE; + + TLocalisamfile comuni(LF_COMUNI) ; + comuni.setkey(1) ; + comuni.zero() ; + comuni.put(N_STATO, cod_sta); + comuni.put(N_COM, cod_com ); + if (comuni.read() == NOERR) + { + msk.set(F_IMP_DENCOM, comuni.get("DENCOM")); + msk.set(F_IMP_PROVCOM, comuni.get("PROVCOM")); + + TString s(comuni.get(N_IMPDIR1)) ; + if (s.empty()) s = comuni.get(N_IMPDIR2) ; + if (s.empty()) s = comuni.get(N_IMPDIR3) ; + msk.set(F_UFFIIDD, s) ; msk.field(F_UFFIIDD).on_key(K_TAB); + msk.set(F_UFFREG, comuni.get("UFFREG")); msk.field(F_UFFREG).on_key(K_TAB); + msk.set(F_UFFCONC, comuni.get("UFFCONC")); msk.field(F_UFFCONC).on_key(K_TAB); + msk.set(F_UFFSERV, comuni.get("UFFCSERV")); msk.field(F_UFFSERV).on_key(K_TAB); + + msk.set(F_CODCONTR_EP, comuni.get("UFFESPROV").mid(1, 2)); + msk.set(F_CODCONTR_EC, comuni.get("UFFESCOM")); + } + + return TRUE; +} + +bool no_dup_fis(TMask_field& f, KEY key) +{ + if (f.mask().query_mode() || !f.to_check(key)) return TRUE; + BA4200_application& app = (BA4200_application&)main_app(); + TLocalisamfile& anag = app.get_relation()->lfile(LF_ANAG) ; + + const TString16 cofi(f.get()); + if ( cofi.not_empty() ) + { + anag.zero() ; + anag.put(N_TIPOA, app.tip_ana()); + anag.put(N_COFI, cofi ) ; + anag.setkey(3) ; + anag.read() ; + anag.setkey(1) ; + const char t = anag.get_char(N_TIPOA), t1 = app.tip_ana(); + const TString16 s = anag.get(N_CODANAGR), s1 = app.cod_ana(); + + if (anag.good() && (t1 != t || s1 != s)) + { + f.error_box("Codice fiscale gia' utilizzato per il codice %c/%s", + t, (const char*)s); + return FALSE; + } + } + return TRUE ; +} + +bool gest_iva(TMask_field& f, KEY key , short fd_sta ,short fd_iva ) +{ + if (f.mask().query_mode() || !f.to_check(key)) return TRUE; + + BA4200_application& app = (BA4200_application&)main_app(); + TLocalisamfile& anag = app.get_relation()->lfile(LF_ANAG) ; + TMask& msk = f.mask() ; + + if ( f.get().not_empty() && !anag.empty() ) + { + anag.zero() ; + anag.put(N_TIPOA, app.tip_ana()); + anag.put(N_STATOPAIV, msk.get(fd_sta) ) ; + anag.put(N_PAIV, msk.get(fd_iva) ) ; + anag.setkey(4) ; + anag.read() ; + anag.setkey(1) ; + const char t = anag.get_char(N_TIPOA), t1 = app.tip_ana(); + const TFixed_string s(anag.get(N_CODANAGR)), s1(app.cod_ana()); + if (anag.good() && (t1 != t || s1 != s)) + { + f.error_box("Partita iva gia' definita per il codice : %c/%s", + t, (const char*) s); + return FALSE ; + } + } + return TRUE ; +} + +bool no_dup_iva_f(TMask_field& f, KEY key) + +{ + if (f.mask().query_mode() || !f.to_check(key)) return TRUE; + return ( gest_iva(f , key , FLD_AF1_STATOPAIV ,FLD_AF1_PAIV ) ) ; +} + +bool no_dup_iva_g(TMask_field& f, KEY key) +{ + if (key == K_ENTER && !f.mask().query_mode() && f.get().empty()) + { + bool ok = FALSE; + if (!f.mask().get_bool(CHK_AG1_ENTENCOMM)) + { + const TString cofi(f.mask().get(FLD_AG1_COFI)); + if (pi_check("IT", cofi)) + { + f.set(cofi); + ok = TRUE; + } + } + if (!ok) return error_box("Partita IVA obbligatoria!"); + } + + return gest_iva(f , key , FLD_AG1_STATOPAIV ,FLD_AG1_PAIV ) ; +} + +TMask* BA4200_application::get_mask(int mode) +{ + if (!changing_mask(mode)) return _msk[tip_msk()]; + if (ana_fis()) + { + if (_msk[MSKG] != NULL) delete _msk[MSKG]; + _msk[MSKG] = NULL; + _msk[MSKF] = new TMask("ba4200b") ; + _msk[MSKF]->set_handler(FLD_AF1_PAIV, no_dup_iva_f); + _msk[MSKF]->set_handler(FLD_AF1_COFI, no_dup_fis); + _msk[MSKF]->set_handler(FLD_AF1_COMRES, gest_uff_imp); + _msk[MSKF]->set_handler(FLD_AF2_COMRF, gest_uff_imp); + _msk[MSKF]->set_handler(F_UFFIIDD, gest_uff_imp_nr); + _msk[MSKF]->set_handler(FLD_AF1_STATORES, gest_nazionalita); + _msk[MSKF]->set_handler(FLD_AF1_PAIV, no_dup_iva_f); + _msk[MSKF]->set_handler(FLD_AF1_COFI, no_dup_fis); + _msk[MSKF]->set_handler(ba4200_handler); + } + else + { + if (_msk[MSKF] != NULL) delete _msk[MSKF]; + _msk[MSKF] = NULL; + _msk[MSKG] = new TMask("ba4200c") ; + _msk[MSKG]->set_handler(FLD_AG2_COMRES, gest_uff_imp); + _msk[MSKG]->set_handler(FLD_AG1_COMRF, gest_uff_imp); + _msk[MSKG]->set_handler(F_UFFIIDD, gest_uff_imp_nr); + _msk[MSKG]->set_handler(FLD_AG1_COFI, no_dup_fis); + _msk[MSKG]->set_handler(FLD_AG1_PAIV, no_dup_iva_g); + _msk[MSKG]->set_handler(ba4200_handler); + } + return _msk[tip_msk()]; +} + +bool BA4200_application::user_create() + +{ + _msk[MSKF] = NULL; + _rel[MSKF] = new TRelation(LF_ANAG); + // _rel[MSKF]->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, 0, 0, TRUE); verificare + _rel[MSKF]->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, 0, 0); + + _msk[MSKG] = NULL; + _rel[MSKG] = new TRelation(LF_ANAG); + // _rel[MSKG]->add(LF_ANAGGIU, "CODANAGR=CODANAGR", 1, 0, 0, TRUE); verificare + _rel[MSKG]->add(LF_ANAGGIU, "CODANAGR=CODANAGR", 1, 0, 0); + + _comuni = new TLocalisamfile(LF_COMUNI) ; + _tabcom = new TLocalisamfile(LF_TABCOM) ; + + return TRUE; +} + +void BA4200_application::write_enable(const bool on) + +{ + _rel[MSKF]->write_enable(-1, on); + _rel[MSKG]->write_enable(-1, on); +} + +bool BA4200_application::user_destroy() +{ + for ( int j = 0 ; j < 2 ; j++ ) + { + if (_msk[j]) delete _msk[j] ; + if (_rel[j]) delete _rel[j] ; + } + delete _comuni; + delete _tabcom; + + return TRUE; +} + +void BA4200_application::manual_save(const TMask& m) + +{ + TRelation *r = get_relation(); + TLocalisamfile& anag = r->lfile(LF_ANAG) ; + + if (ana_fis()) + { + TLocalisamfile& anafis = r->lfile(LF_ANAGFIS) ; + + anafis.put(N_CODANAGR, _cod_ana); + } + else + { + TLocalisamfile& anagiu = r->lfile(LF_ANAGGIU) ; + anagiu.put(N_CODANAGR, _cod_ana); + } + + const TDate oggi(TODAY) ; + anag.put(N_DATAAGG, oggi.string()); +} + +int BA4200_application::read(TMask& m) + +{ + const TRelation *r = get_relation(); + m.autoload(r); + _cod_ana = r->lfile().get(N_CODANAGR); + return NOERR; +} + +int BA4200_application::write(const TMask& m) + +{ + TRelation *r = get_relation(); + r->zero(); + m.autosave(r); + set_cod_ana(r->lfile().get(N_CODANAGR)); + manual_save(m); + return r->write(); +} + +int BA4200_application::rewrite(const TMask& m) + +{ + TRelation *r = get_relation(); + + r->zero(); + m.autosave(r); + manual_save(m); + return r->rewrite(); +} + +int ba4200(int argc, char* argv[]) +{ + char ta = 'F'; + if (argc > 2 && toupper(*argv[2]) == 'G') ta = 'G'; + + BA4200_application a(ta); + + TString80 titolo("Anagrafica Persone "); + titolo << (ta == 'F' ? "Fisiche" : "Giuridiche"); + + a.run(argc, argv, titolo); + return 0; +} diff --git a/ba/ba4300.cpp b/ba/ba4300.cpp index fb8fb7476..502575627 100755 --- a/ba/ba4300.cpp +++ b/ba/ba4300.cpp @@ -1,424 +1,423 @@ -#include -#include -#include -#include -#include -#include -#include - -#if XVT_OS == XVT_OS_SCOUNIX -#include -#else -#include -#endif - -#include "ba4.h" -#include "ba4300.h" - -#define FLD_UL1_CODDITTA 133 -#define FLD_UL1_CODDITTA_NDITTE_RAGSOC 100 -#define FLD_AT1_CODDITTA 102 -#define FLD_AT1_CODDITTAH 198 -#define FLD_AT1_PROGD_NDITTE_RAGSOC 105 -#define FLD_SC1_CODDITTA 143 -#define FLD_SC1_CODANAGRSOH 147 -#define FLD_SC1_CODDITTA_NDITTE_RAGSOC 144 -#define FLD_UL1_CODULC 125 - -const char* CODDITTA = "CODDITTA"; -const char* CODATTPREV = "CODATTPREV"; -const char* TIPOA = "TIPOA"; -const char* CODANAGR = "CODANAGR"; - -const char* CODATT = "CODATT"; - -const char* COMRF = "COMRF"; -const char* INDRF = "INDRF"; -const char* CIVRF = "CIVRF"; -const char* CAPRF = "CAPRF"; -const char* COMRES = "COMRES"; -const char* INDRES = "INDRES"; -const char* CIVRES = "CIVRES"; -const char* CAPRES = "CAPRES"; - -const char* CODULC = "CODULC"; -const char* COMULC = "COMULC"; -const char* INDULC = "INDULC"; -const char* CIVULC = "CIVULC"; -const char* CAPULC = "CAPULC"; -const char* COMCCIAA = "COMCCIAA"; -const char* COMTRIB = "COMTRIB"; - -#define TABATT "%ais" -#define CODTAB "CODTAB" -#define S0 "S0" -#define DESCR "DESCR" - -class BA4300_application : public TRelation_application -{ - TMask* _msk; - TRelation *_rel; - TLocalisamfile* _anag; - TLocalisamfile* _unloc; - TLocalisamfile* _attiv; - TLocalisamfile* _tabcom; - -protected: - bool user_create() ; - bool user_destroy() ; - virtual TMask* get_mask(int) { return _msk;} - virtual bool changing_mask(int) { return FALSE;} - virtual void init_query_mode(TMask& m) ; - virtual void init_insert_mode(TMask& m) ; - virtual void init_modify_mode(TMask& m) ; - - bool build_firm_data(long cod, bool flagcom); - -public: - BA4300_application(); - virtual TRelation* get_relation() const { return _rel;} - virtual int write(const TMask& m); - virtual ~BA4300_application() {} -}; - -bool ba4300_handler(TMask& m, KEY k) - -{ - if (k != K_F5 && k != K_F6 && k != K_F7 && k != K_F8) - return TRUE; - if (m.mode() == MODE_MOD || m.mode() == MODE_INS) - { - BA4300_application* app = (BA4300_application*) MainApp(); - if (m.mode() == MODE_INS) - { - if (!m.check_fields()) return FALSE; - if (app->write(m) != NOERR) return TRUE; - m.stop_run(K_ESC); - } - TString appname; - int fld = 0, fld1 = 0, fldbrowse = 0; - - if (k == K_F5) - { - appname = "ba4 -3"; - fld = FLD_UL1_CODDITTA; - fld1 = FLD_UL1_CODDITTA_NDITTE_RAGSOC; - fldbrowse = FLD_UL1_CODULC; - } - if (k == K_F6) - { - appname = "ba4 -4"; - fld = FLD_AT1_CODDITTA; - fld1 = FLD_AT1_PROGD_NDITTE_RAGSOC; - fldbrowse = FLD_AT1_CODDITTAH; - } - if (k == K_F7) - { - appname = "ba4 -5"; - fld = FLD_SC1_CODDITTA; - fld1 = FLD_SC1_CODDITTA_NDITTE_RAGSOC; - fldbrowse = FLD_SC1_CODANAGRSOH; - } - if (k == K_F8) { appname = "ba3 -0 reg"; fld = 0;fldbrowse = 0;} - if (appname.not_empty()) - { - TString body(16); - TLocalisamfile* d = app->get_relation()->lfile(); - -#if XVT_OS == XVT_OS_WIN - if (k != K_F8) appname.insert("a", 3); -#endif - if (fldbrowse) - body << fldbrowse << "|"; - if (fld) - body << fld << "=" << m.get(FLD_GD1_CODDITTA) ; - if (fld1) - body << "|" << fld1 << "=" ; - if (fldbrowse || fld) - { - TMessage msg(cmd2name(appname), MSG_FS, (const char*) body); - - TMailbox mb; - mb.send(msg); - } - d->setkey(1); - d->zero(); - d->put("CODDITTA", m.get(FLD_GD1_CODDITTA)); - d->read(_isequal, _unlock) ; - TExternal_app a(appname); - long oldditta = prefhndl->get_codditta(); - if (k == K_F8) prefhndl->set_codditta(atol(m.get(FLD_GD1_CODDITTA)), TRUE); - a.run(); - if (k == K_F8) prefhndl->set_codditta(oldditta, TRUE); - d->read(_iscurr, _lock) ; - m.set_focus(); - return FALSE; - } - } - return TRUE; -} - - -bool BA4300_application::build_firm_data(long codditta, bool flagcom) - -{ - const TString ndir(firm2dir(codditta)); - const char* ntrrec = "trc.gen"; - const TFilename s1(format("%s/%s", (const char*) ndir, ntrrec)); - const char* nd = "dir.gen"; - const TFilename s2(format("%s/%s", (const char*) ndir, nd)); - - if (fexist(s1) && fexist(s2)) - return TRUE; - if (fexist(ndir)) - { - const bool ok = yesno_box("Direttorio %s esistente, lo ricostruisco", (const char*) ndir); - if (!ok) return TRUE; - } - else -#if XVT_OS == XVT_OS_SCOUNIX - if (mkdir(ndir, 0777) == -1) -#else - if (mkdir(ndir) == -1) -#endif - return error_box("non posso creare il direttorio della ditta %ld (%s)", - codditta, (const char*) ndir); - if (!fexist(s1)) - if (!fcopy(ntrrec, s1)) - return error_box("non posso copiare il file %s della ditta %ld", - ntrrec, codditta); - if (!fexist(s2)) - if (!fcopy(nd, s2)) - return error_box("non posso copiare il file %s della ditta %ld", - nd, codditta); - - set_cursor(TASK_WIN, CURSOR_WAIT); - const long old_firm = get_firm(); - TDir dir, dir1; - TTrec rec; - - prefhndl->set(""); - dir1.get(LF_DIR, _nolock, _nordir, _sysdirop); - const long maxeod0 = dir1.eod(); - - prefhndl->set_codditta(codditta); - dir.get(LF_DIR, _nolock, _nordir, _sysdirop); - if (dir.eod() == 0) - { - dir1.eod() = 1L; - dir1.put(LF_DIR, _nordir, _sysdirop); - dir.get(LF_DIR, _nolock, _nordir, _sysdirop); - } - const long maxeod1 = dir.eod(); - - if (maxeod0 > maxeod1) - { - dir.get(LF_DIR, _nolock, _nordir, _sysdirop); - dir.eod() = maxeod0; - dir.put(LF_DIR, _nordir, _sysdirop); - rec.zero(); - } - for (int i = LF_DIR + 1; i <= maxeod0; i++) - { - dir.get(i, _nolock, _nordir, _sysdirop); - if (dir.eod() == 0L && dir.eox() == 0L) - { - prefhndl->set(""); - dir.get(i, _nolock, _nordir, _sysdirop); - rec.get(i); - prefhndl->set_codditta(codditta); - const char* name = dir.name(); - dir.flags() = 0L; - const bool valid_file = *name && dir.len() > 0; - const bool create_now = flagcom ? *name == '%' : *name != '%'; - if (valid_file && create_now) - { - dir.put(i, _nordir, _sysdirop); - rec.put(i); - TSystemisamfile f(i); - - f.build(30); // cambiare - BA4300_application* app = (BA4300_application*) MainApp(); - for (int j = 0 ; j < 99 ; j++) - { - if (app->has_module(j)) - { - const TString s(format("std/f%04d%02d.txt", i, j)); - if (fexist(s)) f.load(s); - } - } - } - else - { - if (!flagcom) - { - dir.len() = 0; - rec.zero(); - } - dir.put(i, _nordir, _sysdirop); - rec.put(i); - } - } - } - - set_firm(old_firm); - set_cursor(TASK_WIN, CURSOR_ARROW); - return TRUE; -} - - -BA4300_application::BA4300_application() -{} - - -bool BA4300_application::user_create() // initvar e arrmask -{ - _msk = new TMask("ba4300a") ; - _msk->set_handler(ba4300_handler); - _rel = new TRelation(LF_NDITTE); - _anag = new TLocalisamfile(LF_ANAG); - _unloc = new TLocalisamfile(LF_UNLOC); - _attiv = new TLocalisamfile(LF_ATTIV); - _tabcom = new TLocalisamfile(LF_TABCOM); - set_search_field(FLD_GD1_CODDITTA); - return TRUE; -} - - -bool BA4300_application::user_destroy() // releasev e arrmask -{ - delete _msk; - delete _rel; - delete _anag; - delete _unloc; - delete _attiv; - delete _tabcom; - return TRUE; -} - - -int BA4300_application::write(const TMask& m) -{ - _rel->zero(); - m.autosave(); - _rel->write(); - if (_rel->bad()) - return _rel->status(); - - TRectype& ditte=_rel->curr(); - - TString codditta(ditte.get(CODDITTA)) ; - - _attiv->zero() ; - _attiv->put(CODDITTA, (const char*) codditta) ; - _attiv->put(CODATT, ditte.get(CODATTPREV)) ; - - TTable* tabatt = new TTable(TABATT); - tabatt->zero(); - tabatt->put(CODTAB, ditte.get(CODATTPREV)) ; - tabatt->read(); - if (tabatt->good()) _attiv->put(DESCR, tabatt->curr().get(S0)) ; - delete tabatt; - - _attiv->write(); - - _anag->zero() ; - _anag->put(TIPOA, ditte.get(TIPOA)); - _anag->put(CODANAGR, ditte.get(CODANAGR)); - _anag->read(); - if (_anag->good()) - { - _unloc->zero() ; - _unloc->put(CODDITTA, (const char*) codditta) ; - _unloc->put(CODULC, (int) 1) ; - TString s(_anag->get(COMRF)); - if (s.empty()) - { - _unloc->put(COMULC, _anag->get(COMRES)); - _unloc->put(INDULC, _anag->get(INDRES)); - _unloc->put(CIVULC, _anag->get(CIVRES)); - _unloc->put(CAPULC, _anag->get(CAPRES)); - _unloc->put(COMCCIAA, _anag->get(COMRES)); - _unloc->put(COMTRIB, _anag->get(COMRES)); - } - else - { - _unloc->put(COMULC, (const char*) s); - _unloc->put(INDULC, _anag->get(INDRF)); - _unloc->put(CIVULC, _anag->get(CIVRF)); - _unloc->put(CAPULC, _anag->get(CAPRF)); - _unloc->put(COMCCIAA, (const char*) s); - _unloc->put(COMTRIB, (const char*) s); - } - _unloc->write(); - } - build_firm_data(atol(codditta), FALSE); - return NOERR; -} - - -void BA4300_application::init_query_mode(TMask& m) -{ - if (filtered()) - { - m.show(FLD_GD1_CODDITTAH); - m.hide(FLD_GD1_CODDITTA); - } - else - { - m.show(FLD_GD1_CODDITTA); - m.hide(FLD_GD1_CODDITTAH); - } - init_insert_mode(m); -} - -void BA4300_application::init_insert_mode(TMask& m) -{ - if (!filtered()) - { - m.enable(FLD_GD1_TIPOA); - m.enable(FLD_GD1_CODANAGR); - m.enable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); - m.show(FLD_GD1_CODDITTA); - m.hide(FLD_GD1_CODDITTAH); - } - else - { - m.show(FLD_GD1_CODDITTAH); - m.hide(FLD_GD1_CODDITTA); - } - m.disable(DLG_ATT); - m.disable(DLG_ULC); - m.disable(DLG_SOC); - m.disable(DLG_REG); -} - -void BA4300_application::init_modify_mode(TMask& m) -{ - m.disable(FLD_GD1_TIPOA); - m.disable(FLD_GD1_CODANAGR); - m.disable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); - if (filtered()) - { - m.show(FLD_GD1_CODDITTAH); - m.hide(FLD_GD1_CODDITTA); - } - else - { - m.show(FLD_GD1_CODDITTA); - m.hide(FLD_GD1_CODDITTAH); - } - m.enable(DLG_ATT); - m.enable(DLG_ULC); - m.enable(DLG_SOC); - m.enable(DLG_REG); -} - -int ba4300(int argc, char* argv[]) -{ - - BA4300_application a ; - a.run(argc, argv, "Anagrafica Ditta"); - return 0; -} - +#include +#include +#include +#include +#include +#include +#include + +#if XVT_OS == XVT_OS_SCOUNIX +#include +#else +#include +#endif + +#include "ba4.h" +#include "ba4300.h" + +#define FLD_UL1_CODDITTA 133 +#define FLD_UL1_CODDITTA_NDITTE_RAGSOC 100 +#define FLD_AT1_CODDITTA 102 +#define FLD_AT1_CODDITTAH 198 +#define FLD_AT1_PROGD_NDITTE_RAGSOC 105 +#define FLD_SC1_CODDITTA 143 +#define FLD_SC1_CODANAGRSOH 147 +#define FLD_SC1_CODDITTA_NDITTE_RAGSOC 144 +#define FLD_UL1_CODULC 125 + +const char* CODDITTA = "CODDITTA"; +const char* CODATTPREV = "CODATTPREV"; +const char* TIPOA = "TIPOA"; +const char* CODANAGR = "CODANAGR"; + +const char* CODATT = "CODATT"; + +const char* COMRF = "COMRF"; +const char* INDRF = "INDRF"; +const char* CIVRF = "CIVRF"; +const char* CAPRF = "CAPRF"; +const char* COMRES = "COMRES"; +const char* INDRES = "INDRES"; +const char* CIVRES = "CIVRES"; +const char* CAPRES = "CAPRES"; + +const char* CODULC = "CODULC"; +const char* COMULC = "COMULC"; +const char* INDULC = "INDULC"; +const char* CIVULC = "CIVULC"; +const char* CAPULC = "CAPULC"; +const char* COMCCIAA = "COMCCIAA"; +const char* COMTRIB = "COMTRIB"; + +#define TABATT "%ais" +#define CODTAB "CODTAB" +#define S0 "S0" +#define DESCR "DESCR" + +class BA4300_application : public TRelation_application +{ + TMask* _msk; + TRelation *_rel; + TLocalisamfile* _anag; + TLocalisamfile* _unloc; + TLocalisamfile* _attiv; + TLocalisamfile* _tabcom; + +protected: + bool user_create() ; + bool user_destroy() ; + virtual TMask* get_mask(int) { return _msk;} + virtual bool changing_mask(int) { return FALSE;} + virtual void init_query_mode(TMask& m) ; + virtual void init_insert_mode(TMask& m) ; + virtual void init_modify_mode(TMask& m) ; + + bool build_firm_data(long cod, bool flagcom); + +public: + BA4300_application(); + virtual TRelation* get_relation() const { return _rel;} + virtual int write(const TMask& m); + virtual ~BA4300_application() {} +}; + +bool ba4300_handler(TMask& m, KEY k) + +{ + if (k != K_F5 && k != K_F6 && k != K_F7 && k != K_F8) + return TRUE; + if (m.mode() == MODE_MOD || m.mode() == MODE_INS) + { + BA4300_application& app = (BA4300_application&)main_app(); + if (m.mode() == MODE_INS) + { + if (!m.check_fields()) return FALSE; + if (app.write(m) != NOERR) return TRUE; + m.stop_run(K_ESC); + } + TString appname; + int fld = 0, fld1 = 0, fldbrowse = 0; + + if (k == K_F5) + { + appname = "ba4 -3"; + fld = FLD_UL1_CODDITTA; + fld1 = FLD_UL1_CODDITTA_NDITTE_RAGSOC; + fldbrowse = FLD_UL1_CODULC; + } + if (k == K_F6) + { + appname = "ba4 -4"; + fld = FLD_AT1_CODDITTA; + fld1 = FLD_AT1_PROGD_NDITTE_RAGSOC; + fldbrowse = FLD_AT1_CODDITTAH; + } + if (k == K_F7) + { + appname = "ba4 -5"; + fld = FLD_SC1_CODDITTA; + fld1 = FLD_SC1_CODDITTA_NDITTE_RAGSOC; + fldbrowse = FLD_SC1_CODANAGRSOH; + } + if (k == K_F8) { appname = "ba3 -0 reg"; fld = 0;fldbrowse = 0;} + if (appname.not_empty()) + { + TString body(16); + TLocalisamfile& d = app.get_relation()->lfile(); + +#if XVT_OS == XVT_OS_WIN + if (k != K_F8) appname.insert("a", 3); +#endif + if (fldbrowse) + body << fldbrowse << "|"; + if (fld) + body << fld << "=" << m.get(FLD_GD1_CODDITTA) ; + if (fld1) + body << "|" << fld1 << "=" ; + if (fldbrowse || fld) + { + TMessage msg(cmd2name(appname), MSG_FS, (const char*) body); + + TMailbox mb; + mb.send(msg); + } + d.setkey(1); + d.zero(); + d.put("CODDITTA", m.get(FLD_GD1_CODDITTA)); + d.read(_isequal, _unlock) ; + TExternal_app a(appname); + const long oldditta = main_app().get_firm(); + if (k == K_F8) main_app().set_firm(m.get_long(FLD_GD1_CODDITTA)); + a.run(); + if (k == K_F8) main_app().set_firm(oldditta); + d.read(_iscurr, _lock) ; + m.set_focus(); + return FALSE; + } + } + return TRUE; +} + + +bool BA4300_application::build_firm_data(long codditta, bool flagcom) + +{ + const TString ndir(firm2dir(codditta)); + const char* ntrrec = "trc.gen"; + const TFilename s1(format("%s/%s", (const char*) ndir, ntrrec)); + const char* nd = "dir.gen"; + const TFilename s2(format("%s/%s", (const char*) ndir, nd)); + + if (fexist(s1) && fexist(s2)) + return TRUE; + if (fexist(ndir)) + { + const bool ok = yesno_box("Direttorio %s esistente, lo ricostruisco", (const char*) ndir); + if (!ok) return TRUE; + } + else +#if XVT_OS == XVT_OS_SCOUNIX + if (mkdir(ndir, 0777) == -1) +#else + if (mkdir(ndir) == -1) +#endif + return error_box("Impossibile creare il direttorio della ditta %ld (%s)", + codditta, (const char*) ndir); + if (!fexist(s1)) + if (!fcopy(ntrrec, s1)) + return error_box("Impossibile copiare il file %s della ditta %ld", + ntrrec, codditta); + if (!fexist(s2)) + if (!fcopy(nd, s2)) + return error_box("Impossibile copiare il file %s della ditta %ld", + nd, codditta); + + set_cursor(TASK_WIN, CURSOR_WAIT); + const long old_firm = get_firm(); + TDir dir, dir1; + TTrec rec; + + prefhndl->set(""); + dir1.get(LF_DIR, _nolock, _nordir, _sysdirop); + const long maxeod0 = dir1.eod(); + + prefhndl->set_codditta(codditta); + dir.get(LF_DIR, _nolock, _nordir, _sysdirop); + if (dir.eod() == 0) + { + dir1.eod() = 1L; + dir1.put(LF_DIR, _nordir, _sysdirop); + dir.get(LF_DIR, _nolock, _nordir, _sysdirop); + } + const long maxeod1 = dir.eod(); + + if (maxeod0 > maxeod1) + { + dir.get(LF_DIR, _nolock, _nordir, _sysdirop); + dir.eod() = maxeod0; + dir.put(LF_DIR, _nordir, _sysdirop); + rec.zero(); + } + for (int i = LF_DIR + 1; i <= maxeod0; i++) + { + dir.get(i, _nolock, _nordir, _sysdirop); + if (dir.eod() == 0L && dir.eox() == 0L) + { + prefhndl->set(""); + dir.get(i, _nolock, _nordir, _sysdirop); + rec.get(i); + prefhndl->set_codditta(codditta); + const char* name = dir.name(); + dir.flags() = 0L; + const bool valid_file = *name && dir.len() > 0; + const bool create_now = flagcom ? *name == '%' : *name != '%'; + if (valid_file && create_now) + { + dir.put(i, _nordir, _sysdirop); + rec.put(i); + TSystemisamfile f(i); + + f.build(30); // cambiare + BA4300_application& app = (BA4300_application&) main_app(); + for (int j = 0 ; j < 99 ; j++) + { + if (app.has_module(j)) + { + const TString s(format("std/f%04d%02d.txt", i, j)); + if (fexist(s)) f.load(s); + } + } + } + else + { + if (!flagcom) + { + dir.len() = 0; + rec.zero(); + } + dir.put(i, _nordir, _sysdirop); + rec.put(i); + } + } + } + + set_firm(old_firm); + set_cursor(TASK_WIN, CURSOR_ARROW); + return TRUE; +} + + +BA4300_application::BA4300_application() +{} + + +bool BA4300_application::user_create() // initvar e arrmask +{ + _msk = new TMask("ba4300a") ; + _msk->set_handler(ba4300_handler); + _rel = new TRelation(LF_NDITTE); + _anag = new TLocalisamfile(LF_ANAG); + _unloc = new TLocalisamfile(LF_UNLOC); + _attiv = new TLocalisamfile(LF_ATTIV); + _tabcom = new TLocalisamfile(LF_TABCOM); + set_search_field(FLD_GD1_CODDITTA); + return TRUE; +} + + +bool BA4300_application::user_destroy() // releasev e arrmask +{ + delete _msk; + delete _rel; + delete _anag; + delete _unloc; + delete _attiv; + delete _tabcom; + return TRUE; +} + + +int BA4300_application::write(const TMask& m) +{ + _rel->zero(); + m.autosave(); + _rel->write(); + if (_rel->bad()) + return _rel->status(); + + TRectype& ditte=_rel->curr(); + + TString codditta(ditte.get(CODDITTA)) ; + + _attiv->zero() ; + _attiv->put(CODDITTA, (const char*) codditta) ; + _attiv->put(CODATT, ditte.get(CODATTPREV)) ; + + TTable* tabatt = new TTable(TABATT); + tabatt->zero(); + tabatt->put(CODTAB, ditte.get(CODATTPREV)) ; + tabatt->read(); + if (tabatt->good()) _attiv->put(DESCR, tabatt->curr().get(S0)) ; + delete tabatt; + + _attiv->write(); + + _anag->zero() ; + _anag->put(TIPOA, ditte.get(TIPOA)); + _anag->put(CODANAGR, ditte.get(CODANAGR)); + _anag->read(); + if (_anag->good()) + { + _unloc->zero() ; + _unloc->put(CODDITTA, (const char*) codditta) ; + _unloc->put(CODULC, (int) 1) ; + TString s(_anag->get(COMRF)); + if (s.empty()) + { + _unloc->put(COMULC, _anag->get(COMRES)); + _unloc->put(INDULC, _anag->get(INDRES)); + _unloc->put(CIVULC, _anag->get(CIVRES)); + _unloc->put(CAPULC, _anag->get(CAPRES)); + _unloc->put(COMCCIAA, _anag->get(COMRES)); + _unloc->put(COMTRIB, _anag->get(COMRES)); + } + else + { + _unloc->put(COMULC, (const char*) s); + _unloc->put(INDULC, _anag->get(INDRF)); + _unloc->put(CIVULC, _anag->get(CIVRF)); + _unloc->put(CAPULC, _anag->get(CAPRF)); + _unloc->put(COMCCIAA, (const char*) s); + _unloc->put(COMTRIB, (const char*) s); + } + _unloc->write(); + } + build_firm_data(atol(codditta), FALSE); + return NOERR; +} + + +void BA4300_application::init_query_mode(TMask& m) +{ + if (filtered()) + { + m.show(FLD_GD1_CODDITTAH); + m.hide(FLD_GD1_CODDITTA); + } + else + { + m.show(FLD_GD1_CODDITTA); + m.hide(FLD_GD1_CODDITTAH); + } + init_insert_mode(m); +} + +void BA4300_application::init_insert_mode(TMask& m) +{ + if (!filtered()) + { + m.enable(FLD_GD1_TIPOA); + m.enable(FLD_GD1_CODANAGR); + m.enable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); + m.show(FLD_GD1_CODDITTA); + m.hide(FLD_GD1_CODDITTAH); + } + else + { + m.show(FLD_GD1_CODDITTAH); + m.hide(FLD_GD1_CODDITTA); + } + m.disable(DLG_ATT); + m.disable(DLG_ULC); + m.disable(DLG_SOC); + m.disable(DLG_REG); +} + +void BA4300_application::init_modify_mode(TMask& m) +{ + m.disable(FLD_GD1_TIPOA); + m.disable(FLD_GD1_CODANAGR); + m.disable(FLD_GD1_CODANAGR_ANAGR_RAGSOC); + if (filtered()) + { + m.show(FLD_GD1_CODDITTAH); + m.hide(FLD_GD1_CODDITTA); + } + else + { + m.show(FLD_GD1_CODDITTA); + m.hide(FLD_GD1_CODDITTAH); + } + m.enable(DLG_ATT); + m.enable(DLG_ULC); + m.enable(DLG_SOC); + m.enable(DLG_REG); +} + +int ba4300(int argc, char* argv[]) +{ + BA4300_application a ; + a.run(argc, argv, "Anagrafica Ditte"); + return 0; +} + diff --git a/ba/ba6100.cpp b/ba/ba6100.cpp index 6cfaca70f..837aea2f8 100755 --- a/ba/ba6100.cpp +++ b/ba/ba6100.cpp @@ -1,566 +1,565 @@ -// ********************************************************************** -// Stampa anagrafiche -// Control code -// *********************************************************************** - -#include "ba6100.h" -#include -#include -#include - -// ------- utils -------------------------------------------- - - -TRectype& BA6100_App::look_com(const char* cod) -{ - _comuni->curr().zero(); - if (*cod) - { - _comuni->curr().put("COM",cod); - _comuni->read(); - if (_comuni->bad()) - _comuni->curr().zero(); - } - return _comuni->curr(); -} - -const char* BA6100_App::look_tab(const char* tabname, const char* cod, - const char* fld) -{ - if (*cod == 0) return ""; - TTable tab(tabname); - tab.curr().zero(); - tab.curr().put("CODTAB",cod); - tab.read(); - if (tab.bad()) tab.curr().zero(); - return tab.curr().get(fld); -} - -// link - -void BA6100_App::process_link(int id, const char* txt) -{ - if (id == _ana_link) - { - TString80 ss = "1|"; ss << txt; - TMessage fs(cmd2name("ba4","-1"), MSG_LN, ss); - TMailbox m; - m.send(fs); - TExternal_app ba4(_pr_what == anafis ? "ba4 -1 F" : "ba4 -1 G"); - if (ba4.run()) beep(); - } - else if (id == _dit_link) - { - TString80 ss = "1|"; ss << txt << "|" << txt; - TMessage fs(cmd2name("ba4","-2"), MSG_LN, ss); - fs.send(); - TExternal_app ba4("ba4 -2"); - if (ba4.run()) beep(); - } -} - -// ---- here we go ------------------------------------------------- - -void BA6100_App::set_page(int file, int cnt) -{ - switch(file) - { - case LF_ANAG: - case LF_NDITTE: - if (_pr_type == elenco) - { - if (_pr_what != nditte && file == LF_NDITTE) - { - set_row(1,"@50g$[r]@pN$[n]@66g@S", FLD(LF_NDITTE,"CODDITTA","@@@@@"), - FLD(LF_NDITTE,"RAGSOC")); - set_row(2,""); - } - else - set_elenco(); - } - else if (_pr_type == rubriche) set_rubriche(); - else if (_pr_type == schede) - { - if (_pr_what != nditte && file == LF_NDITTE) - set_scheda_ditta(); - else - set_schede(); - } - else if (_pr_type == etichette) set_etichette(); - break; - case LF_ATTIV: - set_scheda_attiv(); - break; - case LF_UNLOC: - set_scheda_unloc(); - break; - case LF_SOCI: - set_scheda_socio(); - break; - } -} - - -bool BA6100_App::preprocess_page(int file, int counter) -{ - // non stampa la prima ditta se sta facendo l'elenco visto - // che la stampa a fianco dell'anagrafica - if (file == LF_NDITTE && _pr_type == elenco && _inclditte - && _pr_what != nditte) - if (current_cursor()->is_first_match(LF_NDITTE)) - return FALSE; - - if (_pr_type == rubriche) - { - // vale per ditte, anagiu, anafis - _com = current_cursor()->curr(LF_ANAG).get("COMRES"); - if (_com.empty()) - _com = current_cursor()->curr(LF_ANAG).get("COMRF"); - _phone = current_cursor()->curr(LF_ANAG).get("PTELRF"); - _phone.trim(); - if (!_phone.empty()) _phone << '/'; - _phone << current_cursor()->curr(LF_ANAG).get("TELRF"); - - TRectype& cc = look_com(_com); - _com = cc.get("DENCOM"); - _cap = cc.get("CAPCOM"); - _prov = cc.get("PROVCOM"); - } - else if (_pr_type == etichette) - preprocess_etichette(); - return TRUE; -} - - -bool mask_reset_fields(TMask_field& mf, KEY k) -{ - if (k == K_SPACE) - { - BA6100_App* a = (BA6100_App*)MainApp(); - mf.mask().field(FLD_BA6B_INDROW).set(format("%d",a->_ind_row)); - mf.mask().field(FLD_BA6B_INDCOL).set(format("%d",a->_ind_col)); - mf.mask().field(FLD_BA6B_PIVROW).set(format("%d",a->_piv_row)); - mf.mask().field(FLD_BA6B_PIVCOL).set(format("%d",a->_piv_col)); - mf.mask().field(FLD_BA6B_CODROW).set(format("%d",a->_cod_row)); - mf.mask().field(FLD_BA6B_CODCOL).set(format("%d",a->_cod_col)); - mf.mask().field(FLD_BA6B_TOTROW).set(format("%d",a->_rows_et)); - mf.mask().field(FLD_BA6B_TOTCOL).set(format("%d",a->_cols_et)); - mf.mask().field(CHK_BA6B_PIVA).set(a->_is_piv ? "X" : " "); - mf.mask().field(CHK_BA6B_CODICE).set(a->_is_cod ?"X": " "); - } - return TRUE; -} - - -void BA6100_App::preprocess_etichette() -{ - // everything goes into strings - _name = get_field(LF_ANAG,"RAGSOC"); - _cod = get_field(LF_ANAG,"CODANAGR"); - _cofi = get_field(LF_ANAG,"COFI"); - TRectype& cc = look_com(get_field(LF_ANAG,"COMCORR")); - if (_cofi.empty()) - _cofi = get_field(LF_ANAG,"PAIV"); - - if (_pr_what == anafis) - { - _surname = _name.mid(30); _surname.trim(); - _name = _name.cut(30); _name.trim(); - _sex = get_field(LF_ANAGFIS,"SESSO")[0] == 'M' ? "Sig." : "Sig.ra"; - } - switch (_ind_what) - { - case corrispondenza: - _address = get_field(LF_ANAG,"INDCORR"); - _civ = get_field(LF_ANAG,"CIVCORR"); - _stato = look_tab("%STA",get_field(LF_ANAG,"STATOCORR")); - _cap = get_field(LF_ANAG,"CAPCORR"); - _com = cc.get("DENCOM"); - _prov = cc.get("PROVCOM"); - if (_cap.empty()) - _cap = cc.get("CAPCOM"); - if (!_address.empty()) - break; - // else fall down - case domfisc: - _address = get_field(LF_ANAG,"INDRF"); - _civ = get_field(LF_ANAG,"CIVRF"); - _stato = look_tab("%STA",get_field(LF_ANAG,"STATORF")); - _cap = get_field(LF_ANAG,"CAPRF"); - cc = look_com(get_field(LF_ANAG,"COMRF")); - _com = cc.get("DENCOM"); - _prov = cc.get("PROVCOM"); - if (_cap.empty()) - _cap = cc.get("CAPCOM"); - if (!_address.empty()) - break; - // else fall down - case residenza: - _address = get_field(LF_ANAG,"INDRES"); - _civ = get_field(LF_ANAG,"CIVRES"); - _stato = look_tab("%STA",get_field(LF_ANAG,"STATORES")); - _cap = get_field(LF_ANAG,"CAPRES"); - cc = look_com(get_field(LF_ANAG,"COMRES")); - _com = cc.get("DENCOM"); - _prov = cc.get("PROVCOM"); - if (_cap.empty()) - _cap = cc.get("CAPCOM"); - break; - } -} - - -void BA6100_App::init_print() -{ - reset_print(); - reset_files(); - - // select cursor and main file - switch(_pr_what) - { - case anafis: - select_cursor(cfis()); - add_file(LF_ANAG); - break; - case anagiu: - select_cursor(cgiu()); - add_file(LF_ANAG); - break; - case nditte: - select_cursor(cdit()); - add_file(LF_NDITTE); - break; - } - - force_setpage(_pr_type == schede); - - // setup secondary links - if (_inclditte) - { - switch(_pr_type) - { - case elenco: - if (_pr_what != nditte) - add_file(LF_NDITTE); - break; - case schede: - if (_pr_what != nditte) - add_file(LF_NDITTE); - add_file(LF_ATTIV,LF_NDITTE); - add_file(LF_UNLOC,LF_NDITTE); - add_file(LF_SOCI, LF_NDITTE); - break; - default: - break; - } - } - set_headers(); -} - -bool BA6100_App::set_print(int) -{ - TMask mask("ba6100a.msk"); - // set print type - switch (mask.run()) - { - case K_ESC: - case K_QUIT: - return FALSE; - case BUT_BA6_ELENCO: - _pr_type = elenco; - // cio' che e' blu collega al modulo anagrafiche - _ana_link = enable_link("Collegamento archivio anagrafiche: ", 'b'); - _dit_link = enable_link("Collegamento archivio ditte: ", 'r'); - break; - case BUT_BA6_SCHEDE: - disable_links(); - _pr_type = schede; - break; - case BUT_BA6_ETICHETTE: - disable_links(); - if (_pr_what != nditte) - { - _pr_type = etichette; - // set additionals - TMask mask2("ba6100b.msk"); - - mask2.set_workfile("ba6100.set"); - mask2.set_handler(BUT_BA6B_RESET, mask_reset_fields); - - if (fexist("ba6100b.set")) - { - mask2.load(); - - _ind_what = (in)atoi(mask2.get(RDB_BA6B_INDIR)); - _ind_row = atoi(mask2.get(FLD_BA6B_INDROW)); - _piv_row = atoi(mask2.get(FLD_BA6B_PIVROW)); - _cod_row = atoi(mask2.get(FLD_BA6B_CODROW)); - _rows_et = atoi(mask2.get(FLD_BA6B_TOTROW)); - _ind_col = atoi(mask2.get(FLD_BA6B_INDCOL)); - _piv_col = atoi(mask2.get(FLD_BA6B_PIVCOL)); - _cod_col = atoi(mask2.get(FLD_BA6B_CODCOL)); - _cols_et = atoi(mask2.get(FLD_BA6B_TOTCOL)); - - _is_piv = mask2.get(CHK_BA6B_PIVA) == "X"; - _is_cod = mask2.get(CHK_BA6B_CODICE) == "X"; - } - else - { - mask2.field(FLD_BA6B_INDROW).set(format("%d",_ind_row)); - mask2.field(FLD_BA6B_INDCOL).set(format("%d",_ind_col)); - mask2.field(FLD_BA6B_PIVROW).set(format("%d",_piv_row)); - mask2.field(FLD_BA6B_PIVCOL).set(format("%d",_piv_col)); - mask2.field(FLD_BA6B_CODROW).set(format("%d",_cod_row)); - mask2.field(FLD_BA6B_CODCOL).set(format("%d",_cod_col)); - mask2.field(FLD_BA6B_TOTROW).set(format("%d",_rows_et)); - mask2.field(FLD_BA6B_TOTCOL).set(format("%d",_cols_et)); - mask2.field(CHK_BA6B_PIVA).set(_is_piv ? "X" : " "); - mask2.field(CHK_BA6B_CODICE).set(_is_cod ?"X": " "); - } - - mask2.run(); - - _ind_what = (in)atoi(mask2.get(RDB_BA6B_INDIR)); - _ind_row = atoi(mask2.get(FLD_BA6B_INDROW)); - _piv_row = atoi(mask2.get(FLD_BA6B_PIVROW)); - _cod_row = atoi(mask2.get(FLD_BA6B_CODROW)); - _rows_et = atoi(mask2.get(FLD_BA6B_TOTROW)); - _ind_col = atoi(mask2.get(FLD_BA6B_INDCOL)); - _piv_col = atoi(mask2.get(FLD_BA6B_PIVCOL)); - _cod_col = atoi(mask2.get(FLD_BA6B_CODCOL)); - _cols_et = atoi(mask2.get(FLD_BA6B_TOTCOL)); - - _is_piv = mask2.get(CHK_BA6B_PIVA) == "X"; - _is_cod = mask2.get(CHK_BA6B_CODICE) == "X"; - - if (_frpos) delete _frpos; - _frpos = new bool[_rows_et]; - memset(_frpos,FALSE,sizeof(_frpos)); - _frpos[_ind_row-1] = TRUE; - _frpos[_ind_row] = TRUE; - if (_is_piv) _frpos[_piv_row-1] = TRUE; - if (_is_cod) _frpos[_cod_row-1] = TRUE; - - for (int jk = 0; jk < _rows_et; jk++) - if (!_frpos[jk]) set_row(jk+1,""); - - // save settings - if (mask2.get(CHK_BA6B_SAVE) == "X") - mask2.save(); - } - break; - case BUT_BA6_RUBRICHE: - _ana_link = enable_link("Collegamento archivio anagrafiche: ", 'b'); - _dit_link = enable_link("Collegamento archivio ditte: ", 'r'); - _pr_type = rubriche; - break; - } - _pr_what = (pw)atoi(mask.get(RDB_BA6_TYPE)); - _sort = atoi(mask.get(RDB_BA6_SORT)); - _inclditte = (bool)(mask.get(CHK_BA6_INCLDI) == "X"); - - TString cod_from(5), cod_to(5); - TLocalisamfile* fl; - - switch(_pr_what) - { - case anafis: - case anagiu: - select_cursor(_pr_what == anafis ? cfis() : cgiu()); - if (_sort == 1) - { - cod_from = mask.get(_pr_what == anafis ? FLD_ANF_CODFR - : FLD_ANG_CODFR); - cod_to = mask.get(_pr_what == anafis ? FLD_ANF_CODTO - : FLD_ANG_CODTO); - } - else - { - cod_from = mask.get(_pr_what == anafis ? FLD_ANF_RAGSOCFR - : FLD_ANG_RAGSOCFR); - cod_to = mask.get(_pr_what == anafis ? FLD_ANF_RAGSOCTO - : FLD_ANG_RAGSOCTO); - } - { - fl = current_cursor()->file(LF_ANAG); - TRectype tr1(fl->curr()); - TRectype tr2(fl->curr()); - tr1.zero(); tr2.zero(); - tr1.put("TIPOA", _pr_what == anafis ? "F" : "G"); - tr2.put("TIPOA", _pr_what == anafis ? "F" : "G"); - if (!cod_from.empty() || !cod_to.empty()) - { - if (_sort == 1) - { - if (cod_from.not_empty()) - { - tr1.put("CODANAGR",cod_from); - tr2.put("CODANAGR",cod_to); - } - } - else - { - if (cod_from.not_empty()) - { - tr1.put("RAGSOC",cod_from); - tr2.put("RAGSOC",cod_to); - } - } - } - current_cursor()->setregion(tr1, tr2); - } - break; - case nditte: - select_cursor(cdit()); - if (_sort == 1) - { - cod_from = mask.get(FLD_DITTE_CODFR); - cod_to = mask.get(FLD_DITTE_CODTO); - } - else - { - cod_from = mask.get(FLD_DITTE_RAGSOCFR); - cod_to = mask.get(FLD_DITTE_RAGSOCTO); - } - if (!cod_from.empty() || !cod_to.empty()) - { - fl = current_cursor()->file(LF_NDITTE); - TRectype tr1(fl->curr()); - TRectype tr2(fl->curr()); - tr1.zero(); tr2.zero(); - if (_sort == 1) - { - tr1.put("CODDITTA",cod_from); - tr2.put("CODDITTA",cod_to); - } - else - { - tr1.put("RAGSOC",cod_from); - tr2.put("RAGSOC",cod_to); - } - current_cursor()->setregion(tr1, tr2); - } - break; - } - // setup links and set headers - init_print(); - - // enable_print_menu(); - - return TRUE; -} - -void BA6100_App::user_create() -{ - TToken_string rxp(40); - - TProgind p(5, "Preparazione archivi\nPrego attendere", FALSE, TRUE, 30); - - // setup relation - _rel_fis = new TRelation(LF_ANAG); - _rel_giu = new TRelation(LF_ANAG); - _rel_dit = new TRelation(LF_NDITTE); - - p.addstatus(1); - - rxp.add("CODANAGR=CODANAGR"); - - _rel_fis->add(LF_ANAGFIS,rxp); - _rel_giu->add(LF_ANAGGIU,rxp); - - rxp.add("TIPOA=TIPOA"); - - _rel_fis->add(LF_NDITTE, rxp, 4); - _rel_giu->add(LF_NDITTE, rxp, 4); - _rel_dit->add(LF_ANAG, rxp); - - p.addstatus(1); - - // add unloc & attiv - rxp = "CODDITTA=CODDITTA"; - - _rel_fis->add(LF_ATTIV, rxp, 1, LF_NDITTE); - _rel_fis->add(LF_UNLOC, rxp, 1, LF_NDITTE); - _rel_giu->add(LF_ATTIV, rxp, 1, LF_NDITTE); - _rel_giu->add(LF_UNLOC, rxp, 1, LF_NDITTE); - _rel_dit->add(LF_ATTIV, rxp, 1); - _rel_dit->add(LF_UNLOC, rxp, 1); - _rel_fis->add(LF_SOCI, rxp, 1, LF_NDITTE); - _rel_giu->add(LF_SOCI, rxp, 1, LF_NDITTE); - _rel_dit->add(LF_SOCI, rxp, 1); - - p.addstatus(1); - - _cfis1 = add_cursor(new TCursor(_rel_fis, "" , 1)); - _cgiu1 = add_cursor(new TCursor(_rel_giu, "" , 1)); - _cdit1 = add_cursor(new TCursor(_rel_dit, "", 1)); - _cfis2 = add_cursor(new TCursor(_rel_fis, "" , 2)); - _cgiu2 = add_cursor(new TCursor(_rel_giu, "" , 2)); - _cdit2 = add_cursor(new TCursor(_rel_dit, "", 2)); - - p.addstatus(1); - - _comuni = new TLocalisamfile(LF_COMUNI); - - // set translated field values - set_translation(LF_ANAGFIS,"STATCIV","1","Celibe/Nubile"); - set_translation(LF_ANAGFIS,"STATCIV","2","Coniugato/a"); - set_translation(LF_ANAGFIS,"STATCIV","3","Vedovo/a"); - set_translation(LF_ANAGFIS,"STATCIV","4","Separato/a"); - set_translation(LF_ANAGFIS,"STATCIV","5","Divorziato/a"); - set_translation(LF_ANAGFIS,"STATCIV","6","Deceduto/a"); - set_translation(LF_ANAGFIS,"STATCIV","7","Tutelato/a"); - set_translation(LF_ANAGFIS,"STATCIV","8","Figlio/a minore"); - set_translation(LF_ANAGFIS,"TITSTU", "1" ,"Nessuno"); - set_translation(LF_ANAGFIS,"TITSTU", "2" ,"Lic. Elem."); - set_translation(LF_ANAGFIS,"TITSTU", "3" ,"Lic. Media"); - set_translation(LF_ANAGFIS,"TITSTU", "4" ,"Diploma"); - set_translation(LF_ANAGFIS,"TITSTU", "5" ,"Laurea"); - set_translation(LF_ANAGFIS,"SESSO", "M", "Maschio"); - set_translation(LF_ANAGFIS,"SESSO", "F", "Femmina"); - set_translation(LF_NDITTE,"FREQVIVA","M","Mensile"); - set_translation(LF_NDITTE,"FREQVIVA","T","Trimestrale"); - set_translation(LF_NDITTE,"DATLAV","1","Si"); - set_translation(LF_NDITTE,"DATLAV","2","No"); - set_translation(LF_NDITTE,"DATLAV","3","Lavoro Agricolo"); - set_translation(LF_NDITTE,"STATOSOC","1","Normale attivita'"); - set_translation(LF_NDITTE,"STATOSOC","2","Liquidazione cessata attivita'"); - set_translation(LF_NDITTE,"STATOSOC","3", - "Fallimento o Liquidazione coatta amm."); - set_translation(LF_NDITTE,"STATOSOC","4","Estinto"); - set_translation(LF_ANAGGIU,"STATOSOC","1","Normale attivita'"); - set_translation(LF_ANAGGIU,"STATOSOC","2","Liquidazione cessata attivita'"); - set_translation(LF_ANAGGIU,"STATOSOC","3", - "Fallimento o Liquidazione coatta amm."); - set_translation(LF_ANAGGIU,"STATOSOC","4","Estinto"); - set_translation(LF_ANAGGIU,"SITSOC","1","Inizio"); - set_translation(LF_ANAGGIU,"SITSOC","2","Liquidazione"); - set_translation(LF_ANAGGIU,"SITSOC","3","Termine liquidazione"); - set_translation(LF_ANAGGIU,"SITSOC","4","Estinzione"); - set_translation(LF_ANAGGIU,"SITSOC","5","Trasf. IRPEG"); - set_translation(LF_ANAGGIU,"SITSOC","6","Normale"); - - set_fillchar('_'); - set_wait_threshold(0); - - p.addstatus(1); - -} - -void BA6100_App::user_destroy() -{ - if (_rel_fis) delete _rel_fis; - if (_rel_giu) delete _rel_giu; - if (_rel_dit) delete _rel_dit; - if (_frpos) delete _frpos; - - delete _comuni; -} - - -int ba6100(int argc, char* argv[]) -{ - BA6100_App app; - app.run(argc, argv, "Stampa Anagrafiche"); - return 0; -} +// ********************************************************************** +// Stampa anagrafiche +// Control code +// *********************************************************************** +#include +#include +#include + +#include "ba6100.h" + +// ------- utils -------------------------------------------- + + +TRectype& BA6100_App::look_com(const char* cod) +{ + _comuni->curr().zero(); + if (*cod) + { + _comuni->curr().put("COM",cod); + _comuni->read(); + if (_comuni->bad()) + _comuni->curr().zero(); + } + return _comuni->curr(); +} + +const char* BA6100_App::look_tab(const char* tabname, const char* cod, + const char* fld) +{ + if (*cod == 0) return ""; + TTable tab(tabname); + tab.curr().zero(); + tab.curr().put("CODTAB",cod); + tab.read(); + if (tab.bad()) tab.curr().zero(); + return tab.curr().get(fld); +} + +// link + +void BA6100_App::process_link(int id, const char* txt) +{ + if (id == _ana_link) + { + TString80 ss = "1|"; ss << txt; + TMessage fs(cmd2name("ba4","-1"), MSG_LN, ss); + TMailbox m; + m.send(fs); + TExternal_app ba4(_pr_what == anafis ? "ba4 -1 F" : "ba4 -1 G"); + if (ba4.run()) beep(); + } + else if (id == _dit_link) + { + TString80 ss = "1|"; ss << txt << "|" << txt; + TMessage fs(cmd2name("ba4","-2"), MSG_LN, ss); + fs.send(); + TExternal_app ba4("ba4 -2"); + if (ba4.run()) beep(); + } +} + +// ---- here we go ------------------------------------------------- + +void BA6100_App::set_page(int file, int cnt) +{ + switch(file) + { + case LF_ANAG: + case LF_NDITTE: + if (_pr_type == elenco) + { + if (_pr_what != nditte && file == LF_NDITTE) + { + set_row(1,"@50g$[r]@pN$[n]@66g@S", FLD(LF_NDITTE,"CODDITTA","@@@@@"), + FLD(LF_NDITTE,"RAGSOC")); + set_row(2,""); + } + else + set_elenco(); + } + else if (_pr_type == rubriche) set_rubriche(); + else if (_pr_type == schede) + { + if (_pr_what != nditte && file == LF_NDITTE) + set_scheda_ditta(); + else + set_schede(); + } + else if (_pr_type == etichette) set_etichette(); + break; + case LF_ATTIV: + set_scheda_attiv(); + break; + case LF_UNLOC: + set_scheda_unloc(); + break; + case LF_SOCI: + set_scheda_socio(); + break; + } +} + + +bool BA6100_App::preprocess_page(int file, int counter) +{ + // non stampa la prima ditta se sta facendo l'elenco visto + // che la stampa a fianco dell'anagrafica + if (file == LF_NDITTE && _pr_type == elenco && _inclditte + && _pr_what != nditte) + if (current_cursor()->is_first_match(LF_NDITTE)) + return FALSE; + + if (_pr_type == rubriche) + { + // vale per ditte, anagiu, anafis + _com = current_cursor()->curr(LF_ANAG).get("COMRES"); + if (_com.empty()) + _com = current_cursor()->curr(LF_ANAG).get("COMRF"); + _phone = current_cursor()->curr(LF_ANAG).get("PTELRF"); + _phone.trim(); + if (!_phone.empty()) _phone << '/'; + _phone << current_cursor()->curr(LF_ANAG).get("TELRF"); + + TRectype& cc = look_com(_com); + _com = cc.get("DENCOM"); + _cap = cc.get("CAPCOM"); + _prov = cc.get("PROVCOM"); + } + else if (_pr_type == etichette) + preprocess_etichette(); + return TRUE; +} + + +bool mask_reset_fields(TMask_field& mf, KEY k) +{ + if (k == K_SPACE) + { + BA6100_App* a = (BA6100_App*)MainApp(); + mf.mask().field(FLD_BA6B_INDROW).set(format("%d",a->_ind_row)); + mf.mask().field(FLD_BA6B_INDCOL).set(format("%d",a->_ind_col)); + mf.mask().field(FLD_BA6B_PIVROW).set(format("%d",a->_piv_row)); + mf.mask().field(FLD_BA6B_PIVCOL).set(format("%d",a->_piv_col)); + mf.mask().field(FLD_BA6B_CODROW).set(format("%d",a->_cod_row)); + mf.mask().field(FLD_BA6B_CODCOL).set(format("%d",a->_cod_col)); + mf.mask().field(FLD_BA6B_TOTROW).set(format("%d",a->_rows_et)); + mf.mask().field(FLD_BA6B_TOTCOL).set(format("%d",a->_cols_et)); + mf.mask().field(CHK_BA6B_PIVA).set(a->_is_piv ? "X" : " "); + mf.mask().field(CHK_BA6B_CODICE).set(a->_is_cod ?"X": " "); + } + return TRUE; +} + + +void BA6100_App::preprocess_etichette() +{ + // everything goes into strings + _name = get_field(LF_ANAG,"RAGSOC"); + _cod = get_field(LF_ANAG,"CODANAGR"); + _cofi = get_field(LF_ANAG,"COFI"); + TRectype& cc = look_com(get_field(LF_ANAG,"COMCORR")); + if (_cofi.empty()) + _cofi = get_field(LF_ANAG,"PAIV"); + + if (_pr_what == anafis) + { + _surname = _name.mid(30); _surname.trim(); + _name = _name.cut(30); _name.trim(); + _sex = get_field(LF_ANAGFIS,"SESSO")[0] == 'M' ? "Sig." : "Sig.ra"; + } + switch (_ind_what) + { + case corrispondenza: + _address = get_field(LF_ANAG,"INDCORR"); + _civ = get_field(LF_ANAG,"CIVCORR"); + _stato = look_tab("%STA",get_field(LF_ANAG,"STATOCORR")); + _cap = get_field(LF_ANAG,"CAPCORR"); + _com = cc.get("DENCOM"); + _prov = cc.get("PROVCOM"); + if (_cap.empty()) + _cap = cc.get("CAPCOM"); + if (!_address.empty()) + break; + // else fall down + case domfisc: + _address = get_field(LF_ANAG,"INDRF"); + _civ = get_field(LF_ANAG,"CIVRF"); + _stato = look_tab("%STA",get_field(LF_ANAG,"STATORF")); + _cap = get_field(LF_ANAG,"CAPRF"); + cc = look_com(get_field(LF_ANAG,"COMRF")); + _com = cc.get("DENCOM"); + _prov = cc.get("PROVCOM"); + if (_cap.empty()) + _cap = cc.get("CAPCOM"); + if (!_address.empty()) + break; + // else fall down + case residenza: + _address = get_field(LF_ANAG,"INDRES"); + _civ = get_field(LF_ANAG,"CIVRES"); + _stato = look_tab("%STA",get_field(LF_ANAG,"STATORES")); + _cap = get_field(LF_ANAG,"CAPRES"); + cc = look_com(get_field(LF_ANAG,"COMRES")); + _com = cc.get("DENCOM"); + _prov = cc.get("PROVCOM"); + if (_cap.empty()) + _cap = cc.get("CAPCOM"); + break; + } +} + + +void BA6100_App::init_print() +{ + reset_print(); + reset_files(); + + // select cursor and main file + switch(_pr_what) + { + case anafis: + select_cursor(cfis()); + add_file(LF_ANAG); + break; + case anagiu: + select_cursor(cgiu()); + add_file(LF_ANAG); + break; + case nditte: + select_cursor(cdit()); + add_file(LF_NDITTE); + break; + } + + force_setpage(_pr_type == schede); + + // setup secondary links + if (_inclditte) + { + switch(_pr_type) + { + case elenco: + if (_pr_what != nditte) + add_file(LF_NDITTE); + break; + case schede: + if (_pr_what != nditte) + add_file(LF_NDITTE); + add_file(LF_ATTIV,LF_NDITTE); + add_file(LF_UNLOC,LF_NDITTE); + add_file(LF_SOCI, LF_NDITTE); + break; + default: + break; + } + } + set_headers(); +} + +bool BA6100_App::set_print(int) +{ + TMask mask("ba6100a.msk"); + // set print type + switch (mask.run()) + { + case K_ESC: + case K_QUIT: + return FALSE; + case BUT_BA6_ELENCO: + _pr_type = elenco; + // cio' che e' blu collega al modulo anagrafiche + _ana_link = enable_link("Collegamento archivio anagrafiche: ", 'b'); + _dit_link = enable_link("Collegamento archivio ditte: ", 'r'); + break; + case BUT_BA6_SCHEDE: + disable_links(); + _pr_type = schede; + break; + case BUT_BA6_ETICHETTE: + disable_links(); + if (_pr_what != nditte) + { + _pr_type = etichette; + // set additionals + TMask mask2("ba6100b.msk"); + + mask2.set_workfile("ba6100.set"); + mask2.set_handler(BUT_BA6B_RESET, mask_reset_fields); + + if (fexist("ba6100b.set")) + { + mask2.load(); + + _ind_what = (in)atoi(mask2.get(RDB_BA6B_INDIR)); + _ind_row = atoi(mask2.get(FLD_BA6B_INDROW)); + _piv_row = atoi(mask2.get(FLD_BA6B_PIVROW)); + _cod_row = atoi(mask2.get(FLD_BA6B_CODROW)); + _rows_et = atoi(mask2.get(FLD_BA6B_TOTROW)); + _ind_col = atoi(mask2.get(FLD_BA6B_INDCOL)); + _piv_col = atoi(mask2.get(FLD_BA6B_PIVCOL)); + _cod_col = atoi(mask2.get(FLD_BA6B_CODCOL)); + _cols_et = atoi(mask2.get(FLD_BA6B_TOTCOL)); + + _is_piv = mask2.get(CHK_BA6B_PIVA) == "X"; + _is_cod = mask2.get(CHK_BA6B_CODICE) == "X"; + } + else + { + mask2.field(FLD_BA6B_INDROW).set(format("%d",_ind_row)); + mask2.field(FLD_BA6B_INDCOL).set(format("%d",_ind_col)); + mask2.field(FLD_BA6B_PIVROW).set(format("%d",_piv_row)); + mask2.field(FLD_BA6B_PIVCOL).set(format("%d",_piv_col)); + mask2.field(FLD_BA6B_CODROW).set(format("%d",_cod_row)); + mask2.field(FLD_BA6B_CODCOL).set(format("%d",_cod_col)); + mask2.field(FLD_BA6B_TOTROW).set(format("%d",_rows_et)); + mask2.field(FLD_BA6B_TOTCOL).set(format("%d",_cols_et)); + mask2.field(CHK_BA6B_PIVA).set(_is_piv ? "X" : " "); + mask2.field(CHK_BA6B_CODICE).set(_is_cod ?"X": " "); + } + + mask2.run(); + + _ind_what = (in)atoi(mask2.get(RDB_BA6B_INDIR)); + _ind_row = atoi(mask2.get(FLD_BA6B_INDROW)); + _piv_row = atoi(mask2.get(FLD_BA6B_PIVROW)); + _cod_row = atoi(mask2.get(FLD_BA6B_CODROW)); + _rows_et = atoi(mask2.get(FLD_BA6B_TOTROW)); + _ind_col = atoi(mask2.get(FLD_BA6B_INDCOL)); + _piv_col = atoi(mask2.get(FLD_BA6B_PIVCOL)); + _cod_col = atoi(mask2.get(FLD_BA6B_CODCOL)); + _cols_et = atoi(mask2.get(FLD_BA6B_TOTCOL)); + + _is_piv = mask2.get(CHK_BA6B_PIVA) == "X"; + _is_cod = mask2.get(CHK_BA6B_CODICE) == "X"; + + if (_frpos) delete _frpos; + _frpos = new bool[_rows_et]; + memset(_frpos,FALSE,sizeof(_frpos)); + _frpos[_ind_row-1] = TRUE; + _frpos[_ind_row] = TRUE; + if (_is_piv) _frpos[_piv_row-1] = TRUE; + if (_is_cod) _frpos[_cod_row-1] = TRUE; + + for (int jk = 0; jk < _rows_et; jk++) + if (!_frpos[jk]) set_row(jk+1,""); + + // save settings + if (mask2.get(CHK_BA6B_SAVE) == "X") + mask2.save(); + } + break; + case BUT_BA6_RUBRICHE: + _ana_link = enable_link("Collegamento archivio anagrafiche: ", 'b'); + _dit_link = enable_link("Collegamento archivio ditte: ", 'r'); + _pr_type = rubriche; + break; + } + _pr_what = (pw)atoi(mask.get(RDB_BA6_TYPE)); + _sort = atoi(mask.get(RDB_BA6_SORT)); + _inclditte = (bool)(mask.get(CHK_BA6_INCLDI) == "X"); + + TString cod_from(5), cod_to(5); + + switch(_pr_what) + { + case anafis: + case anagiu: + select_cursor(_pr_what == anafis ? cfis() : cgiu()); + if (_sort == 1) + { + cod_from = mask.get(_pr_what == anafis ? FLD_ANF_CODFR + : FLD_ANG_CODFR); + cod_to = mask.get(_pr_what == anafis ? FLD_ANF_CODTO + : FLD_ANG_CODTO); + } + else + { + cod_from = mask.get(_pr_what == anafis ? FLD_ANF_RAGSOCFR + : FLD_ANG_RAGSOCFR); + cod_to = mask.get(_pr_what == anafis ? FLD_ANF_RAGSOCTO + : FLD_ANG_RAGSOCTO); + } + { + TLocalisamfile& fl = current_cursor()->file(LF_ANAG); + TRectype tr1(fl.curr()); + TRectype tr2(fl.curr()); + tr1.zero(); tr2.zero(); + tr1.put("TIPOA", _pr_what == anafis ? "F" : "G"); + tr2.put("TIPOA", _pr_what == anafis ? "F" : "G"); + if (!cod_from.empty() || !cod_to.empty()) + { + if (_sort == 1) + { + if (cod_from.not_empty()) + { + tr1.put("CODANAGR",cod_from); + tr2.put("CODANAGR",cod_to); + } + } + else + { + if (cod_from.not_empty()) + { + tr1.put("RAGSOC",cod_from); + tr2.put("RAGSOC",cod_to); + } + } + } + current_cursor()->setregion(tr1, tr2); + } + break; + case nditte: + select_cursor(cdit()); + if (_sort == 1) + { + cod_from = mask.get(FLD_DITTE_CODFR); + cod_to = mask.get(FLD_DITTE_CODTO); + } + else + { + cod_from = mask.get(FLD_DITTE_RAGSOCFR); + cod_to = mask.get(FLD_DITTE_RAGSOCTO); + } + if (!cod_from.empty() || !cod_to.empty()) + { + TLocalisamfile& fl = current_cursor()->file(LF_NDITTE); + TRectype tr1(fl.curr()); + TRectype tr2(fl.curr()); + tr1.zero(); tr2.zero(); + if (_sort == 1) + { + tr1.put("CODDITTA",cod_from); + tr2.put("CODDITTA",cod_to); + } + else + { + tr1.put("RAGSOC",cod_from); + tr2.put("RAGSOC",cod_to); + } + current_cursor()->setregion(tr1, tr2); + } + break; + } + // setup links and set headers + init_print(); + + // enable_print_menu(); + + return TRUE; +} + +void BA6100_App::user_create() +{ + TToken_string rxp(40); + + TProgind p(5, "Preparazione archivi\nPrego attendere", FALSE, TRUE, 30); + + // setup relation + _rel_fis = new TRelation(LF_ANAG); + _rel_giu = new TRelation(LF_ANAG); + _rel_dit = new TRelation(LF_NDITTE); + + p.addstatus(1); + + rxp.add("CODANAGR=CODANAGR"); + + _rel_fis->add(LF_ANAGFIS,rxp); + _rel_giu->add(LF_ANAGGIU,rxp); + + rxp.add("TIPOA=TIPOA"); + + _rel_fis->add(LF_NDITTE, rxp, 4); + _rel_giu->add(LF_NDITTE, rxp, 4); + _rel_dit->add(LF_ANAG, rxp); + + p.addstatus(1); + + // add unloc & attiv + rxp = "CODDITTA=CODDITTA"; + + _rel_fis->add(LF_ATTIV, rxp, 1, LF_NDITTE); + _rel_fis->add(LF_UNLOC, rxp, 1, LF_NDITTE); + _rel_giu->add(LF_ATTIV, rxp, 1, LF_NDITTE); + _rel_giu->add(LF_UNLOC, rxp, 1, LF_NDITTE); + _rel_dit->add(LF_ATTIV, rxp, 1); + _rel_dit->add(LF_UNLOC, rxp, 1); + _rel_fis->add(LF_SOCI, rxp, 1, LF_NDITTE); + _rel_giu->add(LF_SOCI, rxp, 1, LF_NDITTE); + _rel_dit->add(LF_SOCI, rxp, 1); + + p.addstatus(1); + + _cfis1 = add_cursor(new TCursor(_rel_fis, "" , 1)); + _cgiu1 = add_cursor(new TCursor(_rel_giu, "" , 1)); + _cdit1 = add_cursor(new TCursor(_rel_dit, "", 1)); + _cfis2 = add_cursor(new TCursor(_rel_fis, "" , 2)); + _cgiu2 = add_cursor(new TCursor(_rel_giu, "" , 2)); + _cdit2 = add_cursor(new TCursor(_rel_dit, "", 2)); + + p.addstatus(1); + + _comuni = new TLocalisamfile(LF_COMUNI); + + // set translated field values + set_translation(LF_ANAGFIS,"STATCIV","1","Celibe/Nubile"); + set_translation(LF_ANAGFIS,"STATCIV","2","Coniugato/a"); + set_translation(LF_ANAGFIS,"STATCIV","3","Vedovo/a"); + set_translation(LF_ANAGFIS,"STATCIV","4","Separato/a"); + set_translation(LF_ANAGFIS,"STATCIV","5","Divorziato/a"); + set_translation(LF_ANAGFIS,"STATCIV","6","Deceduto/a"); + set_translation(LF_ANAGFIS,"STATCIV","7","Tutelato/a"); + set_translation(LF_ANAGFIS,"STATCIV","8","Figlio/a minore"); + set_translation(LF_ANAGFIS,"TITSTU", "1" ,"Nessuno"); + set_translation(LF_ANAGFIS,"TITSTU", "2" ,"Lic. Elem."); + set_translation(LF_ANAGFIS,"TITSTU", "3" ,"Lic. Media"); + set_translation(LF_ANAGFIS,"TITSTU", "4" ,"Diploma"); + set_translation(LF_ANAGFIS,"TITSTU", "5" ,"Laurea"); + set_translation(LF_ANAGFIS,"SESSO", "M", "Maschio"); + set_translation(LF_ANAGFIS,"SESSO", "F", "Femmina"); + set_translation(LF_NDITTE,"FREQVIVA","M","Mensile"); + set_translation(LF_NDITTE,"FREQVIVA","T","Trimestrale"); + set_translation(LF_NDITTE,"DATLAV","1","Si"); + set_translation(LF_NDITTE,"DATLAV","2","No"); + set_translation(LF_NDITTE,"DATLAV","3","Lavoro Agricolo"); + set_translation(LF_NDITTE,"STATOSOC","1","Normale attivita'"); + set_translation(LF_NDITTE,"STATOSOC","2","Liquidazione cessata attivita'"); + set_translation(LF_NDITTE,"STATOSOC","3", + "Fallimento o Liquidazione coatta amm."); + set_translation(LF_NDITTE,"STATOSOC","4","Estinto"); + set_translation(LF_ANAGGIU,"STATOSOC","1","Normale attivita'"); + set_translation(LF_ANAGGIU,"STATOSOC","2","Liquidazione cessata attivita'"); + set_translation(LF_ANAGGIU,"STATOSOC","3", + "Fallimento o Liquidazione coatta amm."); + set_translation(LF_ANAGGIU,"STATOSOC","4","Estinto"); + set_translation(LF_ANAGGIU,"SITSOC","1","Inizio"); + set_translation(LF_ANAGGIU,"SITSOC","2","Liquidazione"); + set_translation(LF_ANAGGIU,"SITSOC","3","Termine liquidazione"); + set_translation(LF_ANAGGIU,"SITSOC","4","Estinzione"); + set_translation(LF_ANAGGIU,"SITSOC","5","Trasf. IRPEG"); + set_translation(LF_ANAGGIU,"SITSOC","6","Normale"); + + set_fillchar('_'); + set_wait_threshold(0); + + p.addstatus(1); + +} + +void BA6100_App::user_destroy() +{ + if (_rel_fis) delete _rel_fis; + if (_rel_giu) delete _rel_giu; + if (_rel_dit) delete _rel_dit; + if (_frpos) delete _frpos; + + delete _comuni; +} + + +int ba6100(int argc, char* argv[]) +{ + BA6100_App app; + app.run(argc, argv, "Stampa Anagrafiche"); + return 0; +} diff --git a/ba/ba6101.cpp b/ba/ba6101.cpp index 4387a32be..e8eb0921f 100755 --- a/ba/ba6101.cpp +++ b/ba/ba6101.cpp @@ -1,850 +1,850 @@ -// ************************************************************************ -// Stampa anagrafiche (ba6 -0) -// Settaggio stampe -// ************************************************************************ - -#include "ba6100.h" -static const char sep[] = -"-----------------------------------------------------------------" -"-----------------------------------------------------------------" ; - -void BA6100_App::set_scheda_anagiu() -{ - set_row(1,"SCHEDA SOCIETA'"); - set_row(2,""); - set_row(3,"@bCodice@r@15g@u@pn@25g@r@bRag.Sociale @r@u@50s", - FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC")); - set_row(4,"@25g@bEvent. sigla@r@40g@u@20s", - FLD(LF_ANAGGIU,"SIGLA")); - set_row(5,"Oggetto soc.@15g@60s", - FLD(LF_ANAGGIU,"OGGSOC")); - set_row(6,"Codice Fiscale@20g@16s@46gPartita IVA @12s", - FLD(LF_ANAG,"COFI"), - FLD(LF_ANAG,"PAIV")); - set_row(7,"Riferimento@15g@20s", FLD(LF_ANAGGIU,"PERRIF")); - set_row(8,""); - - set_row(9,"Sede legale@20gIndirizzo @35s", - FLD(LF_ANAG,"INDRES")); - TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); - TRectype& cc = look_com(com); - - TString a = cc.get("DENCOM"); - TString b = cc.get("CAPCOM"); - TString c = cc.get("PROVCOM"); - set_row(10,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", - (const char*)a, - (const char*)c, - (const char*)b); - - set_row(11,"@20gTelefono @u@10s@r/@u@30s@r", - FLD(LF_ANAG,"PTELRF"), - FLD(LF_ANAG,"TELRF")); - set_row(12,""); - - set_row(13,"Domicilio fiscale@20gIndirizzo @35s", - FLD(LF_ANAG,"INDRF")); - com = current_cursor()->curr(LF_ANAG).get("COMRF"); - cc = look_com(com); - a = cc.get("DENCOM"); - b = cc.get("CAPCOM"); - c = cc.get("PROVCOM"); - set_row(14,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", - (const char*)a, - (const char*)c, - (const char*)b); - - set_row(15,""); - set_row(16,"Corrispondenza@20gIndirizzo @35s", - FLD(LF_ANAG,"INDCORR")); - - com = current_cursor()->curr(LF_ANAG).get("COMCORR"); - cc = look_com(com); - a = cc.get("DENCOM"); - b = cc.get("CAPCOM"); - c = cc.get("PROVCOM"); - - set_row(17,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", - (const char*)a, - (const char*)c, - (const char*)b); - - com = current_cursor()->curr(LF_ANAG).get("STATOCORR"); - if (com.empty()) - a = "Italia"; - else { a = look_tab("%STA",com,"S0"); } - - set_row(18,"@20gStato %s",(const char*)a); - set_row(19,""); - set_row(20,"Telex@20g@u@10s@r/@u@30s@r", - FLD(LF_ANAG,"PTLEXRF"), - FLD(LF_ANAG,"TLEXRFX")); - set_row(21,"Telefax@20g@u@10s@r/@u@30s@r", - FLD(LF_ANAG,"PFAXRF"), - FLD(LF_ANAG,"FAXRF")); - set_row(22,""); - set_row(23,"Ufficio imposte@20gNumero @pn", - FLD(LF_ANAG,"UFFIIDD","@@@")); - - com = current_cursor()->curr(LF_ANAG).get("UFFIIDD"); - a = look_tab("%UID",com,"S6"); - c = look_tab("%UID",com,"S4"); - cc = look_com(a); - a = cc.get("DENCOM"); - b = cc.get("PROVCOM"); - - set_row(24,"@20gComune %-24s@53gProvincia %2s", - (const char*)a, - (const char*)b); - set_row(25,""); - set_row(26,"Esattoria@20gC/C n. %-20s",(const char*)c); - set_row(27,"@20gComune %-24s@53gProvincia %2s", - (const char*)a, - (const char*)b); - set_row(28,"@20gCodice contribuente @10s", - FLD(LF_ANAG,"CODCONTR")); - set_row(29,""); set_row(30,""); - - // dati atto costitutivo etc - set_row(31,"Dati atto costitutivo e statuto"); set_row(32,""); - set_row(33,"Estremi@20g@60s", FLD(LF_ANAGGIU,"ESTROMOL")); - set_row(34,"Omologa@25g@ld@41gData iscrizione@70g@ld", - FLD(LF_ANAGGIU,"DATAOMOL"), - FLD(LF_ANAGGIU,"DATAISCRIZ")); - set_row(35,"Data costituzione@25g@ld@41gDurata sino@70g@ld", - FLD(LF_ANAGGIU,"DATACOST"), - FLD(LF_ANAGGIU,"DATASCAD")); - set_row(36,"Termine appr. bilancio@25g@d@41gApprovazione bilancio@70g@d", - FLD(LF_ANAGGIU,"DATATAPPBI"), - FLD(LF_ANAGGIU,"DATAAPPBIL")); - set_row(37,"Scad.org.amministrativo@25g@d@41gScadenza collegio " - "sindacale@70g@d", - FLD(LF_ANAGGIU,"DATASORAMM"), - FLD(LF_ANAGGIU,"DATASCSIND")); - // set_row(38,"Fine esercizio@25g@d", FLD(LF_ANAGGIU,"???")); - set_row(39,""); - set_row(40,"@5gCapit.sociale@24gCapit.versato@47g" - "Fatturato@65gN.azioni@74gValore"); - set_row(41,"@pn @pn @pn @61g@n @pn", - FLD(LF_ANAGGIU,"CAPSOC","###.###.###.###.###"), - FLD(LF_ANAGGIU,"CAPVER","###.###.###.###.###"), - FLD(LF_ANAGGIU,"FATT","###.###.###.###.###"), - FLD(LF_ANAGGIU,"NAZIONI"), - FLD(LF_ANAGGIU,"VALNOM","###.###.###.###")); - set_row(42,""); - - set_row(43,"Dati Statistici@20gNon residente@61g@f", - FLD(LF_ANAG,"SOGGNRES")); - set_row(44,"@20gEventi naturali eccezionali@61g@s", - FLD(LF_ANAG,"EVECC")); - set_row(45,"@20gResidente in zone terremotate@61g@f", - FLD(LF_ANAG,"RESZTERR")); - // *TBI* traduzione natura giuridica - set_row(46,"@20gNatura giuridica@61g@s", - FLD(LF_ANAGGIU,"NATGIU")); - set_row(47,"@20gStato societa'@51g@20,rt", - FLD(LF_ANAGGIU,"STATOSOC")); - set_row(48,"@20gSituazione societa'@51g@20,rt", - FLD(LF_ANAGGIU,"SITSOC")); - - set_row(49,""); - a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT1"),"S0"); - set_row(50,"@20gSigla stat.1 @pn %-50s", - FLD(LF_ANAG,"CODSTAT1","@@@@@@@"), (const char*)a); - a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT2"),"S0"); - set_row(51,"@20gSigla stat.2 @pn %-50s", - FLD(LF_ANAG,"CODSTAT2","@@@@@@@"), (const char*)a); - a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT3"),"S0"); - set_row(52,"@20gSigla stat.3 @pn %-50s", - FLD(LF_ANAG,"CODSTAT3","@@@@@@@"), (const char*)a); - - // NOTE - set_row(53,""); - set_row(54,"Note attivato storico"); - set_row(55,"@6g@70s",FLD(LF_ANAGGIU,"NOTE1")); - set_row(56,"@6g@70s",FLD(LF_ANAGGIU,"NOTE2")); - set_row(57,"@6g@70s",FLD(LF_ANAGGIU,"NOTE3")); - set_row(58,"@6g@70s",FLD(LF_ANAGGIU,"NOTE4")); - set_row(59,"@6g@70s",FLD(LF_ANAGGIU,"NOTE5")); - - for (int i = 60; i <= printer().formlen(); i++) - set_row(i, ""); -} - -void BA6100_App::set_scheda_anafis() -{ - set_row(1,"SCHEDA PERSONA FISICA"); - set_row(2,""); - set_row(3,"@bCodice @r@u@pn@20g@r@bCognome @r@u@S", - FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC",0,29)); - set_row(4,"@20g@bNome @r@u@s", - FLD(LF_ANAG,"RAGSOC",30,50)); - set_row(5,""); - set_row(6,"Codice Fiscale@20g@s@46gPartita IVA @s", - FLD(LF_ANAG,"COFI"), - FLD(LF_ANAG,"PAIV")); - set_row(7,"Data di nascita@20g@ld@32g@t@46gNazionalita' @s", - FLD(LF_ANAGFIS,"DATANASC"), - FLD(LF_ANAGFIS,"SESSO"), - FLD(LF_ANAGFIS,"NAZION")); - set_row(8,""); - set_row(9,"Residenza@20gIndirizzo @s", - FLD(LF_ANAG,"INDRES")); - - TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); - TRectype& cc = look_com(com); - TString a = cc.get("DENCOM"); - TString b = cc.get("CAPCOM"); - TString c = cc.get("PROVCOM"); - - set_row(10,"@20gComune %s@53gProvincia %s@68gCAP %s", - (const char*)a, - (const char*)c, - (const char*)b - ); - - set_row(11,"@20gTelefono @u@s@r/@u@s@r", - FLD(LF_ANAG,"PTELRF"), - FLD(LF_ANAG,"TELRF")); - set_row(12,""); - set_row(13,"Domicilio fiscale@20gIndirizzo @s", - FLD(LF_ANAG,"INDRF")); - - com = current_cursor()->curr(LF_ANAG).get("COMRF"); - cc = look_com(com); - a = cc.get("DENCOM"); - b = cc.get("CAPCOM"); - c = cc.get("PROVCOM"); - - set_row(14,"@20gComune %s@53gProvincia %s@68gCAP %s", - (const char*)a, - (const char*)c, - (const char*)b - ); - - set_row(15,""); - set_row(16,"Corrispondenza@20gIndirizzo @s", - FLD(LF_ANAG,"INDCORR")); - - com = current_cursor()->curr(LF_ANAG).get("COMCORR"); - cc = look_com(com); - a = cc.get("DENCOM"); - b = cc.get("CAPCOM"); - c = cc.get("PROVCOM"); - - set_row(17,"@20gComune %s@53gProvincia %s@68gCAP %s", - (const char*)a, - (const char*)c, - (const char*)b - ); - - com = current_cursor()->curr(LF_ANAG).get("STATOCORR"); - if (com.empty()) - a = "Italia"; - else { a = look_tab("%STA",com,"S0"); } - - set_row(18,"@20gStato %s",(const char*)a); - set_row(19,""); - set_row(20,"Telex@20g@u@s@r/@u@s@r", - FLD(LF_ANAG,"PTLEXRF"), - FLD(LF_ANAG,"TLEXRFX")); - set_row(21,"Telefax@20g@u@s@r/@u@s@r", - FLD(LF_ANAG,"PFAXRF"), - FLD(LF_ANAG,"FAXRF")); - set_row(22,""); - set_row(23,"Ufficio imposte@20gNumero @pn", - FLD(LF_ANAG,"UFFIIDD","@@@")); - - com = current_cursor()->curr(LF_ANAG).get("UFFIIDD"); - a = look_tab("%UID",com,"S6"); - c = look_tab("%UID",com,"S4"); - cc = look_com(a); - a = cc.get("DENCOM"); - b = cc.get("PROVCOM"); - - set_row(24,"@20gComune %s@53gProvincia %s", - (const char*)a, - (const char*)b); - set_row(25,""); - set_row(26,"Esattoria@20gC/C n. %s",(const char*)c); - set_row(27,"@20gComune %s@53gProvincia %s", - (const char*)a, - (const char*)b); - set_row(28,"@20gCodice contribuente @s", - FLD(LF_ANAG,"CODCONTR")); - set_row(29,""); - - // cerca coniuge - com = current_cursor()->curr(LF_ANAGFIS).get("CODCONIUGE"); - TLocalisamfile* af = current_cursor()->file(LF_ANAG); - TRecnotype last = af->recno(); - int k = af->getkey(); - - if (!com.empty()) - { - af->curr().zero(); - af->setkey(1); - af->put("CODANAGR",com); - af->put("TIPOA","F"); - af->read(); - } - a = af->get("RAGSOC"); - if (!com.empty()) - { - af->setkey(k); - af->readat(last); - b = a.sub(30); a = a.left(20); - } - else { a = ""; b = ""; } - - set_row(30,"Coniuge @pn@20gCognome %s", - FLD(LF_ANAGFIS,"CODCONIUGE","@@@@@"), - (const char*)a); - set_row(31,"@20gNome %s", (const char*)b); - - - set_row(32,"Dati Statistici@20gNon residente@53g@f", - FLD(LF_ANAG,"SOGGNRES")); - set_row(33,"@20gEventi naturali eccezionali@53g@s", - FLD(LF_ANAG,"EVECC")); - set_row(34,"@20gResidente in zone terremotate@53g@f", - FLD(LF_ANAG,"RESZTERR")); - set_row(35,"@20gStato civile@53g@t", - FLD(LF_ANAGFIS,"STATCIV")); - set_row(36,"@20gData variazione stato civile@53g@D", - FLD(LF_ANAGFIS,"DVARSCIV")); - set_row(37,"@20gTitolo di studio@53g@t", - FLD(LF_ANAGFIS,"TITSTU")); - // set_row(37,"@20gProvincia lavoro dipendente@61g@s"); - set_row(38,""); set_row(39,""); set_row(40,""); set_row(41,""); - - a = look_tab("%SST", - current_cursor()->curr(LF_ANAG).get("CODSTAT1"),"S0"); - set_row(42,"@20gSigla stat.1 @pn %s", - FLD(LF_ANAG,"CODSTAT1","@@@@@@@"), (const char*)a); - a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT2"),"S0"); - set_row(43,"@20gSigla stat.2 @pn ", - FLD(LF_ANAG,"CODSTAT2","@@@@@@@"), (const char*)a); - a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT3"),"S0"); - set_row(44,"@20gSigla stat.3 @pn ", - FLD(LF_ANAG,"CODSTAT3","@@@@@@@"), (const char*)a); - - for (int i = 45; i <= printer().formlen(); i++) - set_row(i, ""); -} - -void BA6100_App::set_scheda_ditta() -{ - set_row(1,"@bSCHEDA DITTA @r@u@pn@r@20g@bDenominaz. sociale @r@u@s", - FLD(LF_NDITTE,"CODDITTA","@@@@@"), - FLD(LF_NDITTE,"RAGSOC")); - set_row(2,"Albo artigiani@20gIscrizione all'albo @f@55gnum. @s", - FLD(LF_NDITTE,"ARTIG"), - FLD(LF_NDITTE,"NISCRAA")); - TString a = - look_com(current_cursor()->curr(LF_NDITTE).get("COMAA")).get("DENCOM"); - set_row(3,"@20gLocalita' %s@55gData @D", - (const char*)a, - FLD(LF_NDITTE,"DATAISCRAA")); - set_row(4,"Attivita'"); - - a = look_tab("%AIS",current_cursor()-> - curr(LF_NDITTE).get("CODATTPREV")); // TBC - - set_row(5,"prevalente@20gCod. @pn Desc. %s", - FLD(LF_NDITTE,"CODATTPREV","@@@@@"), - (const char*)a); - // set_row(6,"@20gGestione piu' attivita'"); - set_row(6,"@20gFrequenza versamenti@54g@t", - FLD(LF_NDITTE,"FREQVIVA")); - set_row(7,"@20gTenuta contabilita' ordinaria@54g@f", - FLD(LF_NDITTE,"CONTORD")); - set_row(8,"@20gDatore di lavoro@54g@t", - FLD(LF_NDITTE,"DATLAV")); - set_row(9,"@20gData inizio attivita'@54g@D", - FLD(LF_NDITTE,"DINIZIOATT")); - set_row(10,"Altri dati@20gRiferimento @u@s@r @54gTel. @u@4S@r/@u@S@r", - FLD(LF_NDITTE,"PERRIF"), - FLD(LF_NDITTE,"PTEL"), - FLD(LF_NDITTE,"TEL")); - set_row(11,"@20gGestione magazzino @f", - FLD(LF_NDITTE,"REGMAG")); - set_row(12,"@20gNumero unita' locali @n@54gNum.enasarco @s", - FLD(LF_NDITTE,"NULC"), - FLD(LF_NDITTE,"NENASARCO")); - set_row(13,""); - /* TBI: banca di appoggio */ - set_row(14,"Stato@20g@t",FLD(LF_NDITTE,"STATOSOC")); - set_row(15,""); set_row(16,""); -} - -void BA6100_App::set_scheda_attiv() -{ - TString dio = look_tab("%AIS",current_cursor()-> - curr(LF_ATTIV).get("CODATT"),"S0"); - - set_row(1,"@bATTIVITA'@r @pn@20g@bDescrizione:@r %s", - FLD(LF_ATTIV,"CODATT","@@@@@"), (const char*)dio); - - set_row(2,"@20gRegime agricolo@67g@f", - FLD(LF_ATTIV,"REGAGR")); - set_row(3,"@20gRegime speciale agenzie di viaggio (art.74ter)@67g@f", - FLD(LF_ATTIV,"REG74TER")); - set_row(4,"@20gAttivita' stagionale@67g@f", - FLD(LF_ATTIV,"ATTSTAG")); - set_row(5,"@20gAttivita' esercitata in piu' luoghi@67g@f", - FLD(LF_ATTIV,"ESLUOGHID")); - set_row(6,"@20gData inizio attivita'@60g@D", - FLD(LF_NDITTE,"DINIZIOATT")); - set_row(7,"@20gData variazione attivita'@60g@D", - FLD(LF_ATTIV,"DATAVARIVA")); - set_row(8,"@20gData cessazione attivita'@60g@D", - FLD(LF_ATTIV,"DCESSATT")); - set_row(9,"@20g@bCONSERVAZIONE SCRITTURE CONTABILI@r"); - - // cerca depositario - TString com = get_field(LF_ATTIV,"CODANGRDS"); - TString a = get_field(LF_ATTIV,"TIPOADS"); - TLocalisamfile* af = current_cursor()->file(LF_ANAG); - TRecnotype last = af->recno(); - af->curr().zero(); - int k = af->getkey(); - af->setkey(1); - af->curr().put("CODANAGR",com); - af->curr().put("TIPOA",a); - - TString b = af->curr().get("RAGSOC"); - com = af->curr().get("INDRF"); - if (com.empty()) com = af->curr().get("INDRES"); - TString c = af->curr().get("COMRF"); - if (c.empty) c = af->curr().get("COMRES"); - TRectype& cm = look_com(a); - af->readat(last); - af->setkey(k); - - set_row(10,"Depositario@20gCodice @pn (%s): %s", - FLD(LF_ATTIV,"CODANGRDS"), - c == 'F' ? "p.f." : "p.g.", - (const char*)b); - set_row(11,"@20gIndirizzo %s", (const char*)c); - a = cm.get("DENCOM"); b = cm.get("PROVCOM"); c = cm.get("CAPCOM"); - set_row(12,"@20gComune %s@53gProvincia %s@68gC.a.p. %s", - (const char*)a, (const char*)b, (const char*)c); - set_row(13,"@20gTenuta scritture parziali@68g@f", - FLD(LF_ATTIV,"TSCRPARZ")); - set_row(14,"Luogo@20gIndirizzo @s @s", - FLD(LF_ATTIV,"INDCS"), - FLD(LF_ATTIV,"CAPCS")); - cm = look_com(get_field(LF_ATTIV,"COMCS")); - a = cm.get("DENCOM"); b = cm.get("PROVCOM"); c = cm.get("CAPCOM"); - set_row(15,"@20gComune %s@53gProvincia %s@68gC.a.p. %s", - (const char*)a, (const char*)b, (const char*)c); - set_row(16,"@20gTelefono "); - set_row(17,""); set_row(18,""); -} - -void BA6100_App::set_scheda_registro() -{ - /* TBI */ -} - -void BA6100_App::set_scheda_unloc() -{ - set_row(1,"@bUNITA' LOCALE@20gCodice @r@u@pn@r", - FLD(LF_UNLOC,"CODULC","@@@")); - set_row(2,"@20g@bIndirizzo@r@u @s@r@68g@bNumero @r@u@s", - FLD(LF_UNLOC,"INDULC"), - FLD(LF_UNLOC,"CIVULC")); - TRectype& cc = look_com(get_field(LF_UNLOC,"COMULC")); - TString a = cc.get("DENCOM"); - TString b = cc.get("PROVCOM"); - TString c = cc.get("CAPCOM"); - set_row(3,"@20g@bComune@r@4j@u%s@r@53g@bProvincia@r @u%s@r@68g@b" - "C.a.p.@r @u%s", - (const char*)a, (const char*)b, (const char*)c); - set_row(4,""); - set_row(5,"C.C.I.A.A.@20gNumero@30g@pn", - FLD(LF_UNLOC,"NUMCCIAA","@@@@@@@")); - cc = look_com(get_field(LF_UNLOC,"COMCCIAA")); - a = cc.get("DENCOM"); - set_row(6,"@20gComune@30g%s@53gN. Meccanografico @n", - (const char*)a, - FLD(LF_UNLOC,"NUMMECC")); - set_row(7,"@20gData iscrizione @D@48gData ultima variazione @D", - FLD(LF_UNLOC,"DATAICCIAA"), - FLD(LF_UNLOC,"DATAVCCIAA")); - set_row(8,""); - set_row(9,"Autorizzazioni@20gN. R.E.C. @30g@pn@41gComunale n. @pn " - "PS n. @pn Altre @s", - FLD(LF_UNLOC,"NUMREC","@@@@@@@"), - FLD(LF_UNLOC,"AUTCOM","@@@@@"), - FLD(LF_UNLOC,"AUTPS","@@@@@@@"), - FLD(LF_UNLOC,"ALTAUT")); - set_row(10,""); - set_row(11,"Posizioni@20gINPS n.@30g@s INAIL n. @s", - FLD(LF_UNLOC,"POSINPS"), - FLD(LF_UNLOC,"POSINAIL")); - set_row(12,""); - set_row(13,"Tribunale@20gRegistro@30g@pn@44gVolume@52g@pn@64gFascicolo @pn", - FLD(LF_UNLOC,"REGTRIB","@@@@@@@@@"), - FLD(LF_UNLOC,"VOLTRIB","@@@@@@@"), - FLD(LF_UNLOC,"FASCTRIB","@@@@@")); - set_row(14,""); - set_row(15,"Locali destinati"); - set_row(16,"all'attivita'@20gMq.Locali @pn Di cui a magazzino @pn", - FLD(LF_UNLOC,"MQULC","@@@@@"), - FLD(LF_UNLOC,"MQULCMAG","@@@@@")); - set_row(17,""); set_row(18,""); -} - -void BA6100_App::set_scheda_socio() -{ - int rw; - TString b1, b2, b3; - - TLocalisamfile* ana = current_cursor()->file(LF_ANAG); - TLocalisamfile* soc = current_cursor()->file(LF_SOCI); - TRecnotype rno = ana->recno(); - int k = ana->getkey(); - - ana->zero(); - ana->put("TIPOA",soc->get("TIPOASOC")); - ana->put("CODANAGR",soc->get("CODANAGRSO")); - ana->read(); - - TString codconiuge = ""; - - if (soc->get("TIPOASOC") == "F") - { - TLocalisamfile* anaf; - TRecnotype rn = 0; int kk = 1; - - if (_pr_what == anafis) - { - anaf = current_cursor()->file(LF_ANAGFIS); - rn = anaf->recno(); - kk = anaf->getkey(); - } - else - { - anaf = new TLocalisamfile(LF_ANAGFIS); - anaf->read(); - } - - anaf->zero(); - anaf->put("CODANAGR",soc->get("CODANAGRSO")); - anaf->read(); - TRectype& com = look_com(anaf->get("COMNASC")); - - set_row(1,"@bSOCIO@r @s / @pn@20g@bCognome@r @s", - FLD(LF_SOCI,"TIPOASOC"), - FLD(LF_SOCI,"CODANAGRSO","@@@@@"), - FLD(LF_ANAG,"RAGSOC",0,29)); - set_row(2,"@20g@bNome@r @s@53g@bCod.fisc.@r @s", - FLD(LF_ANAG,"RAGSOC",30,50), - FLD(LF_ANAG,"COFI")); - set_row(3,""); - - b1 = anaf->get_date("DATANASC").string(4); - b2 = anaf->get("SESSO"); - b3 = anaf->get("STATONASC").empty() ? - "Italiana" : anaf->get("STATONASC"); - - set_row(4,"Nascita@20gData@30g%S@42gSesso %S@53gCittadinanza %S", - (const char*)b1, - (const char*)b2, - (const char*)b3); - - b1 = com.get("DENCOM"); - b2 = com.get("PROVCOM"); - - set_row(5,"@20gComune@30g%S@53gProvincia %S", - (const char*)b1, - (const char*)b2); - rw = 6; - - codconiuge = "Cod.coniuge "; - codconiuge << anaf->get("CODCONIUGE"); - - if (_pr_what == anafis) - { anaf->setkey(kk); anaf->readat(rn); } - else delete anaf; - } - else - { - set_row(1,"@bSOCIO@r @S / @pN@20gR.soc. @s"); - set_row(2,"@20gCod.fisc. @s @P.IVA @s"); - rw = 3; - } - set_row(rw,""); - - TRectype& com = look_com(ana->get("COMRES")); - - b1 = com.get("DENCOM"); - b2 = com.get("PROVCOM"); - b3 = com.get("CAPCOM"); - - set_row(rw+1,"Residenza@20gIndirizzo @S", FLD(LF_ANAG,"INDRES")); - set_row(rw+2,"@20gComune %S@53gProvincia %S@68gC.a.p. %S", - (const char*)b1, - (const char*)b2, - (const char*)b3); - - set_row(rw+3,""); - - TString car = look_tab("%CRS",soc->get("CODCAR")); - - set_row(rw+4,"Carica@20gCod. @pN@30g%s@62gScadenza @lD", - FLD(LF_SOCI,"CODCAR","@@"), - (const char*)car, - FLD(LF_SOCI,"SCADCAR")); - - set_row(rw+5,"Azioni@20gN.quote @N = @7.3N%% Redd. @7.3N%% Perd. @7.3N%%", - FLD(LF_SOCI,"NQUOTEAZ"), - FLD(LF_SOCI,"PERCQUAZ"), - FLD(LF_SOCI,"PERCAZREDD"), - FLD(LF_SOCI,"PERCAZPERD")); - set_row(rw+6,"@20gTitolo proprieta' @S Emolumento @pN", - FLD(LF_SOCI,"TITPROP"), - FLD(LF_SOCI,"EMOLUMENTO","###.###.###.###")); - set_row(rw+7,"%% rit.su dividendi @7.3n%% Tipo azione @s " - "Partecipaz. assemblea @f", - FLD(LF_SOCI,"PERCRITDIV"), - FLD(LF_SOCI,"TIPOAZ"), - FLD(LF_SOCI,"PARTASS")); - set_row(rw+8,"Modello 740 @s @57g%s", - FLD(LF_SOCI,"Q740"), - (const char*)codconiuge); - set_row(rw+9,"Attiv. prevalente @f@37gQuadro 750 @s @53g" - "Mesi lavorati art.120 c1 @2n", - FLD(LF_SOCI,"ATTPREV"), - FLD(LF_SOCI,"QUATTPREV"), - FLD(LF_SOCI,"MLAV120C1")); - - set_row(rw+10,"@20gRichiesta qualifica @s@53gMesi lavorati art.120 c2 @2n", - FLD(LF_SOCI,"RICQUAL"), - FLD(LF_SOCI,"MLAV120C2")); - set_row(rw+11,"Note@20g@s", FLD(LF_SOCI,"NOTE")); - set_row(rw+12,"Data ultimo agg. @20gAnagrafica @d @53gSocio @d", - FLD(LF_ANAG,"DATAAGG"), - FLD(LF_SOCI,"DATAAGG")); - set_row(rw+13,""); set_row(rw+14,""); - - ana->setkey(k); - ana->readat(rno); -} - - -void BA6100_App::set_rubriche() -{ - // preprocess_page will fill the vars - set_row(2,"@32g@35S", FLD(LF_ANAG,"INDRES")); - set_row(3,"@32g#-24T CAP #5T PR #2T", &_com, &_cap, &_prov); - set_row(4,"@32gTel. #-36T", &_phone); - set_row(5,""); - - if (_pr_what == nditte) - { - set_row(1,"@b$[r]@pN@r$[n]@3j@50S", - FLD(LF_NDITTE,"CODDITTA","@@@@@"), - FLD(LF_NDITTE,"RAGSOC")); - } - else if (_pr_what == anafis) - { - set_row(1,"@b$[b]@pN$[n]@r@3j@S @S", FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC",0,29), FLD(LF_ANAG,"RAGSOC",30,50)); - } - else - { - set_row(1,"@b$[b]@pN$[n]@r@3j@50S", FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC")); - set_row(4,"@56g Rif @12S", FLD(LF_ANAGGIU,"PERRIF")); - } -} - - - -void BA6100_App::set_elenco() -{ - switch(_pr_what) - { - case anafis: - case anagiu: - if (_pr_what == anafis) - { - if (_inclditte) - set_row(1,"$[b]@pN$[n]@4j@S @S@50g$[r]@pN$[n]@66g@S", - FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC",0,29), - FLD(LF_ANAG,"RAGSOC",30,50), - FLD(LF_NDITTE,"CODDITTA","@@@@@"), - FLD(LF_NDITTE,"RAGSOC")); - else - set_row(1,"$[b]@pN$[n]@4j@S @S", - FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC",0,29), - FLD(LF_ANAG,"RAGSOC",30,50)); - } - else - { - if (_inclditte) - set_row(1,"$[b]@pN$[n]@4j@50S@50g$[r]@pN$[n]@66g@S", - FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC"), - FLD(LF_NDITTE,"CODDITTA","@@@@@"), - FLD(LF_NDITTE,"RAGSOC")); - - else - set_row(1,"$[b]@pN$[n]@4j@50S", - FLD(LF_ANAG,"CODANAGR","@@@@@"), - FLD(LF_ANAG,"RAGSOC")); - } - break; - case nditte: - set_row(1,"$[r]@pN$[n]@10g@S@50g@S @pN@3j@S", - FLD(LF_NDITTE,"CODDITTA","@@@@"), - FLD(LF_NDITTE,"RAGSOC"), - FLD(LF_NDITTE,"TIPOA"), - FLD(LF_ANAG, "CODANAGR", "@@@@@"), - FLD(LF_ANAG, "RAGSOC")); - break; - } - set_row(2,""); -} - -void BA6100_App::set_schede() -{ - switch(_pr_what) - { - case anafis: set_scheda_anafis(); break; - case anagiu: set_scheda_anagiu(); break; - case nditte: set_scheda_ditta(); break; - } -} - - -void BA6100_App::set_headers() -{ - reset_header(); - set_background(); - if (_pr_type == elenco) - { - switch(_pr_what) - { - case anafis: - case anagiu: -#if XVT_OS != XVT_OS_SCOUNIX - set_background("W1l{1 2 132 2}W4l{1 5 132 5}"); -#else - set_header(2,(const char*)sep); - set_header(5,(const char*)sep); -#endif - set_header(1,"@bELENCO PERSONE %s@82gStudio@96gData" - "@101g @< @110g Pag. @#", _pr_what == anafis ? "FISICHE" : - "GIURIDICHE"); - set_header(3,"@iCodice@55gCodice"); - set_header(4,"@iAnagr. Ragione sociale/cognome e nome@55gDitta" - "@66gDenominazione sociale"); - set_header(6,""); - break; - case nditte: -#if XVT_OS != XVT_OS_SCOUNIX - set_background("W1l{1 2 132 2}W4l{1 5 132 5}"); -#else - set_header(2,(const char*)sep); - set_header(5,(const char*)sep); -#endif - set_header(1,"@bELENCO DITTE@82gStudio@96gData" - "@101g @< @110 @#"); - set_header(3,"@iCodice@50gT"); - set_header(4,"@iAnagr. Denominazione sociale@50gP Codice" - "@61gRagione sociale/Cognome e nome"); - set_header(6,""); - } - } - else if (_pr_type == rubriche) - { - switch (_pr_what) - { - case anafis: - case anagiu: -#if XVT_OS != XVT_OS_SCOUNIX - set_background("W1l{1 2 132 2}W4l{1 4 132 4}"); -#else - set_header(2,(const char*)sep); - set_header(4,(const char*)sep); -#endif - set_header(1,"@bRUBRICA PERSONE %s@40gStudio@53gData @< pag. @#", - _pr_what == anagiu ? "GIURIDICHE" : "FISICHE"); - set_header(3,"@iCodice Cognome e nome"); - set_header(5,""); - break; - case nditte: -#if XVT_OS != XVT_OS_SCOUNIX - set_background("W1l{1 2 132 2}W4l{1 4 132 4}"); -#else - set_header(2,(const char*)sep); - set_header(4,(const char*)sep); -#endif - set_header(1,"@bRUBRICA DITTE@40gStudio@53gData @< pag. @#"); - set_header(3,"@iCodice Cognome e nome"); - set_header(5,""); - break; - } - } - else if (_pr_type == schede) - { - set_header(1,""); - } -} - - -void BA6100_App::set_etichette() -{ - int namerow = 0; - - for (int i = 2; i <= _rows_et; i++) - set_row(i, ""); - - if (_is_piv) - { - set_row(_piv_row, TString(format("@%dg#t", _piv_col)), &_cofi); - _frpos[_piv_row - 1] = TRUE; - } - if (_is_cod) - { - set_row(_cod_row, TString(format("@%dg#t", _cod_col)), &_cod); - _frpos[_cod_row - 1] = TRUE; - } - - // name goes in first free row - for (i = 0; i < _rows_et; i++) - { - if (!_frpos[i]) - { if (namerow == 0) namerow = i; } - } - - namerow++; reset_row(namerow); - - if (_pr_what == anagiu) - set_row(namerow,TString(format("@%dg#t",_ind_col)), &_name); - else - { - set_row(namerow,TString(format("@%dg#t #t #t",_ind_col)), &_sex, &_name, &_surname); - } - - set_row(_ind_row,TString(format("@%dg#t #t", _ind_col)), &_address, &_civ); - set_row(_ind_row+1, TString(format("@%dg#t #t #t", _ind_col)), - &_cap, &_com, &_prov); - - if (!_stato.empty()) - { - // print state on first free row - for (i = _ind_row+1; i < _rows_et; i++) - if (!_frpos[i] && i != (namerow - 1)) - set_row(i+1, TString(format("@%dg#t", _ind_col)), &_stato); - } - -} +// ************************************************************************ +// Stampa anagrafiche (ba6 -0) +// Settaggio stampe +// ************************************************************************ + +#include "ba6100.h" +static const char sep[] = +"-----------------------------------------------------------------" +"-----------------------------------------------------------------" ; + +void BA6100_App::set_scheda_anagiu() +{ + set_row(1,"SCHEDA SOCIETA'"); + set_row(2,""); + set_row(3,"@bCodice@r@15g@u@pn@25g@r@bRag.Sociale @r@u@50s", + FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC")); + set_row(4,"@25g@bEvent. sigla@r@40g@u@20s", + FLD(LF_ANAGGIU,"SIGLA")); + set_row(5,"Oggetto soc.@15g@60s", + FLD(LF_ANAGGIU,"OGGSOC")); + set_row(6,"Codice Fiscale@20g@16s@46gPartita IVA @12s", + FLD(LF_ANAG,"COFI"), + FLD(LF_ANAG,"PAIV")); + set_row(7,"Riferimento@15g@20s", FLD(LF_ANAGGIU,"PERRIF")); + set_row(8,""); + + set_row(9,"Sede legale@20gIndirizzo @35s", + FLD(LF_ANAG,"INDRES")); + TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); + TRectype& cc = look_com(com); + + TString a = cc.get("DENCOM"); + TString b = cc.get("CAPCOM"); + TString c = cc.get("PROVCOM"); + set_row(10,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", + (const char*)a, + (const char*)c, + (const char*)b); + + set_row(11,"@20gTelefono @u@10s@r/@u@30s@r", + FLD(LF_ANAG,"PTELRF"), + FLD(LF_ANAG,"TELRF")); + set_row(12,""); + + set_row(13,"Domicilio fiscale@20gIndirizzo @35s", + FLD(LF_ANAG,"INDRF")); + com = current_cursor()->curr(LF_ANAG).get("COMRF"); + cc = look_com(com); + a = cc.get("DENCOM"); + b = cc.get("CAPCOM"); + c = cc.get("PROVCOM"); + set_row(14,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", + (const char*)a, + (const char*)c, + (const char*)b); + + set_row(15,""); + set_row(16,"Corrispondenza@20gIndirizzo @35s", + FLD(LF_ANAG,"INDCORR")); + + com = current_cursor()->curr(LF_ANAG).get("COMCORR"); + cc = look_com(com); + a = cc.get("DENCOM"); + b = cc.get("CAPCOM"); + c = cc.get("PROVCOM"); + + set_row(17,"@20gComune %-24s@53gProvincia %2s@68gCAP %5s", + (const char*)a, + (const char*)c, + (const char*)b); + + com = current_cursor()->curr(LF_ANAG).get("STATOCORR"); + if (com.empty()) + a = "Italia"; + else { a = look_tab("%STA",com,"S0"); } + + set_row(18,"@20gStato %s",(const char*)a); + set_row(19,""); + set_row(20,"Telex@20g@u@10s@r/@u@30s@r", + FLD(LF_ANAG,"PTLEXRF"), + FLD(LF_ANAG,"TLEXRFX")); + set_row(21,"Telefax@20g@u@10s@r/@u@30s@r", + FLD(LF_ANAG,"PFAXRF"), + FLD(LF_ANAG,"FAXRF")); + set_row(22,""); + set_row(23,"Ufficio imposte@20gNumero @pn", + FLD(LF_ANAG,"UFFIIDD","@@@")); + + com = current_cursor()->curr(LF_ANAG).get("UFFIIDD"); + a = look_tab("%UID",com,"S6"); + c = look_tab("%UID",com,"S4"); + cc = look_com(a); + a = cc.get("DENCOM"); + b = cc.get("PROVCOM"); + + set_row(24,"@20gComune %-24s@53gProvincia %2s", + (const char*)a, + (const char*)b); + set_row(25,""); + set_row(26,"Esattoria@20gC/C n. %-20s",(const char*)c); + set_row(27,"@20gComune %-24s@53gProvincia %2s", + (const char*)a, + (const char*)b); + set_row(28,"@20gCodice contribuente @10s", + FLD(LF_ANAG,"CODCONTR")); + set_row(29,""); set_row(30,""); + + // dati atto costitutivo etc + set_row(31,"Dati atto costitutivo e statuto"); set_row(32,""); + set_row(33,"Estremi@20g@60s", FLD(LF_ANAGGIU,"ESTROMOL")); + set_row(34,"Omologa@25g@ld@41gData iscrizione@70g@ld", + FLD(LF_ANAGGIU,"DATAOMOL"), + FLD(LF_ANAGGIU,"DATAISCRIZ")); + set_row(35,"Data costituzione@25g@ld@41gDurata sino@70g@ld", + FLD(LF_ANAGGIU,"DATACOST"), + FLD(LF_ANAGGIU,"DATASCAD")); + set_row(36,"Termine appr. bilancio@25g@d@41gApprovazione bilancio@70g@d", + FLD(LF_ANAGGIU,"DATATAPPBI"), + FLD(LF_ANAGGIU,"DATAAPPBIL")); + set_row(37,"Scad.org.amministrativo@25g@d@41gScadenza collegio " + "sindacale@70g@d", + FLD(LF_ANAGGIU,"DATASORAMM"), + FLD(LF_ANAGGIU,"DATASCSIND")); + // set_row(38,"Fine esercizio@25g@d", FLD(LF_ANAGGIU,"???")); + set_row(39,""); + set_row(40,"@5gCapit.sociale@24gCapit.versato@47g" + "Fatturato@65gN.azioni@74gValore"); + set_row(41,"@pn @pn @pn @61g@n @pn", + FLD(LF_ANAGGIU,"CAPSOC","###.###.###.###.###"), + FLD(LF_ANAGGIU,"CAPVER","###.###.###.###.###"), + FLD(LF_ANAGGIU,"FATT","###.###.###.###.###"), + FLD(LF_ANAGGIU,"NAZIONI"), + FLD(LF_ANAGGIU,"VALNOM","###.###.###.###")); + set_row(42,""); + + set_row(43,"Dati Statistici@20gNon residente@61g@f", + FLD(LF_ANAG,"SOGGNRES")); + set_row(44,"@20gEventi naturali eccezionali@61g@s", + FLD(LF_ANAG,"EVECC")); + set_row(45,"@20gResidente in zone terremotate@61g@f", + FLD(LF_ANAG,"RESZTERR")); + // *TBI* traduzione natura giuridica + set_row(46,"@20gNatura giuridica@61g@s", + FLD(LF_ANAGGIU,"NATGIU")); + set_row(47,"@20gStato societa'@51g@20,rt", + FLD(LF_ANAGGIU,"STATOSOC")); + set_row(48,"@20gSituazione societa'@51g@20,rt", + FLD(LF_ANAGGIU,"SITSOC")); + + set_row(49,""); + a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT1"),"S0"); + set_row(50,"@20gSigla stat.1 @pn %-50s", + FLD(LF_ANAG,"CODSTAT1","@@@@@@@"), (const char*)a); + a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT2"),"S0"); + set_row(51,"@20gSigla stat.2 @pn %-50s", + FLD(LF_ANAG,"CODSTAT2","@@@@@@@"), (const char*)a); + a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT3"),"S0"); + set_row(52,"@20gSigla stat.3 @pn %-50s", + FLD(LF_ANAG,"CODSTAT3","@@@@@@@"), (const char*)a); + + // NOTE + set_row(53,""); + set_row(54,"Note attivato storico"); + set_row(55,"@6g@70s",FLD(LF_ANAGGIU,"NOTE1")); + set_row(56,"@6g@70s",FLD(LF_ANAGGIU,"NOTE2")); + set_row(57,"@6g@70s",FLD(LF_ANAGGIU,"NOTE3")); + set_row(58,"@6g@70s",FLD(LF_ANAGGIU,"NOTE4")); + set_row(59,"@6g@70s",FLD(LF_ANAGGIU,"NOTE5")); + + for (int i = 60; i <= printer().formlen(); i++) + set_row(i, ""); +} + +void BA6100_App::set_scheda_anafis() +{ + set_row(1,"SCHEDA PERSONA FISICA"); + set_row(2,""); + set_row(3,"@bCodice @r@u@pn@20g@r@bCognome @r@u@S", + FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC",0,29)); + set_row(4,"@20g@bNome @r@u@s", + FLD(LF_ANAG,"RAGSOC",30,50)); + set_row(5,""); + set_row(6,"Codice Fiscale@20g@s@46gPartita IVA @s", + FLD(LF_ANAG,"COFI"), + FLD(LF_ANAG,"PAIV")); + set_row(7,"Data di nascita@20g@ld@32g@t@46gNazionalita' @s", + FLD(LF_ANAGFIS,"DATANASC"), + FLD(LF_ANAGFIS,"SESSO"), + FLD(LF_ANAGFIS,"NAZION")); + set_row(8,""); + set_row(9,"Residenza@20gIndirizzo @s", + FLD(LF_ANAG,"INDRES")); + + TString com = current_cursor()->curr(LF_ANAG).get("COMRES"); + TRectype& cc = look_com(com); + TString a = cc.get("DENCOM"); + TString b = cc.get("CAPCOM"); + TString c = cc.get("PROVCOM"); + + set_row(10,"@20gComune %s@53gProvincia %s@68gCAP %s", + (const char*)a, + (const char*)c, + (const char*)b + ); + + set_row(11,"@20gTelefono @u@s@r/@u@s@r", + FLD(LF_ANAG,"PTELRF"), + FLD(LF_ANAG,"TELRF")); + set_row(12,""); + set_row(13,"Domicilio fiscale@20gIndirizzo @s", + FLD(LF_ANAG,"INDRF")); + + com = current_cursor()->curr(LF_ANAG).get("COMRF"); + cc = look_com(com); + a = cc.get("DENCOM"); + b = cc.get("CAPCOM"); + c = cc.get("PROVCOM"); + + set_row(14,"@20gComune %s@53gProvincia %s@68gCAP %s", + (const char*)a, + (const char*)c, + (const char*)b + ); + + set_row(15,""); + set_row(16,"Corrispondenza@20gIndirizzo @s", + FLD(LF_ANAG,"INDCORR")); + + com = current_cursor()->curr(LF_ANAG).get("COMCORR"); + cc = look_com(com); + a = cc.get("DENCOM"); + b = cc.get("CAPCOM"); + c = cc.get("PROVCOM"); + + set_row(17,"@20gComune %s@53gProvincia %s@68gCAP %s", + (const char*)a, + (const char*)c, + (const char*)b + ); + + com = current_cursor()->curr(LF_ANAG).get("STATOCORR"); + if (com.empty()) + a = "Italia"; + else { a = look_tab("%STA",com,"S0"); } + + set_row(18,"@20gStato %s",(const char*)a); + set_row(19,""); + set_row(20,"Telex@20g@u@s@r/@u@s@r", + FLD(LF_ANAG,"PTLEXRF"), + FLD(LF_ANAG,"TLEXRFX")); + set_row(21,"Telefax@20g@u@s@r/@u@s@r", + FLD(LF_ANAG,"PFAXRF"), + FLD(LF_ANAG,"FAXRF")); + set_row(22,""); + set_row(23,"Ufficio imposte@20gNumero @pn", + FLD(LF_ANAG,"UFFIIDD","@@@")); + + com = current_cursor()->curr(LF_ANAG).get("UFFIIDD"); + a = look_tab("%UID",com,"S6"); + c = look_tab("%UID",com,"S4"); + cc = look_com(a); + a = cc.get("DENCOM"); + b = cc.get("PROVCOM"); + + set_row(24,"@20gComune %s@53gProvincia %s", + (const char*)a, + (const char*)b); + set_row(25,""); + set_row(26,"Esattoria@20gC/C n. %s",(const char*)c); + set_row(27,"@20gComune %s@53gProvincia %s", + (const char*)a, + (const char*)b); + set_row(28,"@20gCodice contribuente @s", + FLD(LF_ANAG,"CODCONTR")); + set_row(29,""); + + // cerca coniuge + com = current_cursor()->curr(LF_ANAGFIS).get("CODCONIUGE"); + TLocalisamfile& af = current_cursor()->file(LF_ANAG); + TRecnotype last = af.recno(); + int k = af.getkey(); + + if (!com.empty()) + { + af.curr().zero(); + af.setkey(1); + af.put("CODANAGR",com); + af.put("TIPOA","F"); + af.read(); + } + a = af.get("RAGSOC"); + if (!com.empty()) + { + af.setkey(k); + af.readat(last); + b = a.sub(30); a = a.left(20); + } + else { a = ""; b = ""; } + + set_row(30,"Coniuge @pn@20gCognome %s", + FLD(LF_ANAGFIS,"CODCONIUGE","@@@@@"), + (const char*)a); + set_row(31,"@20gNome %s", (const char*)b); + + + set_row(32,"Dati Statistici@20gNon residente@53g@f", + FLD(LF_ANAG,"SOGGNRES")); + set_row(33,"@20gEventi naturali eccezionali@53g@s", + FLD(LF_ANAG,"EVECC")); + set_row(34,"@20gResidente in zone terremotate@53g@f", + FLD(LF_ANAG,"RESZTERR")); + set_row(35,"@20gStato civile@53g@t", + FLD(LF_ANAGFIS,"STATCIV")); + set_row(36,"@20gData variazione stato civile@53g@D", + FLD(LF_ANAGFIS,"DVARSCIV")); + set_row(37,"@20gTitolo di studio@53g@t", + FLD(LF_ANAGFIS,"TITSTU")); + // set_row(37,"@20gProvincia lavoro dipendente@61g@s"); + set_row(38,""); set_row(39,""); set_row(40,""); set_row(41,""); + + a = look_tab("%SST", + current_cursor()->curr(LF_ANAG).get("CODSTAT1"),"S0"); + set_row(42,"@20gSigla stat.1 @pn %s", + FLD(LF_ANAG,"CODSTAT1","@@@@@@@"), (const char*)a); + a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT2"),"S0"); + set_row(43,"@20gSigla stat.2 @pn ", + FLD(LF_ANAG,"CODSTAT2","@@@@@@@"), (const char*)a); + a = look_tab("%SST",current_cursor()->curr(LF_ANAG).get("CODSTAT3"),"S0"); + set_row(44,"@20gSigla stat.3 @pn ", + FLD(LF_ANAG,"CODSTAT3","@@@@@@@"), (const char*)a); + + for (int i = 45; i <= printer().formlen(); i++) + set_row(i, ""); +} + +void BA6100_App::set_scheda_ditta() +{ + set_row(1,"@bSCHEDA DITTA @r@u@pn@r@20g@bDenominaz. sociale @r@u@s", + FLD(LF_NDITTE,"CODDITTA","@@@@@"), + FLD(LF_NDITTE,"RAGSOC")); + set_row(2,"Albo artigiani@20gIscrizione all'albo @f@55gnum. @s", + FLD(LF_NDITTE,"ARTIG"), + FLD(LF_NDITTE,"NISCRAA")); + TString a = + look_com(current_cursor()->curr(LF_NDITTE).get("COMAA")).get("DENCOM"); + set_row(3,"@20gLocalita' %s@55gData @D", + (const char*)a, + FLD(LF_NDITTE,"DATAISCRAA")); + set_row(4,"Attivita'"); + + a = look_tab("%AIS",current_cursor()-> + curr(LF_NDITTE).get("CODATTPREV")); // TBC + + set_row(5,"prevalente@20gCod. @pn Desc. %s", + FLD(LF_NDITTE,"CODATTPREV","@@@@@"), + (const char*)a); + // set_row(6,"@20gGestione piu' attivita'"); + set_row(6,"@20gFrequenza versamenti@54g@t", + FLD(LF_NDITTE,"FREQVIVA")); + set_row(7,"@20gTenuta contabilita' ordinaria@54g@f", + FLD(LF_NDITTE,"CONTORD")); + set_row(8,"@20gDatore di lavoro@54g@t", + FLD(LF_NDITTE,"DATLAV")); + set_row(9,"@20gData inizio attivita'@54g@D", + FLD(LF_NDITTE,"DINIZIOATT")); + set_row(10,"Altri dati@20gRiferimento @u@s@r @54gTel. @u@4S@r/@u@S@r", + FLD(LF_NDITTE,"PERRIF"), + FLD(LF_NDITTE,"PTEL"), + FLD(LF_NDITTE,"TEL")); + set_row(11,"@20gGestione magazzino @f", + FLD(LF_NDITTE,"REGMAG")); + set_row(12,"@20gNumero unita' locali @n@54gNum.enasarco @s", + FLD(LF_NDITTE,"NULC"), + FLD(LF_NDITTE,"NENASARCO")); + set_row(13,""); + /* TBI: banca di appoggio */ + set_row(14,"Stato@20g@t",FLD(LF_NDITTE,"STATOSOC")); + set_row(15,""); set_row(16,""); +} + +void BA6100_App::set_scheda_attiv() +{ + TString dio = look_tab("%AIS",current_cursor()-> + curr(LF_ATTIV).get("CODATT"),"S0"); + + set_row(1,"@bATTIVITA'@r @pn@20g@bDescrizione:@r %s", + FLD(LF_ATTIV,"CODATT","@@@@@"), (const char*)dio); + + set_row(2,"@20gRegime agricolo@67g@f", + FLD(LF_ATTIV,"REGAGR")); + set_row(3,"@20gRegime speciale agenzie di viaggio (art.74ter)@67g@f", + FLD(LF_ATTIV,"REG74TER")); + set_row(4,"@20gAttivita' stagionale@67g@f", + FLD(LF_ATTIV,"ATTSTAG")); + set_row(5,"@20gAttivita' esercitata in piu' luoghi@67g@f", + FLD(LF_ATTIV,"ESLUOGHID")); + set_row(6,"@20gData inizio attivita'@60g@D", + FLD(LF_NDITTE,"DINIZIOATT")); + set_row(7,"@20gData variazione attivita'@60g@D", + FLD(LF_ATTIV,"DATAVARIVA")); + set_row(8,"@20gData cessazione attivita'@60g@D", + FLD(LF_ATTIV,"DCESSATT")); + set_row(9,"@20g@bCONSERVAZIONE SCRITTURE CONTABILI@r"); + + // cerca depositario + TString com = get_field(LF_ATTIV,"CODANGRDS"); + TString a = get_field(LF_ATTIV,"TIPOADS"); + TLocalisamfile& af = current_cursor()->file(LF_ANAG); + TRecnotype last = af.recno(); + af.curr().zero(); + int k = af.getkey(); + af.setkey(1); + af.curr().put("CODANAGR",com); + af.curr().put("TIPOA",a); + + TString b = af.curr().get("RAGSOC"); + com = af.curr().get("INDRF"); + if (com.empty()) com = af.curr().get("INDRES"); + TString c = af.curr().get("COMRF"); + if (c.empty) c = af.curr().get("COMRES"); + TRectype& cm = look_com(a); + af.readat(last); + af.setkey(k); + + set_row(10,"Depositario@20gCodice @pn (%s): %s", + FLD(LF_ATTIV,"CODANGRDS"), + c == 'F' ? "p.f." : "p.g.", + (const char*)b); + set_row(11,"@20gIndirizzo %s", (const char*)c); + a = cm.get("DENCOM"); b = cm.get("PROVCOM"); c = cm.get("CAPCOM"); + set_row(12,"@20gComune %s@53gProvincia %s@68gC.a.p. %s", + (const char*)a, (const char*)b, (const char*)c); + set_row(13,"@20gTenuta scritture parziali@68g@f", + FLD(LF_ATTIV,"TSCRPARZ")); + set_row(14,"Luogo@20gIndirizzo @s @s", + FLD(LF_ATTIV,"INDCS"), + FLD(LF_ATTIV,"CAPCS")); + cm = look_com(get_field(LF_ATTIV,"COMCS")); + a = cm.get("DENCOM"); b = cm.get("PROVCOM"); c = cm.get("CAPCOM"); + set_row(15,"@20gComune %s@53gProvincia %s@68gC.a.p. %s", + (const char*)a, (const char*)b, (const char*)c); + set_row(16,"@20gTelefono "); + set_row(17,""); set_row(18,""); +} + +void BA6100_App::set_scheda_registro() +{ + /* TBI */ +} + +void BA6100_App::set_scheda_unloc() +{ + set_row(1,"@bUNITA' LOCALE@20gCodice @r@u@pn@r", + FLD(LF_UNLOC,"CODULC","@@@")); + set_row(2,"@20g@bIndirizzo@r@u @s@r@68g@bNumero @r@u@s", + FLD(LF_UNLOC,"INDULC"), + FLD(LF_UNLOC,"CIVULC")); + TRectype& cc = look_com(get_field(LF_UNLOC,"COMULC")); + TString a = cc.get("DENCOM"); + TString b = cc.get("PROVCOM"); + TString c = cc.get("CAPCOM"); + set_row(3,"@20g@bComune@r@4j@u%s@r@53g@bProvincia@r @u%s@r@68g@b" + "C.a.p.@r @u%s", + (const char*)a, (const char*)b, (const char*)c); + set_row(4,""); + set_row(5,"C.C.I.A.A.@20gNumero@30g@pn", + FLD(LF_UNLOC,"NUMCCIAA","@@@@@@@")); + cc = look_com(get_field(LF_UNLOC,"COMCCIAA")); + a = cc.get("DENCOM"); + set_row(6,"@20gComune@30g%s@53gN. Meccanografico @n", + (const char*)a, + FLD(LF_UNLOC,"NUMMECC")); + set_row(7,"@20gData iscrizione @D@48gData ultima variazione @D", + FLD(LF_UNLOC,"DATAICCIAA"), + FLD(LF_UNLOC,"DATAVCCIAA")); + set_row(8,""); + set_row(9,"Autorizzazioni@20gN. R.E.C. @30g@pn@41gComunale n. @pn " + "PS n. @pn Altre @s", + FLD(LF_UNLOC,"NUMREC","@@@@@@@"), + FLD(LF_UNLOC,"AUTCOM","@@@@@"), + FLD(LF_UNLOC,"AUTPS","@@@@@@@"), + FLD(LF_UNLOC,"ALTAUT")); + set_row(10,""); + set_row(11,"Posizioni@20gINPS n.@30g@s INAIL n. @s", + FLD(LF_UNLOC,"POSINPS"), + FLD(LF_UNLOC,"POSINAIL")); + set_row(12,""); + set_row(13,"Tribunale@20gRegistro@30g@pn@44gVolume@52g@pn@64gFascicolo @pn", + FLD(LF_UNLOC,"REGTRIB","@@@@@@@@@"), + FLD(LF_UNLOC,"VOLTRIB","@@@@@@@"), + FLD(LF_UNLOC,"FASCTRIB","@@@@@")); + set_row(14,""); + set_row(15,"Locali destinati"); + set_row(16,"all'attivita'@20gMq.Locali @pn Di cui a magazzino @pn", + FLD(LF_UNLOC,"MQULC","@@@@@"), + FLD(LF_UNLOC,"MQULCMAG","@@@@@")); + set_row(17,""); set_row(18,""); +} + +void BA6100_App::set_scheda_socio() +{ + int rw; + TString b1, b2, b3; + + TLocalisamfile& ana = current_cursor()->file(LF_ANAG); + TLocalisamfile& soc = current_cursor()->file(LF_SOCI); + TRecnotype rno = ana.recno(); + int k = ana.getkey(); + + ana.zero(); + ana.put("TIPOA",soc.get("TIPOASOC")); + ana.put("CODANAGR",soc.get("CODANAGRSO")); + ana.read(); + + TString codconiuge = ""; + TLocalisamfile* anaf; + + if (soc.get("TIPOASOC") == "F") + { + TRecnotype rn = 0; int kk = 1; + + if (_pr_what == anafis) + { + anaf = ¤t_cursor()->file(LF_ANAGFIS); + rn = anaf->recno(); + kk = anaf->getkey(); + } + else + { + anaf = new TLocalisamfile(LF_ANAGFIS); + anaf->read(); + } + + anaf->zero(); + anaf->put("CODANAGR",soc.get("CODANAGRSO")); + anaf->read(); + TRectype& com = look_com(anaf->get("COMNASC")); + + set_row(1,"@bSOCIO@r @s / @pn@20g@bCognome@r @s", + FLD(LF_SOCI,"TIPOASOC"), + FLD(LF_SOCI,"CODANAGRSO","@@@@@"), + FLD(LF_ANAG,"RAGSOC",0,29)); + set_row(2,"@20g@bNome@r @s@53g@bCod.fisc.@r @s", + FLD(LF_ANAG,"RAGSOC",30,50), + FLD(LF_ANAG,"COFI")); + set_row(3,""); + + b1 = anaf->get_date("DATANASC").string(4); + b2 = anaf->get("SESSO"); + b3 = anaf->get("STATONASC").empty() ? + "Italiana" : anaf->get("STATONASC"); + + set_row(4,"Nascita@20gData@30g%S@42gSesso %S@53gCittadinanza %S", + (const char*)b1, + (const char*)b2, + (const char*)b3); + + b1 = com.get("DENCOM"); + b2 = com.get("PROVCOM"); + + set_row(5,"@20gComune@30g%S@53gProvincia %S", + (const char*)b1, + (const char*)b2); + rw = 6; + + codconiuge = "Cod.coniuge "; + codconiuge << anaf->get("CODCONIUGE"); + + if (_pr_what == anafis) + { anaf->setkey(kk); anaf->readat(rn); } + else delete anaf; + } + else + { + set_row(1,"@bSOCIO@r @S / @pN@20gR.soc. @s"); + set_row(2,"@20gCod.fisc. @s @P.IVA @s"); + rw = 3; + } + set_row(rw,""); + + TRectype& com = look_com(ana.get("COMRES")); + + b1 = com.get("DENCOM"); + b2 = com.get("PROVCOM"); + b3 = com.get("CAPCOM"); + + set_row(rw+1,"Residenza@20gIndirizzo @S", FLD(LF_ANAG,"INDRES")); + set_row(rw+2,"@20gComune %S@53gProvincia %S@68gC.a.p. %S", + (const char*)b1, + (const char*)b2, + (const char*)b3); + + set_row(rw+3,""); + + TString car = look_tab("%CRS",soc.get("CODCAR")); + + set_row(rw+4,"Carica@20gCod. @pN@30g%s@62gScadenza @lD", + FLD(LF_SOCI,"CODCAR","@@"), + (const char*)car, + FLD(LF_SOCI,"SCADCAR")); + + set_row(rw+5,"Azioni@20gN.quote @N = @7.3N%% Redd. @7.3N%% Perd. @7.3N%%", + FLD(LF_SOCI,"NQUOTEAZ"), + FLD(LF_SOCI,"PERCQUAZ"), + FLD(LF_SOCI,"PERCAZREDD"), + FLD(LF_SOCI,"PERCAZPERD")); + set_row(rw+6,"@20gTitolo proprieta' @S Emolumento @pN", + FLD(LF_SOCI,"TITPROP"), + FLD(LF_SOCI,"EMOLUMENTO","###.###.###.###")); + set_row(rw+7,"%% rit.su dividendi @7.3n%% Tipo azione @s " + "Partecipaz. assemblea @f", + FLD(LF_SOCI,"PERCRITDIV"), + FLD(LF_SOCI,"TIPOAZ"), + FLD(LF_SOCI,"PARTASS")); + set_row(rw+8,"Modello 740 @s @57g%s", + FLD(LF_SOCI,"Q740"), + (const char*)codconiuge); + set_row(rw+9,"Attiv. prevalente @f@37gQuadro 750 @s @53g" + "Mesi lavorati art.120 c1 @2n", + FLD(LF_SOCI,"ATTPREV"), + FLD(LF_SOCI,"QUATTPREV"), + FLD(LF_SOCI,"MLAV120C1")); + + set_row(rw+10,"@20gRichiesta qualifica @s@53gMesi lavorati art.120 c2 @2n", + FLD(LF_SOCI,"RICQUAL"), + FLD(LF_SOCI,"MLAV120C2")); + set_row(rw+11,"Note@20g@s", FLD(LF_SOCI,"NOTE")); + set_row(rw+12,"Data ultimo agg. @20gAnagrafica @d @53gSocio @d", + FLD(LF_ANAG,"DATAAGG"), + FLD(LF_SOCI,"DATAAGG")); + set_row(rw+13,""); set_row(rw+14,""); + + ana.setkey(k); + ana.readat(rno); +} + + +void BA6100_App::set_rubriche() +{ + // preprocess_page will fill the vars + set_row(2,"@32g@35S", FLD(LF_ANAG,"INDRES")); + set_row(3,"@32g#-24T CAP #5T PR #2T", &_com, &_cap, &_prov); + set_row(4,"@32gTel. #-36T", &_phone); + set_row(5,""); + + if (_pr_what == nditte) + { + set_row(1,"@b$[r]@pN@r$[n]@3j@50S", + FLD(LF_NDITTE,"CODDITTA","@@@@@"), + FLD(LF_NDITTE,"RAGSOC")); + } + else if (_pr_what == anafis) + { + set_row(1,"@b$[b]@pN$[n]@r@3j@S @S", FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC",0,29), FLD(LF_ANAG,"RAGSOC",30,50)); + } + else + { + set_row(1,"@b$[b]@pN$[n]@r@3j@50S", FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC")); + set_row(4,"@56g Rif @12S", FLD(LF_ANAGGIU,"PERRIF")); + } +} + + + +void BA6100_App::set_elenco() +{ + switch(_pr_what) + { + case anafis: + case anagiu: + if (_pr_what == anafis) + { + if (_inclditte) + set_row(1,"$[b]@pN$[n]@4j@S @S@50g$[r]@pN$[n]@66g@S", + FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC",0,29), + FLD(LF_ANAG,"RAGSOC",30,50), + FLD(LF_NDITTE,"CODDITTA","@@@@@"), + FLD(LF_NDITTE,"RAGSOC")); + else + set_row(1,"$[b]@pN$[n]@4j@S @S", + FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC",0,29), + FLD(LF_ANAG,"RAGSOC",30,50)); + } + else + { + if (_inclditte) + set_row(1,"$[b]@pN$[n]@4j@50S@50g$[r]@pN$[n]@66g@S", + FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC"), + FLD(LF_NDITTE,"CODDITTA","@@@@@"), + FLD(LF_NDITTE,"RAGSOC")); + + else + set_row(1,"$[b]@pN$[n]@4j@50S", + FLD(LF_ANAG,"CODANAGR","@@@@@"), + FLD(LF_ANAG,"RAGSOC")); + } + break; + case nditte: + set_row(1,"$[r]@pN$[n]@10g@S@50g@S @pN@3j@S", + FLD(LF_NDITTE,"CODDITTA","@@@@"), + FLD(LF_NDITTE,"RAGSOC"), + FLD(LF_NDITTE,"TIPOA"), + FLD(LF_ANAG, "CODANAGR", "@@@@@"), + FLD(LF_ANAG, "RAGSOC")); + break; + } + set_row(2,""); +} + +void BA6100_App::set_schede() +{ + switch(_pr_what) + { + case anafis: set_scheda_anafis(); break; + case anagiu: set_scheda_anagiu(); break; + case nditte: set_scheda_ditta(); break; + } +} + + +void BA6100_App::set_headers() +{ + reset_header(); + set_background(); + if (_pr_type == elenco) + { + switch(_pr_what) + { + case anafis: + case anagiu: +#if XVT_OS != XVT_OS_SCOUNIX + set_background("W1l{1 2 132 2}W4l{1 5 132 5}"); +#else + set_header(2,(const char*)sep); + set_header(5,(const char*)sep); +#endif + set_header(1,"@bELENCO PERSONE %s@82gStudio@96gData" + "@101g @< @110g Pag. @#", _pr_what == anafis ? "FISICHE" : + "GIURIDICHE"); + set_header(3,"@iCodice@55gCodice"); + set_header(4,"@iAnagr. Ragione sociale/cognome e nome@55gDitta" + "@66gDenominazione sociale"); + set_header(6,""); + break; + case nditte: +#if XVT_OS != XVT_OS_SCOUNIX + set_background("W1l{1 2 132 2}W4l{1 5 132 5}"); +#else + set_header(2,(const char*)sep); + set_header(5,(const char*)sep); +#endif + set_header(1,"@bELENCO DITTE@82gStudio@96gData" + "@101g @< @110 @#"); + set_header(3,"@iCodice@50gT"); + set_header(4,"@iAnagr. Denominazione sociale@50gP Codice" + "@61gRagione sociale/Cognome e nome"); + set_header(6,""); + } + } + else if (_pr_type == rubriche) + { + switch (_pr_what) + { + case anafis: + case anagiu: +#if XVT_OS != XVT_OS_SCOUNIX + set_background("W1l{1 2 132 2}W4l{1 4 132 4}"); +#else + set_header(2,(const char*)sep); + set_header(4,(const char*)sep); +#endif + set_header(1,"@bRUBRICA PERSONE %s@40gStudio@53gData @< pag. @#", + _pr_what == anagiu ? "GIURIDICHE" : "FISICHE"); + set_header(3,"@iCodice Cognome e nome"); + set_header(5,""); + break; + case nditte: +#if XVT_OS != XVT_OS_SCOUNIX + set_background("W1l{1 2 132 2}W4l{1 4 132 4}"); +#else + set_header(2,(const char*)sep); + set_header(4,(const char*)sep); +#endif + set_header(1,"@bRUBRICA DITTE@40gStudio@53gData @< pag. @#"); + set_header(3,"@iCodice Cognome e nome"); + set_header(5,""); + break; + } + } + else if (_pr_type == schede) + { + set_header(1,""); + } +} + + +void BA6100_App::set_etichette() +{ + int namerow = 0; + + for (int i = 2; i <= _rows_et; i++) + set_row(i, ""); + + if (_is_piv) + { + set_row(_piv_row, TString(format("@%dg#t", _piv_col)), &_cofi); + _frpos[_piv_row - 1] = TRUE; + } + if (_is_cod) + { + set_row(_cod_row, TString(format("@%dg#t", _cod_col)), &_cod); + _frpos[_cod_row - 1] = TRUE; + } + + // name goes in first free row + for (i = 0; i < _rows_et; i++) + { + if (!_frpos[i]) + { if (namerow == 0) namerow = i; } + } + + namerow++; reset_row(namerow); + + if (_pr_what == anagiu) + set_row(namerow,TString(format("@%dg#t",_ind_col)), &_name); + else + { + set_row(namerow,TString(format("@%dg#t #t #t",_ind_col)), &_sex, &_name, &_surname); + } + + set_row(_ind_row,TString(format("@%dg#t #t", _ind_col)), &_address, &_civ); + set_row(_ind_row+1, TString(format("@%dg#t #t #t", _ind_col)), + &_cap, &_com, &_prov); + + if (!_stato.empty()) + { + // print state on first free row + for (i = _ind_row+1; i < _rows_et; i++) + if (!_frpos[i] && i != (namerow - 1)) + set_row(i+1, TString(format("@%dg#t", _ind_col)), &_stato); + } + +} diff --git a/ba/ba6200.cpp b/ba/ba6200.cpp index 91189ab67..be356cb84 100755 --- a/ba/ba6200.cpp +++ b/ba/ba6200.cpp @@ -1,286 +1,285 @@ -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "ba6.h" -#include "ba6200.h" - -const MAXSTR = 128; -static char __tmp [MAXSTR]; -static TFixed_string tmp (__tmp, MAXSTR); - -class BA6200_application : public TPrintapp -{ - TRelation* _rel; - TMask* _msk; - TLocalisamfile* _comuni; - TParagraph_string * _descr_comune; - - int _cur1, _cur2; - TString _provcom_msk, _com, _dencom, _provcom, _capcom; - TString _codistat; - int _uffiidd1, _uffiidd2, _uffiidd3, _uffiva1, _uffiva2, _uffiva3; - int _uffreg, _uffconc, _uffcserv, _uffesprov, _uffescom, _terrmon; - real _alqici; - TDate _data_stampa; - -protected: - virtual void user_create() ; - virtual void user_destroy(); - virtual bool set_print(int m); - - virtual bool preprocess_page (int,int); - -public: - void crea_intestazione(); - void setta_righe_descr(TParagraph_string*); - - BA6200_application(); -}; - -bool BA6200_application::preprocess_page(int file, int counter) -{ - - reset_print(); - - if (counter) - return TRUE; - - if (file == LF_COMUNI) - { - _provcom = current_cursor()->curr(LF_COMUNI).get(COM_PROVCOM); - - if ((_provcom == _provcom_msk) || (_provcom_msk == "")) - { - _com = current_cursor()->curr(LF_COMUNI).get(COM_COM); - _dencom = current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); - *_descr_comune = (const char*) _dencom; - _capcom = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); - _codistat = current_cursor()->curr(LF_COMUNI).get(COM_CODISTAT); - _uffiidd1 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIIDD1); - _uffiidd2 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIIDD2); - _uffiidd3 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIIDD3); - _uffiva1 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIVA1); - _uffiva2 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIVA2); - _uffiva3 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIVA3); - _uffreg = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFREG); - _uffconc = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFCONC); - _uffcserv = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFCSERV); - _uffesprov = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFESPROV); - _uffescom = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFESCOM); - _alqici = current_cursor()->curr(LF_COMUNI).get_real(COM_ALIQICI); - _terrmon = current_cursor()->curr(LF_COMUNI).get_int(COM_TERRMON); - - setta_righe_descr(_descr_comune); - - set_row (1,"@0g%4s", (const char*) _com); - set_row (1,"@33g%5s", (const char*) _provcom); - set_row (1,"@39g%5s", (const char*) _capcom); - set_row (1,"@46g%6s", (const char*) _codistat); - set_row (1,"@54g%r", &_alqici); - - if (_terrmon != 0) - set_row (1,"@63g%d", _terrmon); - - if (_uffiidd1 != 0) - set_row (1,"@72g%03d", _uffiidd1); - - if (_uffiidd2 != 0) - set_row (1,"@76g%03d", _uffiidd2); - - if (_uffiidd3 != 0) - set_row (1,"@80g%03d", _uffiidd3); - - if (_uffiva1 != 0) - set_row (1,"@85g%03d", _uffiva1); - - if (_uffiva2 != 0) - set_row (1,"@89g%03d", _uffiva2); - - if (_uffiva3 != 0) - set_row (1,"@93g%03d", _uffiva3); - - if (_uffreg != 0) - set_row (1,"@98g%03d", _uffreg); - - if (_uffconc != 0) - set_row (1,"@104g%03d", _uffconc); - - if (_uffcserv != 0) - set_row (1,"@110g%03d", _uffcserv); - - if (_uffesprov != 0) - set_row (1,"@115g%03d", _uffesprov); - - if (_uffescom != 0) - set_row (1,"@119g%03d", _uffescom); - - return TRUE; - } - else - return FALSE; - } - return TRUE; -} - -void BA6200_application::setta_righe_descr(TParagraph_string* str) -{ - const char* r; - int i = 1; - - while ((r = str->get()) != NULL) - { - set_row (i,"@7g%s", r); - i++; - } -} - -BA6200_application::BA6200_application() -{ -} - -bool BA6200_application::set_print(int) -{ - KEY tasto; - TLocalisamfile* fl; - TString statoini,statofine,codiceini,codicefine,denomini,denomfine; - - tasto = _msk->run(); - - if (tasto == K_ENTER) - { - _data_stampa = _msk->get (F_DATA); - int scelta = _msk->get_int (F_SCELTA); - _provcom_msk = _msk->get (F_PROVCOM); - - if (scelta == 1) - { - statoini = _msk->get(F_STATOINI); - codiceini = _msk->get(F_CODICEINI); - statofine = _msk->get(F_STATOFINE); - codicefine = _msk->get(F_CODICEFINE); - - reset_files(); //resetta l'albero di stampa - add_file(LF_COMUNI); - - select_cursor(_cur1); - fl = current_cursor()->file(LF_COMUNI); - TRectype da (fl->curr()); - TRectype a (fl->curr()); - - da.zero(); - a.zero(); - - da.put(COM_STATO,statoini); - da.put(COM_COM ,codiceini); - - a.put(COM_STATO,statofine); - a.put(COM_COM ,codicefine); - - current_cursor()->setregion(da, a); - } - else - if (scelta == 2) - { - denomini = _msk->get(F_NOMEINI); - denomfine = _msk->get(F_NOMEFINE); - - select_cursor(_cur2); - - reset_files(); - add_file(LF_COMUNI); - - fl = current_cursor()->file(LF_COMUNI); - TRectype da (fl->curr()); - TRectype a (fl->curr()); - - da.zero(); - a.zero(); - - da.put(COM_DENCOM, denomini); - - a.put (COM_DENCOM, denomfine); - - current_cursor()->setregion(da, a); - } - - //set_print_zero(); - crea_intestazione(); - - return TRUE; - } - else - return FALSE; -} - -void BA6200_application::crea_intestazione() -{ - TString sep(132); - TString data_stampa; - - reset_header(); - - sep.fill('-'); - set_header (1, (const char *) sep); - sep = ""; - sep << "Pag. @#"; - sep.right_just(132); - set_header (2,(const char*) sep); - - set_header (2,"@0gARCHIVIO COMUNI@91gSTUDIO@104gDATA"); - data_stampa = _data_stampa.string(); - set_header (2,"@109g%10s", (const char*) data_stampa); - - sep = ""; - sep.fill('-'); - set_header (3, (const char *) sep); - - set_header(5,"@0gCodice@7gDenominazione@33gProv.@40gCap@45gCd.Istat@54gAl.ICI@61gMont.@67gUff.@74gII.DD.@87gI.V.A.@97gRegi.@103gConc.@109gServ.@115gEsatt."); - set_header (6,"@0g------@7g-------------------------@33g-----@39g-----"); - set_header (6,"@45g--------@54g------@61g-----@72g-----------"); - set_header (6,"@85g------------@97g-----@103g-----@109g-----@115g-------"); -} - -void BA6200_application::user_create() -{ - _rel = new TRelation (LF_COMUNI); - - _cur1 = add_cursor(new TCursor(_rel,"",1)); - - _cur2 = add_cursor(new TCursor(_rel,"",2)); - - _comuni = new TLocalisamfile (LF_COMUNI); - - _descr_comune = new TParagraph_string ("",25); - - _msk = new TMask("ba6200a"); -} - -void BA6200_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _comuni; - delete _descr_comune; -} - -int ba6200(int argc, char* argv[]) -{ - - BA6200_application a; - - a.run(argc, argv, "Stampa Comuni"); - - return 0; -} - - - - - +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "ba6.h" +#include "ba6200.h" + +const MAXSTR = 128; +static char __tmp [MAXSTR]; +static TFixed_string tmp (__tmp, MAXSTR); + +class BA6200_application : public TPrintapp +{ + TRelation* _rel; + TMask* _msk; + TLocalisamfile* _comuni; + TParagraph_string * _descr_comune; + + int _cur1, _cur2; + TString _provcom_msk, _com, _dencom, _provcom, _capcom; + TString _codistat; + int _uffiidd1, _uffiidd2, _uffiidd3, _uffiva1, _uffiva2, _uffiva3; + int _uffreg, _uffconc, _uffcserv, _uffesprov, _uffescom, _terrmon; + real _alqici; + TDate _data_stampa; + +protected: + virtual void user_create() ; + virtual void user_destroy(); + virtual bool set_print(int m); + + virtual bool preprocess_page (int,int); + +public: + void crea_intestazione(); + void setta_righe_descr(TParagraph_string*); + + BA6200_application(); +}; + +bool BA6200_application::preprocess_page(int file, int counter) +{ + + reset_print(); + + if (counter) + return TRUE; + + if (file == LF_COMUNI) + { + _provcom = current_cursor()->curr(LF_COMUNI).get(COM_PROVCOM); + + if ((_provcom == _provcom_msk) || (_provcom_msk == "")) + { + _com = current_cursor()->curr(LF_COMUNI).get(COM_COM); + _dencom = current_cursor()->curr(LF_COMUNI).get(COM_DENCOM); + *_descr_comune = (const char*) _dencom; + _capcom = current_cursor()->curr(LF_COMUNI).get(COM_CAPCOM); + _codistat = current_cursor()->curr(LF_COMUNI).get(COM_CODISTAT); + _uffiidd1 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIIDD1); + _uffiidd2 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIIDD2); + _uffiidd3 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIIDD3); + _uffiva1 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIVA1); + _uffiva2 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIVA2); + _uffiva3 = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFIVA3); + _uffreg = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFREG); + _uffconc = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFCONC); + _uffcserv = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFCSERV); + _uffesprov = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFESPROV); + _uffescom = current_cursor()->curr(LF_COMUNI).get_int(COM_UFFESCOM); + _alqici = current_cursor()->curr(LF_COMUNI).get_real(COM_ALIQICI); + _terrmon = current_cursor()->curr(LF_COMUNI).get_int(COM_TERRMON); + + setta_righe_descr(_descr_comune); + + set_row (1,"@0g%4s", (const char*) _com); + set_row (1,"@33g%5s", (const char*) _provcom); + set_row (1,"@39g%5s", (const char*) _capcom); + set_row (1,"@46g%6s", (const char*) _codistat); + set_row (1,"@54g%r", &_alqici); + + if (_terrmon != 0) + set_row (1,"@63g%d", _terrmon); + + if (_uffiidd1 != 0) + set_row (1,"@72g%03d", _uffiidd1); + + if (_uffiidd2 != 0) + set_row (1,"@76g%03d", _uffiidd2); + + if (_uffiidd3 != 0) + set_row (1,"@80g%03d", _uffiidd3); + + if (_uffiva1 != 0) + set_row (1,"@85g%03d", _uffiva1); + + if (_uffiva2 != 0) + set_row (1,"@89g%03d", _uffiva2); + + if (_uffiva3 != 0) + set_row (1,"@93g%03d", _uffiva3); + + if (_uffreg != 0) + set_row (1,"@98g%03d", _uffreg); + + if (_uffconc != 0) + set_row (1,"@104g%03d", _uffconc); + + if (_uffcserv != 0) + set_row (1,"@110g%03d", _uffcserv); + + if (_uffesprov != 0) + set_row (1,"@115g%03d", _uffesprov); + + if (_uffescom != 0) + set_row (1,"@119g%03d", _uffescom); + + return TRUE; + } + else + return FALSE; + } + return TRUE; +} + +void BA6200_application::setta_righe_descr(TParagraph_string* str) +{ + const char* r; + int i = 1; + + while ((r = str->get()) != NULL) + { + set_row (i,"@7g%s", r); + i++; + } +} + +BA6200_application::BA6200_application() +{ +} + +bool BA6200_application::set_print(int) +{ + KEY tasto; + TString statoini,statofine,codiceini,codicefine,denomini,denomfine; + + tasto = _msk->run(); + + if (tasto == K_ENTER) + { + _data_stampa = _msk->get (F_DATA); + int scelta = _msk->get_int (F_SCELTA); + _provcom_msk = _msk->get (F_PROVCOM); + + if (scelta == 1) + { + statoini = _msk->get(F_STATOINI); + codiceini = _msk->get(F_CODICEINI); + statofine = _msk->get(F_STATOFINE); + codicefine = _msk->get(F_CODICEFINE); + + reset_files(); //resetta l'albero di stampa + add_file(LF_COMUNI); + + select_cursor(_cur1); + TLocalisamfile& fl = current_cursor()->file(LF_COMUNI); + TRectype da (fl.curr()); + TRectype a (fl.curr()); + + da.zero(); + a.zero(); + + da.put(COM_STATO,statoini); + da.put(COM_COM ,codiceini); + + a.put(COM_STATO,statofine); + a.put(COM_COM ,codicefine); + + current_cursor()->setregion(da, a); + } + else + if (scelta == 2) + { + denomini = _msk->get(F_NOMEINI); + denomfine = _msk->get(F_NOMEFINE); + + select_cursor(_cur2); + + reset_files(); + add_file(LF_COMUNI); + + TLocalisamfile& fl = current_cursor()->file(LF_COMUNI); + TRectype da (fl.curr()); + TRectype a (fl.curr()); + + da.zero(); + a.zero(); + + da.put(COM_DENCOM, denomini); + + a.put (COM_DENCOM, denomfine); + + current_cursor()->setregion(da, a); + } + + //set_print_zero(); + crea_intestazione(); + + return TRUE; + } + else + return FALSE; +} + +void BA6200_application::crea_intestazione() +{ + TString sep(132); + TString data_stampa; + + reset_header(); + + sep.fill('-'); + set_header (1, (const char *) sep); + sep = ""; + sep << "Pag. @#"; + sep.right_just(132); + set_header (2,(const char*) sep); + + set_header (2,"@0gARCHIVIO COMUNI@91gSTUDIO@104gDATA"); + data_stampa = _data_stampa.string(); + set_header (2,"@109g%10s", (const char*) data_stampa); + + sep = ""; + sep.fill('-'); + set_header (3, (const char *) sep); + + set_header(5,"@0gCodice@7gDenominazione@33gProv.@40gCap@45gCd.Istat@54gAl.ICI@61gMont.@67gUff.@74gII.DD.@87gI.V.A.@97gRegi.@103gConc.@109gServ.@115gEsatt."); + set_header (6,"@0g------@7g-------------------------@33g-----@39g-----"); + set_header (6,"@45g--------@54g------@61g-----@72g-----------"); + set_header (6,"@85g------------@97g-----@103g-----@109g-----@115g-------"); +} + +void BA6200_application::user_create() +{ + _rel = new TRelation (LF_COMUNI); + + _cur1 = add_cursor(new TCursor(_rel,"",1)); + + _cur2 = add_cursor(new TCursor(_rel,"",2)); + + _comuni = new TLocalisamfile (LF_COMUNI); + + _descr_comune = new TParagraph_string ("",25); + + _msk = new TMask("ba6200a"); +} + +void BA6200_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _comuni; + delete _descr_comune; +} + +int ba6200(int argc, char* argv[]) +{ + + BA6200_application a; + + a.run(argc, argv, "Stampa Comuni"); + + return 0; +} + + + + + diff --git a/ba/bast%ivd.uml b/ba/bast%ivd.uml index 29a7b435b..62181d676 100755 --- a/ba/bast%ivd.uml +++ b/ba/bast%ivd.uml @@ -1,119 +1,124 @@ -#include "ba3200.h" - -PAGE "Stampa Tabella IV direttiva CEE" -1 -1 69 8 - -STRING F_INIZIO1 1 -BEGIN - PROMPT 2 1 "Da sezione " - FLAGS "U" - HELP "Inserire il codice d'inizio " - FIELD CODTAB[1,1] - USE %IVD - INPUT CODTAB[1,1] F_INIZIO1 - INPUT CODTAB[2,2] F_INIZIO2 - INPUT CODTAB[3,6] F_INIZIO3 - INPUT CODTAB[7,8] F_INIZIO4 - DISPLAY "Sezione" CODTAB[1,1] - DISPLAY "Lettera" CODTAB[2,2] - DISPLAY "Classe " CODTAB[3,6] - DISPLAY "Numero" CODTAB[7,8] - DISPLAY "Descrizione@50" S0 - OUTPUT F_INIZIO1 CODTAB[1,1] - OUTPUT F_INIZIO2 CODTAB[2,2] - OUTPUT F_INIZIO3 CODTAB[3,6] - OUTPUT F_INIZIO4 CODTAB[7,8] - GROUP 1 -END - -STRING F_INIZIO2 1 -BEGIN - PROMPT 17 1 "Da lettera " - FLAGS "U" - HELP "Inserire il codice d'inizio " - FIELD CODTAB[2,2] - COPY ALL F_INIZIO1 - GROUP 1 -END - -NUMBER F_INIZIO3 8 4 -BEGIN - PROMPT 32 1 "Da classe " - FLAGS "UM" - HELP "Inserire il codice d'inizio " - FIELD CODTAB[3,6] - COPY ALL F_INIZIO1 - GROUP 1 -END - -NUMBER F_INIZIO4 2 -BEGIN - PROMPT 53 1 "Da numero " - FLAGS "RZ" - HELP "Inserire il codice d'inizio " - FIELD CODTAB[7,8] - COPY ALL F_INIZIO1 - GROUP 1 -END - -STRING F_FINE1 1 -BEGIN - PROMPT 2 3 "A sezione " - HELP "Inserire il codice di fine " - FIELD CODTAB[1,1] - FLAGS "U" - COPY USE F_INIZIO1 - INPUT CODTAB[1,1] F_FINE1 - INPUT CODTAB[2,2] F_FINE2 - INPUT CODTAB[3,6] F_FINE3 - INPUT CODTAB[7,8] F_FINE4 - COPY DISPLAY F_INIZIO1 - OUTPUT F_FINE1 CODTAB[1,1] - OUTPUT F_FINE2 CODTAB[2,2] - OUTPUT F_FINE3 CODTAB[3,6] - OUTPUT F_FINE4 CODTAB[7,8] - GROUP 2 -END - -STRING F_FINE2 1 -BEGIN - PROMPT 17 3 "A lettera " - FLAGS "U" - COPY ALL F_FINE1 - HELP "Inserire il codice di fine " - FIELD CODTAB[2,2] - GROUP 2 -END - -NUMBER F_FINE3 8 4 -BEGIN - PROMPT 32 3 "A classe " - FLAGS "UM" - HELP "Inserire il codice di fine " - FIELD CODTAB[3,6] - COPY ALL F_FINE1 - GROUP 2 -END - -NUMBER F_FINE4 2 -BEGIN - PROMPT 53 3 "A numero " - FLAGS "RZ" - HELP "Inserire il codice di fine " - FIELD CODTAB[7,8] - COPY ALL F_FINE1 - GROUP 2 -END - -BUTTON DLG_OK 8 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 8 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE -ENDMASK - +#include "ba3200.h" + +PAGE "Stampa Tabella IV direttiva CEE" -1 -1 68 9 + +GROUPBOX DLG_NULL 66 3 +BEGIN + PROMPT 1 1 "@bDa codice" +END + +STRING F_INIZIO1 1 +BEGIN + PROMPT 2 2 "Sezione " + FLAGS "U" + HELP "Codice da cui iniziare la stampa" + FIELD CODTAB[1,1] + USE %IVD + INPUT CODTAB[1,1] F_INIZIO1 + INPUT CODTAB[2,2] F_INIZIO2 + INPUT CODTAB[3,6] F_INIZIO3 + INPUT CODTAB[7,8] F_INIZIO4 + DISPLAY "Sezione" CODTAB[1,1] + DISPLAY "Lettera" CODTAB[2,2] + DISPLAY "Classe " CODTAB[3,6] + DISPLAY "Numero" CODTAB[7,8] + DISPLAY "Descrizione@50" S0 + OUTPUT F_INIZIO1 CODTAB[1,1] + OUTPUT F_INIZIO2 CODTAB[2,2] + OUTPUT F_INIZIO3 CODTAB[3,6] + OUTPUT F_INIZIO4 CODTAB[7,8] + GROUP 1 +END + +STRING F_INIZIO2 1 +BEGIN + PROMPT 17 2 "Lettera " + FLAGS "U" + FIELD CODTAB[2,2] + COPY ALL F_INIZIO1 + GROUP 1 +END + +NUMBER F_INIZIO3 8 4 +BEGIN + PROMPT 31 2 "Classe " + FLAGS "UM" + FIELD CODTAB[3,6] + COPY ALL F_INIZIO1 + GROUP 1 +END + +NUMBER F_INIZIO4 2 +BEGIN + PROMPT 52 2 "Numero " + FLAGS "RZ" + FIELD CODTAB[7,8] + COPY ALL F_INIZIO1 + GROUP 1 +END + +GROUPBOX DLG_NULL 66 3 +BEGIN + PROMPT 1 4 "@bA Codice" +END + +STRING F_FINE1 1 +BEGIN + PROMPT 2 5 "Sezione " + HELP "Codice finale da stampare" + FIELD CODTAB[1,1] + FLAGS "U" + COPY USE F_INIZIO1 + INPUT CODTAB[1,1] F_FINE1 + INPUT CODTAB[2,2] F_FINE2 + INPUT CODTAB[3,6] F_FINE3 + INPUT CODTAB[7,8] F_FINE4 + COPY DISPLAY F_INIZIO1 + OUTPUT F_FINE1 CODTAB[1,1] + OUTPUT F_FINE2 CODTAB[2,2] + OUTPUT F_FINE3 CODTAB[3,6] + OUTPUT F_FINE4 CODTAB[7,8] + GROUP 2 +END + +STRING F_FINE2 1 +BEGIN + PROMPT 17 5 "Lettera " + FLAGS "U" + COPY ALL F_FINE1 + FIELD CODTAB[2,2] + GROUP 2 +END + +NUMBER F_FINE3 8 4 +BEGIN + PROMPT 31 5 "Classe " + FLAGS "UM" + FIELD CODTAB[3,6] + COPY ALL F_FINE1 + GROUP 2 +END + +NUMBER F_FINE4 2 +BEGIN + PROMPT 52 5 "Numero " + FLAGS "RZ" + FIELD CODTAB[7,8] + COPY ALL F_FINE1 + GROUP 2 +END + +BUTTON DLG_PRINT 10 2 +BEGIN + PROMPT -12 -1 "~Stampa" + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE +ENDMASK + diff --git a/ba/prassi.mnu b/ba/prassi.mnu index 07b74e20a..15351fa14 100755 --- a/ba/prassi.mnu +++ b/ba/prassi.mnu @@ -1,130 +1,132 @@ -0|Menu Principale| -0|Anagrafiche|1 -0|Contabilita'|4 -0|Manutenzione|ba1 -1|Gestione Anagrafiche|1 -1|Persone fisiche|ba4 -1 F -1|Persone giuridiche|ba4 -1 G -1|Ditte|ba4 -2 -1|Unita' Locali|ba4 -3 -1|Attivita'|ba4 -4 -1|Soci|ba4 -5 -1|Ricerca Soci|ba5 -1|Tabelle ministeriali|11 -1|Tabelle|2 -1|Stampa anagrafiche|ba6 -0 -1|Stampa tabelle|3 -1|Stampa tabelle ministeriali|12 -1|Stampa numerazione registri|ba3 -2 -2|Tabelle|1 -2|Codici IVA|ba3 -0 %iva -2|Codici Attivita'|ba3 -0 %ais -2|Cond. di pagamento|ba3 -0 %cpg -2|Libri sociali|ba3 -0 %itl -2|Banche|ba3 -0 %ban -2|Codici statistici|ba3 -0 %stt -2|Cariche sociali|ba3 -0 %crs -2|Vecchi cod.Attivita'|ba3 -0 %ois -2|Stati esteri|ba3 -0 %sta -2|Valute|ba3 -0 %val -2|Lingue|ba3 -0 %lng -3|Stampa tabelle|3 -3|Codici IVA|ba3 -1 %iva -3|Codici Attivita'|ba3 -1 %ais -3|Cond. di pagamento|ba3 -1 %cpg -3|Libri sociali|ba3 -1 %itl -3|Banche|ba3 -1 %ban -3|Codici statistici|ba3 -1 %stt -3|Cariche sociali|ba3 -1 %crs -3|Vecchi cod.Attivita'|ba3 -1 %ois -3|Stati esteri|ba3 -1 %sta -3|Valute|ba3 -1 %val -3|Lingue|ba3 -1 %lng -4|Contabilita'|2 -4|Persone fisiche|ba4 -1 F -4|Persone giuridiche|ba4 -1 G -4|Ditte|ba4 -2 -4|Tabelle studio|5 -4|Stampa tabelle studio|6 -4|Scelta contabilita'|13|F -4|IVA|10 -4|Parametri di studio|cg5 -0 -4|Gestione Libro Unico|14 -5|Tabelle studio| -5|Tipi documento|ba3 -0 %tpd -5|Cond. di pagamento|ba3 -0 %cpg -5|Descrizioni aggiuntive|ba3 -0 %dpn -5|Codici IVA|ba3 -0 %iva -5|Codici Attivita'|ba3 -0 %ais -5|Uffici IVA|ba3 -0 %uiv -5|Libri sociali|ba3 -0 %itl -5|Banche|ba3 -0 %ban -5|IV direttiva CEE|ba3 -0 %ivd -5|Valute|ba3 -0 %val -5|Lingue|ba3 -0 %lng -6|Stampa tabelle studio| -6|Cond. di pagamento|ba3 -1 %cpg -6|Descrizioni aggiuntive|ba3 -1 %dpn -6|Codici IVA|ba3 -1 %iva -6|Codici Attivita'|ba3 -1 %ais -6|Uffici IVA|ba3 -1 %uiv -6|Libri sociali|ba3 -1 %itl -6|Banche|ba3 -1 %ban -6|IV direttiva CEE|ba3 -1 %ivd -6|Valute|ba3 -1 %val -6|Lingue|ba3 -1 %lng -7|Tabelle ditta| -7|Parametri ditta|cg5 -1 -7|Registri|ba3 -0 reg -7|Piano dei conti|cg0 -0 -7|Causali|cg0 -4 -7|Clienti/Fornitori|cg0 -1 -7|Banche|ba3 -0 %ban -7|Esercizi|ba3 -0 esc -8|Stampa tabelle ditta|3 -8|Registri|ba3 -1 reg -8|Piano dei conti|cg1 -0 -8|Causali|cg1 -6 -8|Clienti/Fornitori|cg1 -1 -8|Banche|ba3 -1 %ban -9|Prima nota|2 -9|Prima nota|cg2 -0 -9|Ricalcolo saldi|cg4 -0 -9|IVA|10 -9|Lista movimenti|cg3 -0 -9|Mastrini|cg3 -1 -9|Riepiloghi|cg3 -4 -9|Bilancio|cg1 -4 -9|Bilancio IV direttiva CEE|cg1 -5 -9|Giornale|cg3 -3 -10|IVA|2 -10|Liquidazione|cg4 -2 -10|Deleghe|ba3 -0 %del -10|Stampa deleghe|cg1 -3 -10|Riepilogo progressivi|cg0 -3 -10|Stampa registri|cg4 -3 -10|Progressivi allegati|cg0 -2 -10|Stampa allegati|cg3 -2 -11|Tabelle ministeriali| -11|Comuni|ba4 -0 -11|Uffici concessioni|ba3 -0 %ucc -11|Uffici imposte dirette|ba3 -0 %uid -11|Uffici IVA|ba3 -0 %uiv -11|Uffici registro|ba3 -0 %ure -11|Centri servizio|ba3 -0 %ucs -12|Stampa tabelle ministeriali| -12|Comuni|ba6 -1 -12|Uffici concessioni|ba3 -1 %ucc -12|Uffici imposte dirette|ba3 -1 %uid -12|Uffici IVA|ba3 -1 %uiv -12|Uffici registro|ba3 -1 %ure -12|Centri servizio|ba3 -1 %ucs -13|Scelta Contabilita'| -13|Tabelle ditta|7 -13|Stampa tabelle ditta|8 -13|Prima nota|9 -14|Gestione Libro Unico -14|Tabella Libro Unico|ba3 -4 -14|Tabella Vidimazioni|ba3 -0 %vid -14|Stampa Indici Libro Unico|ba3 -5 - +0|Menu Principale| +0|Anagrafiche|1 +0|Contabilita'|4 +0|Terreni e fabbricati|tefa -t +0|Modello 740|.\740 -t +0|Manutenzione|ba1 +1|Gestione Anagrafiche|1 +1|Persone fisiche|ba4 -1 F +1|Persone giuridiche|ba4 -1 G +1|Ditte|ba4 -2 +1|Unita' Locali|ba4 -3 +1|Attivita'|ba4 -4 +1|Soci|ba4 -5 +1|Ricerca Soci|ba5 +1|Tabelle ministeriali|11 +1|Tabelle|2 +1|Stampa anagrafiche|ba6 -0 +1|Stampa tabelle|3 +1|Stampa tabelle ministeriali|12 +1|Stampa numerazione registri|ba3 -2 +2|Tabelle|1 +2|Codici IVA|ba3 -0 %iva +2|Codici Attivita'|ba3 -0 %ais +2|Cond. di pagamento|ba3 -0 %cpg +2|Libri sociali|ba3 -0 %itl +2|Banche|ba3 -0 %ban +2|Codici statistici|ba3 -0 %stt +2|Cariche sociali|ba3 -0 %crs +2|Vecchi cod.Attivita'|ba3 -0 %ois +2|Stati esteri|ba3 -0 %sta +2|Valute|ba3 -0 %val +2|Lingue|ba3 -0 %lng +3|Stampa tabelle|3 +3|Codici IVA|ba3 -1 %iva +3|Codici Attivita'|ba3 -1 %ais +3|Cond. di pagamento|ba3 -1 %cpg +3|Libri sociali|ba3 -1 %itl +3|Banche|ba3 -1 %ban +3|Codici statistici|ba3 -1 %stt +3|Cariche sociali|ba3 -1 %crs +3|Vecchi cod.Attivita'|ba3 -1 %ois +3|Stati esteri|ba3 -1 %sta +3|Valute|ba3 -1 %val +3|Lingue|ba3 -1 %lng +4|Contabilita'|2 +4|Persone fisiche|ba4 -1 F +4|Persone giuridiche|ba4 -1 G +4|Ditte|ba4 -2 +4|Tabelle studio|5 +4|Stampa tabelle studio|6 +4|Scelta contabilita'|13|F +4|IVA|10 +4|Parametri di studio|cg5 -0 +4|Gestione Libro Unico|14 +5|Tabelle studio|1 +5|Tipi documento|ba3 -0 %tpd +5|Cond. di pagamento|ba3 -0 %cpg +5|Descrizioni aggiuntive|ba3 -0 %dpn +5|Codici IVA|ba3 -0 %iva +5|Codici Attivita'|ba3 -0 %ais +5|Uffici IVA|ba3 -0 %uiv +5|Libri sociali|ba3 -0 %itl +5|Banche|ba3 -0 %ban +5|IV direttiva CEE|ba3 -0 %ivd +5|Valute|ba3 -0 %val +5|Lingue|ba3 -0 %lng +6|Stampa tabelle studio|3 +6|Cond. di pagamento|ba3 -1 %cpg +6|Descrizioni aggiuntive|ba3 -1 %dpn +6|Codici IVA|ba3 -1 %iva +6|Codici Attivita'|ba3 -1 %ais +6|Uffici IVA|ba3 -1 %uiv +6|Libri sociali|ba3 -1 %itl +6|Banche|ba3 -1 %ban +6|IV direttiva CEE|ba3 -1 %ivd +6|Valute|ba3 -1 %val +6|Lingue|ba3 -1 %lng +7|Tabelle ditta|2 +7|Parametri ditta|cg5 -1 +7|Registri|ba3 -0 reg +7|Piano dei conti|cg0 -0 +7|Causali|cg0 -4 +7|Clienti/Fornitori|cg0 -1 +7|Banche|ba3 -0 %ban +7|Esercizi|ba3 -0 esc +8|Stampa tabelle ditta|3 +8|Registri|ba3 -1 reg +8|Piano dei conti|cg1 -0 +8|Causali|cg1 -6 +8|Clienti/Fornitori|cg1 -1 +8|Banche|ba3 -1 %ban +9|Prima nota|2 +9|Prima nota|cg2 -0 +9|Ricalcolo saldi|cg4 -0 +9|IVA|10 +9|Lista movimenti|cg3 -0 +9|Mastrini|cg3 -1 +9|Riepiloghi|cg3 -4 +9|Bilancio|cg1 -4 +9|Bilancio IV direttiva CEE|cg1 -5 +9|Giornale|cg3 -3 +10|IVA|2 +10|Liquidazione|cg4 -2 +10|Deleghe|ba3 -0 %del +10|Stampa deleghe|cg1 -3 +10|Riepilogo progressivi|cg0 -3 +10|Stampa registri|cg4 -3 +10|Progressivi allegati|cg0 -2 +10|Stampa allegati|cg3 -2 +11|Tabelle ministeriali|1 +11|Comuni|ba4 -0 +11|Uffici concessioni|ba3 -0 %ucc +11|Uffici imposte dirette|ba3 -0 %uid +11|Uffici IVA|ba3 -0 %uiv +11|Uffici registro|ba3 -0 %ure +11|Centri servizio|ba3 -0 %ucs +12|Stampa tabelle ministeriali|3 +12|Comuni|ba6 -1 +12|Uffici concessioni|ba3 -1 %ucc +12|Uffici imposte dirette|ba3 -1 %uid +12|Uffici IVA|ba3 -1 %uiv +12|Uffici registro|ba3 -1 %ure +12|Centri servizio|ba3 -1 %ucs +13|Scelta Contabilita'| +13|Tabelle ditta|7 +13|Stampa tabelle ditta|8 +13|Prima nota|9 +14|Gestione Libro Unico|1 +14|Tabella Libro Unico|ba3 -4 +14|Tabella Vidimazioni|ba3 -0 %vid +14|Stampa Indici Libro Unico|ba3 -5 +