From 083b4b84f8714ed9a61be5223520cdb2834d0c5f Mon Sep 17 00:00:00 2001 From: guy Date: Thu, 18 Dec 2014 17:32:24 +0000 Subject: [PATCH] git-svn-id: svn://10.65.10.50/branches/R_10_00@23029 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg4400.cpp | 697 ++++++++++++++++++++++++------------------------- cg/cg4400.h | 10 +- cg/cg4400a.h | 1 + cg/cg4400a.uml | 14 +- 4 files changed, 359 insertions(+), 363 deletions(-) diff --git a/cg/cg4400.cpp b/cg/cg4400.cpp index 6c3bf7efb..c59a04779 100755 --- a/cg/cg4400.cpp +++ b/cg/cg4400.cpp @@ -50,7 +50,7 @@ bool TStampa_registri_app::filter_func (const TRelation * r) const bool regst = mov.get_bool(MOV_REGST); if (regst) //il movimento e' gia' return false; //stato stampato in forma definitiva - const tipo_sospensione ts = (tipo_sospensione) r->lfile("REG").get_int("I9"); + const tipo_sospensione ts = (tipo_sospensione)r->lfile("REG").get_int("I9"); if (ts == liquidazione) // Movimento valido solo ai fini della liquidazione return false; } @@ -84,18 +84,10 @@ HIDDEN int compare_righeiva(const TObject** o1, const TObject** o2) //********* funzioni accessorie e di ricerca *********// bool TStampa_registri_app::stampa_totali_finali() -{ - //TConfig conf(CONFIG_DITTA); - //return conf.get_bool("StTfFr"); - return ini_get_bool(CONFIG_DITTA, "cg", "StTfFr"); -} +{ return ini_get_bool(CONFIG_DITTA, "cg", "StTfFr"); } bool TStampa_registri_app::stampa_datareg() -{ - //TConfig conf(CONFIG_STUDIO); - //return conf.get_bool("NoDtRg"); - return ini_get_bool(CONFIG_STUDIO, "cg", "NoDtRg"); -} +{ return ini_get_bool(CONFIG_STUDIO, "cg", "NoDtRg"); } const char* TStampa_registri_app::descr_doc() { return cache().get("%TPD", _tipodoc, "S0"); } @@ -220,11 +212,9 @@ bool TStampa_registri_app::ricalcola(int mese) //_frequiva == 'T' => esiste la lim solo se m == 3/6/9/12 //(no problem: la Prima Nota pensa lei a invalidare B0 e B1 //dei trimestri a cui appartiene il mese modificato) - if (_frequiva == 'M' || - (m == 3 || m == 6 || m == 9 || m == 12)) + if (_frequiva == 'M' || (m == 3 || m == 6 || m == 9 || m == 12)) { TString8 key; key.format("%04d%02d", _annoes, m); - lim.setkey(1); lim.put("CODTAB", key); if (lim.read() != NOERR || !lim.get_bool("B1")) return true; @@ -234,7 +224,6 @@ bool TStampa_registri_app::ricalcola(int mese) if (_frequiva == 'M') { TString8 key; key.format("%04d%02d", _annoes, mese); - lim.setkey(1); lim.put("CODTAB", key); if (lim.read() != NOERR || !lim.get_bool("B1")) return true; @@ -244,7 +233,6 @@ bool TStampa_registri_app::ricalcola(int mese) //aggiusta il mese al trimestre a cui appartiene mese += 2 - ((mese-1) % 3); TString8 key; key.format("%04d%02d", _annoes, mese); - lim.setkey(1); lim.put("CODTAB", key); if (lim.read() != NOERR || !lim.get_bool("B1")) return true; @@ -254,10 +242,10 @@ bool TStampa_registri_app::ricalcola(int mese) void TStampa_registri_app::look_reg() { - _liquidazione = _tabreg->get_bool("B7"); - _riep_liq = _tabreg->get_bool("B6"); - _corrispettivi = _tabreg->get_bool("B0"); - _sosp_imposta = _tabreg->get_bool("B1"); + _liquidazione = _tabreg->get_bool("B7"); + _riep_liq = _tabreg->get_bool("B6"); + _corrispettivi = _tabreg->get_bool("B0"); + _sosp_imposta = _tabreg->get_bool("B1"); _pagine_stampate = _tabreg->get_long("I1"); _numini = _pagine_stampate; _cod_un_loc = _tabreg->get_int("I7"); @@ -267,12 +255,12 @@ void TStampa_registri_app::look_reg() _tipoatt = tipo_attivita(); _attivita = desc_attivita(_codatt); _desc_lib = _tabreg->get ("S0"); - _stampa_ind_ditta = _tabreg->get_bool ("B9"); - _stampa_ind_comp = _tabreg->get_bool ("B5"); - _stampa_cred_pre = _tabreg->get_bool ("B4"); - _freq_riepilogo = _tabreg->get_char ("S9"); - _stampa_plafonds = _tabreg->get_char ("S10") == 'X'; - _stampa_num_pag = _tabreg->get_char ("S11") == 'X'; + _stampa_ind_ditta = _tabreg->get_bool("B9"); + _stampa_ind_comp = _tabreg->get_bool("B5"); + _stampa_cred_pre = _tabreg->get_bool("B4"); + _freq_riepilogo = _tabreg->get_char("S9"); + _stampa_plafonds = _tabreg->get_char("S10") == 'X'; + _stampa_num_pag = _tabreg->get_char("S11") == 'X'; } bool TStampa_registri_app::compila_reg(const TMask& m) @@ -426,7 +414,6 @@ bool TStampa_registri_app::mask_azzera (TMask_field& f, KEY k) { if (k == K_SPACE) { - app()._selected.reset(); f.mask().reset(F_SELECT); f.mask().reset(DA_CODICE); f.mask().reset(A_CODICE); @@ -493,7 +480,7 @@ bool TStampa_registri_app::mask_mese (TMask_field& f, KEY k) return true; } -bool TStampa_registri_app::look_reg(int i, int anno, TString& codlib, int m, const char* cod, int* umese, long ditta) +bool TStampa_registri_app::look_reg(int i, int anno, const TString& codlib, int m, const char* cod, int* umese, long ditta) { TString8 y; @@ -506,20 +493,19 @@ bool TStampa_registri_app::look_reg(int i, int anno, TString& codlib, int m, con tiporeg tipo = (tiporeg)_tabreg->get_int("I0"); if (tipo == vendita || tipo == acquisto || tipo == riepilogativo) { + const bool only_you = _ditte->one_checked() && _ditte->checked() == 1; TString16 cod_lib_un = _tabreg->get("S6"); TDate u_data = _tabreg->get_date("D3"); TDate sca_vid = _tabreg->get_date("D1"); if (codlib != cod_lib_un) { - if (_selected.ones() == 1L) - if (_selected[i]) + if (only_you && _ditte->checked(i)) message_box(FR("Ditta %ld: il codice libro unico del registro non e' uguale al codice libro unico indicato"), ditta); return false; } if (m < *umese) { - if (_selected.ones() == 1L) - if (_selected[i]) + if (only_you && _ditte->checked(i)) message_box(FR("Ditta %ld: il mese indicato e' inferiore al mese dell'ultima data di stampa del registro"), ditta); return false; } @@ -530,8 +516,7 @@ bool TStampa_registri_app::look_reg(int i, int anno, TString& codlib, int m, con if (sca_vid.ok()) if (sca_vid.month() < m) { - if (_selected.ones() == 1L) - if (_selected[i]) + if (only_you && _ditte->checked(i)) message_box(FR("Ditta %ld: la data scadenza di vidimazione del registro non deve essere inferiore al mese indicato"), ditta); return false; } @@ -541,7 +526,7 @@ bool TStampa_registri_app::look_reg(int i, int anno, TString& codlib, int m, con return false; } -bool TStampa_registri_app::look_regs(int anno, TString& codlib, int m, int* umese, long ditta, TProgind* prog) +bool TStampa_registri_app::look_regs(int anno, const TString& codlib, int m, int* umese, long ditta, TProgind* prog) { bool ok = false; @@ -597,17 +582,14 @@ bool TStampa_registri_app::mask_libun (TMask_field& f, KEY k) { if (k==K_TAB && f.mask().is_running()) { - TString16 codlib(f.mask().get(CODICE_LIB_UN)); + const TString& codlib = f.mask().get(CODICE_LIB_UN); if (codlib.empty()) - { - app()._test = true; - return true; - } + return app()._test = true; - if (app()._selected.ones() == 0l) + if (!app()._ditte->one_checked()) return true; - TProgind* p = new TProgind(2,TR("Verifica parametri in corso..."),false,true,30); + TProgind* p = new TProgind(2,TR("Verifica parametri in corso..."),false,true); TString16 cod(f.mask().get(CODICE_LIBRO_IVA)); int fino_a_mese = f.mask().get_int(MESE); @@ -644,8 +626,8 @@ bool TStampa_registri_app::mask_libun (TMask_field& f, KEY k) ok = app().look_regs(anno,codlib,fino_a_mese,&mese,ditta,p); if (!ok) { - if (app()._selected.ones() == 1L) //solo se ho selezionato 1 ditta devo dare il messaggio - if (app()._selected[i]) //ed e' proprio quella selezionata + if (app()._ditte->checked() == 1L) //solo se ho selezionato 1 ditta devo dare il messaggio + if (app()._ditte->checked(i)) //ed e' proprio quella selezionata { p->addstatus(1); app().set_firm(app().__firm); @@ -728,31 +710,46 @@ bool TStampa_registri_app::year_handler(TMask_field& f, KEY key) { if (key == K_TAB && f.focusdirty()) { - TWait_cursor hourglass; app().set_year(atoi(f.get())); - app().build_nomiditte(); - app().build_ditte_sheet(); + const int freq = f.mask().get_int(F_FREQUENZA); + app().build_ditte_sheet(freq); } return true; } -void TStampa_registri_app::build_ditte_sheet() +void TStampa_registri_app::build_ditte_sheet(int flags) { + TWait_cursor hourglass; + if (_nomiditte.empty()) + build_nomiditte(); + + TBit_array sel; + FOR_EACH_CHECKED_ROW(*_ditte, r, riga) + { + const long ditta = riga->get_long(1); + sel.set(ditta); + } + // build sheet _ditte->destroy(); _ditte->enable_row(-1); for (int i = 0; i < _nomiditte.items(); i++) { - TToken_string* d = new TToken_string(63); - *d = (const TToken_string&)_nomiditte[i]; - const char vers = d->get_char(2); - const bool selectable = vers == '?'; - d->insert(" |", 0); + TToken_string d = (const TToken_string&)_nomiditte[i]; + const char vers = d.get_char(2); + if ((flags == 0x1 && vers != 'M') || (flags == 0x2 && vers != 'T')) + continue; + + d.insert(" |", 0); const long pos = _ditte->add(d); - if (selectable) + if (vers == '?') _ditte->disable_row(pos); - else if (_selected[i]) - _ditte->check(pos); + else + { + const long ditta = d.get_long(1); + if (sel[ditta]) + _ditte->check(i); + } } } @@ -815,7 +812,7 @@ void TStampa_registri_app::set_choice_limits(TMask& m) long first = -1l, last = -1l; for (int i = 0; i < _ditte->items(); i++) { - if (_selected[i]) + if (_ditte->checked(i)) { const long dit = _ditte->row(i).get_long(1); if (first < 0) first = dit; @@ -824,14 +821,14 @@ void TStampa_registri_app::set_choice_limits(TMask& m) } if (first > 0) m.set(DA_CODICE, first); if (last > 0) m.set(A_CODICE, last); - m.set(F_SELECT, _selected.ones()); + m.set(F_SELECT, _ditte->checked()); if (m.is_running() && first > 0) app().set_firm(first); } long TStampa_registri_app::select_firm_range(long from, long to) { - if (to == 0l) to = 99999L; + if (to <= 0l) to = 99999L; for (int i = 0; i < _ditte->items(); i++) { if (_ditte->row_disabled(i)) @@ -844,17 +841,11 @@ long TStampa_registri_app::select_firm_range(long from, long to) const long cod = d.get_long(1); if (cod >= from && cod <= to) - { - _selected.set(i); _ditte->check(i); - } else - { - _selected.set(i,false); _ditte->uncheck(i); - } } - return _selected.ones(); + return _ditte->checked(); } void TStampa_registri_app::build_nomiditte(TProgind* pnd) @@ -898,11 +889,7 @@ bool TStampa_registri_app::set_ditte(TMask& m) _ditte->enable_check(); // seleziona e aggiungi alle gia' selezionate if (_ditte->run() == K_ENTER) - { - for (long j = 0; j < _ditte->items(); j++) - _selected.set(j, _ditte->checked(j)); set_choice_limits(m); - } } } while (tasto != K_ENTER && tasto != K_QUIT); return tasto == K_ENTER; @@ -919,7 +906,7 @@ bool TStampa_registri_app::user_create() _rel->add(LF_RMOVIVA,"NUMREG=NUMREG",1,LF_MOV); _rel->add ("REG", "CODTAB[1,4]=ANNOIVA|CODTAB[5,7]=REG"); _cur = new TSorted_cursor(_rel, "DATAREG|PROTIVA|NUMREG","", 2); - _ditte = new TArray_sheet(-1, -1, -4, -4, TR("Selezione Ditte"), + _ditte = new TArray_sheet(-1, 4, -4, -4, TR("Selezione Ditte"), HR("@1|Cod.@5R|Ragione Sociale@50|Vers.")); _n_ditte = 0l; __firm = TApplication::get_firm(); @@ -927,8 +914,7 @@ bool TStampa_registri_app::user_create() TDate oggi(TODAY); _annoes = oggi.year(); - build_nomiditte(); - build_ditte_sheet(); + build_ditte_sheet(0x3); add_cursor(_cur); add_file(LF_MOV); add_file(LF_RMOVIVA); @@ -3393,16 +3379,23 @@ void TStampa_registri_app::no_movimenti() if (_tipo_stampa == rif_giornale) da = 1; else - da = _frequiva == 'M' ? _fino_a_mese : _fino_a_mese-2; // Mi sembra più sensato 19/06/2013 - } + { + // da = _frequiva == 'M' ? _fino_a_mese : _fino_a_mese-2; // Mi sembra più sensato 19/06/2013 + da = _data_da.month(); // Mi sembra ancora più sensato 18/12/2014 + if (_frequiva == 'T') + { + da = ((da-1) / 3) * 3 + 1; + CHECKD(da < a, "Mese iniziale non valido per trimestrale ", da); + } + } + } else if (_tipo_stampa == libro_unico) - da = _fino_a_mese; + da = _fino_a_mese; else if (_tipo_stampa == prova) + { da = _data_da.month(); - if (_tipo_stampa == prova) - a = _data_a.month(); - else - a = _fino_a_mese; + a = _data_a.month(); + } //RICALCOLO PROGRESSIVI per registro riepilogativo //il ricalcolo dei progressivi mensili viene sempre @@ -3620,11 +3613,12 @@ bool TStampa_registri_app::set_print(int n) m.set_handler (A_CODICE, to_ditt_handler); m.set_handler (DA_CODICE, fr_ditt_handler); m.set_handler (ANNO, year_handler); + m.set_handler (F_FREQUENZA, year_handler); m.set(DA_CODICE, get_firm()); m.set(A_CODICE, get_firm(), 0x3); - m.field(F_SELECT).set(format("%ld",_selected.ones())); + m.set(F_SELECT, _ditte->checked()); set_choice_limits(m); set_real_picture("###.###.###.###"); @@ -3633,90 +3627,86 @@ bool TStampa_registri_app::set_print(int n) bool ok = true; while (ok = set_ditte(m)) { - if (_selected.ones() > 0l) - { - //*****azzeramento dei totali progressivi e dei flag di controllo della loro stampa - _totdoc_prog = 0; - _totimpn_prog = 0; - _totimps_prog = 0; - _rows_left = 69; - _riporti_stampati = false; - _totali_stampati = false; - - _annoes = m.get_int(ANNO);//in realta' e' l'anno IVA !!! - _tipo_stampa = (tipo_stampa) m.get_int(TIPO_STAMPA); - _stampa_width = m.get_int(STAMPA_WIDTH); - _stampa_len = m.get_int(STAMPA_LEN); - _tabname = (_annoes > 1997) ? "PRM" : "PIM"; // Dal 1998 in poi utilizza i PRM e non i PIM - if (_stampa_width == 1) - _stampa_width = 132; - else _stampa_width = 198; - if (_stampa_len != 0) - printer().formlen(_stampa_len); - printer().footerlen(RIGHE_FOOTER); - //Se stampa di prova l'utente indica data_da e data_a - if (_tipo_stampa == prova) - { - _data_stampa = m.get(DATA_STAMPA); - _data_da = m.get(DA_DATA); - _data_a = m.get(A_DATA); - - if (!_data_da.ok()) - _data_da = TDate(1, 1, _annoes); // Meglio cosi' - - if (!_data_a.ok()) - _data_a = TDate(31, 12, _annoes); // Meglio cosi' - - const TDate d(31,12,_annoes); - if (_data_a == d) - _tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0]; - else - _tipo_riepilogativo = ' '; - printer().setdate(_data_stampa); - } - else //stampe definitive - { - if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) - { - _fino_a_mese = m.get_int(FINO_A_MESE); - _data_da = TDate(1, 1, _annoes); // Meglio cosi' - } - else //stampa su libro unico - { - _codlib = m.get(CODICE_LIB_UN); - _fino_a_mese = m.get_int(MESE); - _u_stampata = m.get_int(ULTIMA_PAGINA); - _rif_vid = m.get_bool(RIF_VID); - _primast = _u_stampata; - _data_da = TDate(1, _fino_a_mese, _annoes); // Meglio cosi' - } - - int giorni_del_mese = 31; - if (_fino_a_mese == 12) - { - giorni_del_mese = 31; - _tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0]; - } - else - { - _tipo_riepilogativo = ' '; - TDate primo(1, _fino_a_mese, _annoes); - primo.set_end_month(); // Meglio cosi' - - giorni_del_mese = primo.day(); - } - _data_a = TDate(giorni_del_mese, _fino_a_mese, _annoes); // Meglio cosi' - } - _stampa_data_reg = stampa_datareg(); - if (_tipo_stampa == libro_unico) - compila_lib(); - stampa_registri_IVA(m); - } - else + if (!_ditte->one_checked()) { warning_box(TR("Nessuna ditta selezionata!")); continue; } + //*****azzeramento dei totali progressivi e dei flag di controllo della loro stampa + _totdoc_prog = 0; + _totimpn_prog = 0; + _totimps_prog = 0; + _rows_left = 69; + _riporti_stampati = false; + _totali_stampati = false; + + _annoes = m.get_int(ANNO);//in realta' e' l'anno IVA !!! + _tipo_stampa = (tipo_stampa) m.get_int(TIPO_STAMPA); + _stampa_len = m.get_int(STAMPA_LEN); + _tabname = (_annoes > 1997) ? "PRM" : "PIM"; // Dal 1998 in poi utilizza i PRM e non i PIM + if (m.get_int(STAMPA_WIDTH) == 1) + _stampa_width = 132; + else + _stampa_width = 198; + if (_stampa_len != 0) + printer().formlen(_stampa_len); + printer().footerlen(RIGHE_FOOTER); + //Se stampa di prova l'utente indica data_da e data_a + if (_tipo_stampa == prova) + { + _data_stampa = m.get(DATA_STAMPA); + _data_da = m.get(DA_DATA); + _data_a = m.get(A_DATA); + + if (!_data_da.ok()) + _data_da = TDate(1, 1, _annoes); // Meglio cosi' + + if (!_data_a.ok()) + _data_a = TDate(31, 12, _annoes); // Meglio cosi' + + const TDate d(31,12,_annoes); + if (_data_a == d) + _tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0]; + else + _tipo_riepilogativo = ' '; + printer().setdate(_data_stampa); + } + else //stampe definitive + { + if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) + { + _fino_a_mese = m.get_int(FINO_A_MESE); + _data_da = TDate(1, 1, _annoes); // Meglio cosi' + } + else //stampa su libro unico + { + _codlib = m.get(CODICE_LIB_UN); + _fino_a_mese = m.get_int(MESE); + _u_stampata = m.get_int(ULTIMA_PAGINA); + _rif_vid = m.get_bool(RIF_VID); + _primast = _u_stampata; + _data_da = TDate(1, _fino_a_mese, _annoes); // Meglio cosi' + } + + int giorni_del_mese = 31; + if (_fino_a_mese == 12) + { + giorni_del_mese = 31; + _tipo_riepilogativo = m.get(TIPO_RIEPILOGATIVO)[0]; + } + else + { + _tipo_riepilogativo = ' '; + TDate primo(1, _fino_a_mese, _annoes); + primo.set_end_month(); // Meglio cosi' + giorni_del_mese = primo.day(); + } + _data_a = TDate(giorni_del_mese, _fino_a_mese, _annoes); // Meglio cosi' + } + _stampa_data_reg = stampa_datareg(); + if (_tipo_stampa == libro_unico) + compila_lib(); + stampa_registri_IVA(m); } return false; } @@ -3727,216 +3717,215 @@ bool TStampa_registri_app::stampa_registri_IVA(const TMask& m) { bool ok = false; TRectype mov_from(LF_MOV), mov_to(LF_MOV); - for (int i = 0; i < _ditte->items(); i++) - { - if (_selected[(long)i]) - { - bool msg = true; - _ditta = _ditte->row(i).get_long(1); - _frequiva = _ditte->row(i).get_char(3); - _intesta_liq = false; - _intesta_vidi = false; - _primast = _u_stampata; - _ok_vidi = false; - _stampa_mese = 13; - - TApplication::set_firm(_ditta); - _st_tot_fin = stampa_totali_finali(); - look_lia(); - ok = compila_reg(m); - if (!ok) continue; - if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) - if (!controlla_mov()) - { - TApplication::set_firm(__firm); - return error_box(TR("Finire di stampare registri anno precedente")); - } - if (!_stampa_tutti_i_registri) - { - _scelta = no_liquidazione; - mov_from.put(MOV_DATAREG, _data_da); - mov_to.put(MOV_DATAREG, _data_a); - _cur->setregion(mov_from, mov_to); - _cur->set_filterfunction(filter_func, true); - //la filter function viene chiamata quando posiziono il cursore - //e' lei che determina _stampa_mese da settare in setta_mask - (*_cur) = 0L; - ok = setta_mask(i); - if (!ok) continue; - if (_liquidazione) - { - _size_header = 3; - if ((_tipo_stampa == bollato || _tipo_stampa == rif_giornale) && !_stampa_ind_ditta) _size_header++; - clear_stliq(); - //l'inizializzazione di _scelta vale per tutti - //i mesi da stampare di un certo registro (su - //cui c'e' la X di stampa liquidazione). Cio' - //e' molto importante (per capire vedi appunti) - _scelta = controlla_liquidazione(); - if (_scelta == non_proseguire) - return false; - } - const long item = _cur->items(); - // 17.5.95 Leggo parametri di stampa del registro - - const long codditta = get_firm(); - TString16 config; config.format("REG%05ld%s", codditta, (const char*)_codreg); - printer().read_configuration(config); - - _mov_empty = true; - - if (item > 0l) - { - print(); - if (is_cancelled()) - return false; - } - else //non ci sono movimenti da stampare nel periodo richiesto! - no_movimenti(); - - if (_tipo_stampa == libro_unico && _rif_vid) - { - _intesta_vidi = true; - stampa_vidi(); //stampa riferimenti vidimazione - } - } - else //stampa tutti i registri - { + FOR_EACH_CHECKED_ROW(*_ditte, i, riga) + { + bool msg = true; + _ditta = riga->get_long(1); + _frequiva = riga->get_char(3); + _intesta_liq = false; + _intesta_vidi = false; + _primast = _u_stampata; + _ok_vidi = false; + _stampa_mese = 13; + + TApplication::set_firm(_ditta); + _st_tot_fin = stampa_totali_finali(); + look_lia(); + ok = compila_reg(m); + if (!ok) continue; + if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) + { + if (!controlla_mov()) + { + TApplication::set_firm(__firm); + return error_box(TR("Finire di stampare registri anno precedente")); + } + } + if (!_stampa_tutti_i_registri) + { + _scelta = no_liquidazione; + mov_from.put(MOV_DATAREG, _data_da); + mov_to.put(MOV_DATAREG, _data_a); + _cur->setregion(mov_from, mov_to); + _cur->set_filterfunction(filter_func, true); + //la filter function viene chiamata quando posiziono il cursore + //e' lei che determina _stampa_mese da settare in setta_mask + (*_cur) = 0L; + ok = setta_mask(i); + if (!ok) continue; + if (_liquidazione) + { + _size_header = 3; + if ((_tipo_stampa == bollato || _tipo_stampa == rif_giornale) && !_stampa_ind_ditta) _size_header++; + clear_stliq(); + //l'inizializzazione di _scelta vale per tutti + //i mesi da stampare di un certo registro (su + //cui c'e' la X di stampa liquidazione). Cio' + //e' molto importante (per capire vedi appunti) _scelta = controlla_liquidazione(); if (_scelta == non_proseguire) return false; + } + const long item = _cur->items(); - TDate sca_vid; - bool one_printed = false; // Flag per vedere se ha stampato almeno un registro (solo per rif. al libro giornale) - for (_tabreg->first(); !_tabreg->eof(); _tabreg->next()) - { - _tipo_reg = (tiporeg)_tabreg->get_int("I0"); - const TString16 codtab = _tabreg->get("CODTAB"); - const int anno = atoi(codtab.left(4)); - if (anno > _annoes) - break; - if (anno == _annoes) - //registro iva - if (_tipo_reg == vendita || _tipo_reg == acquisto || _tipo_reg == riepilogativo) + // 17.5.95 Leggo parametri di stampa del registro + + const long codditta = get_firm(); + TString16 config; config.format("REG%05ld%s", codditta, (const char*)_codreg); + printer().read_configuration(config); + + _mov_empty = true; + + if (item > 0l) + { + print(); + if (is_cancelled()) + return false; + } + else //non ci sono movimenti da stampare nel periodo richiesto! + no_movimenti(); + + if (_tipo_stampa == libro_unico && _rif_vid) + { + _intesta_vidi = true; + stampa_vidi(); //stampa riferimenti vidimazione + } + } + else //stampa tutti i registri + { + _scelta = controlla_liquidazione(); + if (_scelta == non_proseguire) + return false; + + TDate sca_vid; + bool one_printed = false; // Flag per vedere se ha stampato almeno un registro (solo per rif. al libro giornale) + for (_tabreg->first(); !_tabreg->eof(); _tabreg->next()) + { + _tipo_reg = (tiporeg)_tabreg->get_int("I0"); + const TString16 codtab = _tabreg->get("CODTAB"); + const int anno = atoi(codtab.left(4)); + if (anno > _annoes) + break; + if (anno == _annoes) + //registro iva + if (_tipo_reg == vendita || _tipo_reg == acquisto || _tipo_reg == riepilogativo) + { + _codreg = codtab.mid(4,3); + const TString8 cod_lib_un = _tabreg->get("S6"); + sca_vid = _tabreg->get_date("D1"); + _stampa_plafonds = _tabreg->get_char ("S10") == 'X'; + _stampa_num_pag = _tabreg->get_char ("S11") == 'X'; + _stampa_ind_ditta = _tabreg->get_bool("B9"); + _liquidazione = _tabreg->get_bool("B7"); + if (_tipo_stampa != prova) + _u_data = _tabreg->get_date("D3"); + if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) { - _codreg = codtab.mid(4,3); - const TString8 cod_lib_un = _tabreg->get("S6"); - sca_vid = _tabreg->get_date("D1"); - _stampa_plafonds = _tabreg->get_char ("S10") == 'X'; - _stampa_num_pag = _tabreg->get_char ("S11") == 'X'; - _stampa_ind_ditta = _tabreg->get_bool("B9"); - _liquidazione = _tabreg->get_bool("B7"); - if (_tipo_stampa != prova) - _u_data = _tabreg->get_date("D3"); - if (_tipo_stampa == bollato || _tipo_stampa == rif_giornale) - { - if (cod_lib_un.not_empty()) - continue; - if (sca_vid.ok()) - if (sca_vid.month() < _fino_a_mese) - continue; - if (_u_data.ok()) - if (_data_a < _u_data) //e' molto imp. che rimanga < e non <= !!! - { //(per via del discorso liq. annuale) - message_box(FR("Ditta %ld: Il registro %s e' gia' stato stampato come bollato di %s"), - _ditta, (const char*) _codreg, itom(_fino_a_mese)); - continue; - } - } - if (_tipo_stampa == rif_giornale) //stampa con riferimenti al libro giornale - { - TDate d; - bool good; - bool trovato = cerca_libro_gio(d, good); - if (trovato) - one_printed = true; - else - continue; - } else - if (_tipo_stampa == libro_unico) //stampa su libro unico - { - if (cod_lib_un != _codlib) + if (cod_lib_un.not_empty()) + continue; + if (sca_vid.ok()) + if (sca_vid.month() < _fino_a_mese) continue; - if (sca_vid.ok()) - if (sca_vid.month() < _fino_a_mese) - continue; - if (_u_data.ok()) - if (_fino_a_mese < _u_data.month()) //significa che e' gia' - continue; //stato stampato - } - msg = false; + if (_u_data.ok()) + if (_data_a < _u_data) //e' molto imp. che rimanga < e non <= !!! + { //(per via del discorso liq. annuale) + message_box(FR("Ditta %ld: Il registro %s è già stato stampato come bollato di %s"), + _ditta, (const char*) _codreg, itom(_fino_a_mese)); + continue; + } + } + if (_tipo_stampa == rif_giornale) //stampa con riferimenti al libro giornale + { + TDate d; + bool good; + bool trovato = cerca_libro_gio(d, good); + if (trovato) + one_printed = true; + else + continue; + } else + if (_tipo_stampa == libro_unico) //stampa su libro unico + { + if (cod_lib_un != _codlib) + continue; + if (sca_vid.ok()) + if (sca_vid.month() < _fino_a_mese) + continue; + if (_u_data.ok()) + if (_fino_a_mese < _u_data.month()) //significa che e' gia' + continue; //stato stampato + } + msg = false; - look_reg(); + look_reg(); - _intesta_liq = false; - _intesta_vidi = false; - _primast = _u_stampata; //per la numerazione dei registri successivi - _ok_vidi = false; - _stampa_mese = 13; - _scelta = no_liquidazione; + _intesta_liq = false; + _intesta_vidi = false; + _primast = _u_stampata; //per la numerazione dei registri successivi + _ok_vidi = false; + _stampa_mese = 13; + _scelta = no_liquidazione; - //modifica del 09/11/1995 - mov_from.put(MOV_DATAREG, _data_da); - mov_to.put(MOV_DATAREG, _data_a); - _cur->setregion(mov_from, mov_to); - _cur->set_filterfunction(NULL); - _cur->set_filterfunction(filter_func, true); - (*_cur) = 0L; - ok = setta_mask(i); - if (!ok) continue; + //modifica del 09/11/1995 + mov_from.put(MOV_DATAREG, _data_da); + mov_to.put(MOV_DATAREG, _data_a); + _cur->setregion(mov_from, mov_to); + _cur->set_filterfunction(NULL); + _cur->set_filterfunction(filter_func, true); + (*_cur) = 0L; + ok = setta_mask(i); + if (!ok) continue; - if (_liquidazione) - { - _size_header = 3; - if ((_tipo_stampa == bollato || _tipo_stampa == rif_giornale) && !_stampa_ind_ditta) - _size_header++; - clear_stliq(); - //N.B. E' fondamentale che _scelta venga ri-inizializzata ad ogni - //registro(cioe' dopo la stampa di ciascuno). Infatti il B0 di un - //certo mese puo' essere cambiato durante la stampa di un certo - //registro - _scelta = controlla_liquidazione(); - if (_scelta == non_proseguire) - return false; - } - // Guardo se ci sono movimenti - const long items = _cur->items(); + if (_liquidazione) + { + _size_header = 3; + if ((_tipo_stampa == bollato || _tipo_stampa == rif_giornale) && !_stampa_ind_ditta) + _size_header++; + clear_stliq(); + //N.B. E' fondamentale che _scelta venga ri-inizializzata ad ogni + //registro(cioe' dopo la stampa di ciascuno). Infatti il B0 di un + //certo mese puo' essere cambiato durante la stampa di un certo + //registro + _scelta = controlla_liquidazione(); + if (_scelta == non_proseguire) + return false; + } + // Guardo se ci sono movimenti + const long items = _cur->items(); - //Leggo parametri di stampa del registro - TString16 config; - const long codditta = get_firm(); - const char* reg = (const char*)_codreg; - config.format("REG%05ld%s", codditta, reg); - printer().read_configuration(config); + //Leggo parametri di stampa del registro + const long codditta = get_firm(); + const char* reg = (const char*)_codreg; + TString16 config; config.format("REG%05ld%s", codditta, reg); + printer().read_configuration(config); - _mov_empty = true; + _mov_empty = true; - if (items > 0l) - { - print(); - if (is_cancelled()) - return false; - } - else - no_movimenti(); + if (items > 0l) + { + print(); + if (is_cancelled()) + return false; + } + else + no_movimenti(); - if (_tipo_stampa == libro_unico && _rif_vid) - { - _intesta_vidi = true; - stampa_vidi(); //stampa riferimenti vidimazione - } - } - } //for + if (_tipo_stampa == libro_unico && _rif_vid) + { + _intesta_vidi = true; + stampa_vidi(); //stampa riferimenti vidimazione + } + } + } //for - if (_tipo_stampa == rif_giornale && !one_printed) // stampa con rif libro giornale - message_box(FR("Ditta %ld: nessun registro soddisfa i parametri indicati"), _ditta); + if (_tipo_stampa == rif_giornale && !one_printed) // stampa con rif libro giornale + message_box(FR("Ditta %ld: nessun registro soddisfa i parametri indicati"), _ditta); - if (msg) - if(_tipo_stampa == libro_unico && _fino_a_mese == 1 && _selected.ones() == 1L) - message_box(FR("Ditta %ld: nessun registro soddisfa i parametri indicati"), _ditta); //viene gia' dato nell'handler - } //da Gennaio) - } + if (msg) + if(_tipo_stampa == libro_unico && _fino_a_mese == 1 && _ditte->checked() == 1L) + message_box(FR("Ditta %ld: nessun registro soddisfa i parametri indicati"), _ditta); //viene gia' dato nell'handler + } //da Gennaio) } printer().read_configuration(); TApplication::set_firm(__firm); diff --git a/cg/cg4400.h b/cg/cg4400.h index 93a8be968..148187cf2 100755 --- a/cg/cg4400.h +++ b/cg/cg4400.h @@ -40,7 +40,6 @@ class TStampa_registri_app : public TPrintapp TRiga_array _riga_prospettoXcassa; TTipodoc_array _doc_array; TRiga_array _tot_iva_array, _tot_prec_iva_array; - TBit_array _selected; TArray_sheet *_ditte; TArray _nomiditte; tiporeg _tipo_reg; @@ -111,8 +110,8 @@ public: bool stampo_liquidazione(int); bool ventilazione(const char*); bool cerca_libro_gio(TDate&, bool&); - bool look_reg (int, int, TString&, int, const char*, int*, long); - bool look_regs(int, TString&, int, int*, long, TProgind*); + bool look_reg (int, int, const TString&, int, const char*, int*, long); + bool look_regs(int, const TString&, int, int*, long, TProgind*); bool stampa_totali_finali(); bool stampa_datareg(); bool stampa_registri_IVA(const TMask&); @@ -122,7 +121,7 @@ public: void stampa_prospetto_riepilogo(tiporeg, const TString&, const TString&, const bool); void stampa_progressivi(TRiga_array&, TRigaiva_array&, tiporeg, const bool); void set_choice_limits(TMask&); - void build_ditte_sheet(); + void build_ditte_sheet(int flags); tiporeg cerca_reg(const TString&); void set_page_tot_reg(); void send_message(char,const TFilename&,int); @@ -160,8 +159,7 @@ public: virtual void preprocess_footer(); virtual void on_page_printed(int file); - TStampa_registri_app() : TPrintapp(), _ditte(NULL), _selected(10000), _nomiditte(100), _test(FALSE) {} - virtual ~TStampa_registri_app() {} + TStampa_registri_app() : TPrintapp(), _ditte(NULL), _nomiditte(100), _test(FALSE) {} }; diff --git a/cg/cg4400a.h b/cg/cg4400a.h index 51bf36cfd..e44d61e35 100755 --- a/cg/cg4400a.h +++ b/cg/cg4400a.h @@ -22,6 +22,7 @@ #define RIF_VID 122 #define STAMPA_WIDTH 123 #define STAMPA_LEN 124 +#define F_FREQUENZA 125 diff --git a/cg/cg4400a.uml b/cg/cg4400a.uml index ca1d847e4..8e83195bd 100755 --- a/cg/cg4400a.uml +++ b/cg/cg4400a.uml @@ -22,7 +22,7 @@ END NUMBER ANNO 4 BEGIN - PROMPT 2 2 "Anno " + PROMPT 41 3 "Anno " HELP "Anno di cui si vuole stampare il registro" FLAGS "A" WARNING "Inserire l'anno" @@ -30,9 +30,17 @@ BEGIN CHECKTYPE REQUIRED END -GROUPBOX DLG_NULL 35 5 +GROUPBOX DLG_NULL 35 6 BEGIN - PROMPT 2 3 "Scelta ditte" + PROMPT 2 2 "Scelta ditte" +END + +LIST F_FREQUENZA 1 12 +BEGIN + PROMPT 3 3 "Frequenza " + ITEM "0|" + ITEM "1|Mensile" + ITEM "2|Trimestrale" END NUMBER DA_CODICE 5