// ------------------------------------------------------------ // Calcolo liquidazioni // Part 1: interfaccia // fv 21-1-94 // ------------------------------------------------------------ #include "cg4300.h" #include "cg4300a.h" inline CG4300_App& app() { return (CG4300_App&)main_app(); } void CG4300_App::user_create() { TProgind pnd(3,"Preparazione archivi\nPrego attendere", FALSE, TRUE, 30); _nditte = new TRelation(LF_NDITTE); _nditte->add(LF_ATTIV,"CODDITTA=CODDITTA"); _nditte_r = &(_nditte->curr()); _att_r = &(_nditte->curr(LF_ATTIV)); _ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte", "@1|Cod.@5|Ragione Sociale@50|Vers."); _n_ditte = 0l; pnd.addstatus(1); for (_nditte->first(); !_nditte->eof(); _nditte->next()) { _n_ditte++; TToken_string* d = new TToken_string(64); // add record d->add(_nditte_r->get("CODDITTA")); d->add(_nditte_r->get("RAGSOC")); d->add(_nditte_r->get("FREQVIVA")); _nomiditte.add(d); } pnd.addstatus(1); _rel = new TRelation(LF_MOV); _rel->add(LF_RMOVIVA,"NUMREG=NUMREG"); _cur = new TCursor(_rel); (*_cur) = 0; _pim = new TTable("PIM"); _ppa = new TTable("PPA"); _plm = new TTable("PLM"); _ptm = new TTable("PTM"); _lim = new TTable("LIM"); _pla = new TTable("PLA"); _reg = new TTable("REG"); _iva = new TTable("%IVA"); _del = new TTable("%DEL"); _lia = new TTable("LIA"); _mov = &_cur->file(LF_MOV); _rmoviva = &_cur->file(LF_RMOVIVA); _pim_r = &(_pim->curr()); _plm_r = &(_plm->curr()); _ptm_r = &(_ptm->curr()); _lim_r = &(_lim->curr()); _iva_r = &(_iva->curr()); _del_r = &(_del->curr()); _pla_r = &(_pla->curr()); _ppa_r = &(_ppa->curr()); _reg_r = &(_reg->curr()); _rmoviva_r = &(_cur->curr(LF_RMOVIVA)); _mov_r = &(_mov->curr()); // ACHTUNG: tutti i _codatt (codici attivita') sono // in realta' composti dal codice attivita' piu' il // tipo attivita' (1 o 2) _pim_anno = new TRecfield(*_pim_r,"CODTAB",0,3); _pim_codatt = new TRecfield(*_pim_r,"CODTAB",4,9); _pim_codreg = new TRecfield(*_pim_r,"CODTAB",10,12); _pim_mese = new TRecfield(*_pim_r,"CODTAB",13,14); _pim_tipocr = new TRecfield(*_pim_r,"CODTAB",15,15); _pim_codiva = new TRecfield(*_pim_r,"CODTAB",16,17); _ppa_year = new TRecfield(*_ppa_r,"CODTAB",0,3); _ppa_codatt = new TRecfield(*_ppa_r,"CODTAB",4,9); _ppa_month = new TRecfield(*_ppa_r,"CODTAB",10,11); _ppa_kind = new TRecfield(*_ppa_r,"CODTAB",12,12); _plm_anno = new TRecfield(*_plm_r,"CODTAB",0,3); _plm_codatt = new TRecfield(*_plm_r,"CODTAB",4,9); _plm_mese = new TRecfield(*_plm_r,"CODTAB",10,11); _ptm_anno = new TRecfield(*_ptm_r,"CODTAB",0,3); _ptm_codatt = new TRecfield(*_ptm_r,"CODTAB",4,9); _ptm_mese = new TRecfield(*_ptm_r,"CODTAB",10,11); _lim_anno = new TRecfield(*_lim_r,"CODTAB",0,3); _lim_mese = new TRecfield(*_lim_r,"CODTAB",4,6); _pla_anno = new TRecfield(*_pla_r,"CODTAB",0,3); _pla_codatt = new TRecfield(*_pla_r,"CODTAB",4,9); _del_ditta = new TRecfield(*_del_r,"CODTAB",0,4); _del_anno = new TRecfield(*_del_r,"CODTAB",5,8); _del_mese = new TRecfield(*_del_r,"CODTAB",9,10); _del_tipo = new TRecfield(*_del_r,"CODTAB",11,11); pnd.addstatus(1); set_real_picture(REAL_PICTURE); } void CG4300_App::user_destroy() { delete _ditte; delete _pim_anno; delete _pim_codreg; delete _pim_mese; delete _pim_tipocr; delete _pim_codiva; delete _ppa_year; delete _ppa_codatt; delete _ppa_month; delete _ppa_kind; delete _plm_anno; delete _plm_codatt; delete _plm_mese; delete _ptm_anno; delete _ptm_codatt; delete _ptm_mese; delete _lim_anno; delete _lim_mese; delete _pla_anno; delete _pla_codatt; delete _pim_codatt; delete _del_ditta; delete _del_anno; delete _del_mese; delete _del_tipo; delete _pim; delete _ppa; delete _plm; delete _ptm; delete _lim; delete _pla; delete _del; delete _nditte; delete _rel; delete _cur; } bool CG4300_App::set_print(int n) { TString yy = _year; _descr_arr.destroy(); switch(n) { case 1: // liquidazione _isprint = TRUE; if (set_liquidazione()) { if (_selected.ones() > 0l) { if (_year != yy) { TString cond(format("ANNOES=%s",(const char*)_year)); _cur->setfilter(cond); } recalc_all(); return _isprint; } else warning_box("Nessuna ditta selezionata!"); } break; case 2: // estrazione deleghe _isprint = FALSE; if (set_deleghe()) { if (_year != yy) { TString cond(format("ANNOES=%s",(const char*)_year)); _cur->setfilter(cond); } extract_deleghe(); return FALSE; } break; case 3: // calcolo acconto _isprint = TRUE; if (set_acconto()) { if (_year != yy) { TString cond(format("ANNOES=%s",(const char*)_year)); _cur->setfilter(cond); } recalc_acconti(); return _isprint; } break; } return FALSE; } long CG4300_App::select_firm_range(long from, long to, wht freq) { if (to == 0) to = 99999L; for (int i = 0; i < _nomiditte.items(); i++) { TToken_string& d = (TToken_string&)_nomiditte[i]; const char vers = d.get_char(2); if ((freq == mnt && vers == 'T') || (freq == quarter && vers == 'M')) continue; const long cod = d.get_long(0); if (cod >= from && cod <= to) _selected.set(i); } return _selected.ones(); } bool CG4300_App::to_ditta_handler(TMask_field& f, KEY key) { if (key == K_TAB && f.focusdirty() || key == K_ENTER) { TMask& m = f.mask(); const long from = m.get_long(CG43_FLD_DFR); const long to = m.get_long(CG43_FLD_DTO); const wht freq = (wht)m.get_int(CG43_RDB_VERS); if (from > 0 || to > 0) { const long sel = app().select_firm_range(from, to, freq); m.set(CG43_FLD_SELECTED, sel); m.reset(CG43_FLD_DFR); m.reset(CG43_FLD_DTO); } } return TRUE; } bool CG4300_App::set_liquidazione() { TMask m("cg4300a.msk"); m.set_handler(CG43_FLD_DTO, to_ditta_handler); m.field(CG43_FLD_SELECTED).set("0"); _selected.reset(); KEY k; // stampa abilitata per default m.set(CG43_CHK_STAMPA,"X"); do { k = m.run(); if (k == K_ESC) break; _what = (wht)m.get_int(CG43_RDB_VERS); _month = m.get_int(CG43_LST_MESE); if (_what == all) { if (_month != 3 && _month != 6 && _month != 9 && _month != 12 && _month != 13) _what = mnt; } else if (_what == quarter) _month = m.get_int(CG43_LST_TRIM); _year = m.get(CG43_FLD_ANNO); _date = m.get(CG43_FLD_DATA); _isprint = m.get_bool(CG43_CHK_STAMPA); _recalc = (recalc)m.get_long(CG43_LST_CALC); _isfinal = m.get_bool(CG43_CHK_FINAL); if (_isprint) printer().setdate(_date); // ------------------------------------------------ m.first_focus(k); int i; switch(k) { case DLG_SELECT: // build sheet _ditte->destroy(); for (i = 0; i < _nomiditte.items(); i++) { TToken_string* d = new TToken_string(64); *d = (TToken_string&)_nomiditte[i]; const char vers = d->get_char(2); if ((_what == mnt && vers == 'T') || (_what == quarter && vers == 'M')) continue; d->insert(" |", 0); const long pos = _ditte->add(d); if (_selected[i]) _ditte->check(pos); } // seleziona e aggiungi alle gia' selezionate if (_ditte->run() == K_ENTER) { for (long j = 0l; j < _ditte->items(); j++) { const long cod = _ditte->row(j).get_long(1); for (int d = 0; d < _nomiditte.items(); d++) { const long firm = ((TToken_string&)_nomiditte[d]).get_long(0); if (firm == cod) { _selected.set(d, _ditte->checked(j)); break; } } #ifdef DBG if (d >= _nomiditte.items()) yesnofatal_box("Non ritrovo piu' la ditta %ld", cod); #endif } } m.set(CG43_FLD_SELECTED, _selected.ones()); break; case CG43_BUT_ANN: _selected.reset(); m.reset(CG43_FLD_SELECTED); break; /* case CG43_BUT_CHK: { _ditte->destroy(); for (i = 0; i < _nomiditte.items(); i++) { TToken_string& d = (TToken_string&)_nomiditte[i]; _ditte->add(d); if (_selected[i]) _ditte->check(i); } _ditte->disable_check(); _ditte->run(); _ditte->enable_check(); } break; */ } } while (k != K_ENTER && k != K_ESC); return k == K_ENTER; } int cg4300(int argc, char* argv[]) { CG4300_App main_app; main_app.run(argc, argv, "Liquidazione IVA"); return TRUE; }