diff --git a/cg/cg0500.cpp b/cg/cg0500.cpp index 3b5271760..ba25070e6 100755 --- a/cg/cg0500.cpp +++ b/cg/cg0500.cpp @@ -393,15 +393,16 @@ bool CG0500_application::tipodoc_hndl (TMask_field& f, KEY k) } app()->MostraCampi(f); - if (f.focusdirty()) - app()->fill_sheet(f.mask()); + // if (f.focusdirty()) + app()->fill_sheet(f.mask()); } return TRUE; } bool CG0500_application::tipomov_hndl (TMask_field& f, KEY k) { - if (k == K_SPACE) { + if (k == K_SPACE) + { app()->MostraCampi(f); if (f.focusdirty()) app()->fill_sheet(f.mask()); } @@ -412,7 +413,8 @@ bool CG0500_application::tipomov_hndl (TMask_field& f, KEY k) // essere puramente contabile (= codreg vuoto e tpm = Nessuno bool CG0500_application::codcausim_hndl (TMask_field& f, KEY k) { - if (f.to_check(k)) { + if (f.to_check(k)) + { TString16 causim(f.get()); TLocalisamfile& caus = app()->_rel->lfile(LF_CAUSALI); caus.zero(); @@ -442,9 +444,11 @@ bool CG0500_application::MostraCampi(TMask_field& f) m.hide(F_FAT_RITARDO); m.hide(F_OP_INTRACOM); m.hide(F_VALINTRA); - if (salda_conto()) m.hide(F_COD_CAUS_IM); + // if (salda_conto()) + m.hide(F_COD_CAUS_IM); - switch (tpm) { + switch (tpm) + { case 0: m.show(F_OP_FINE_ANNO); m.show(F_COLL_CESP); @@ -465,11 +469,13 @@ bool CG0500_application::MostraCampi(TMask_field& f) break; } } - else { // codreg non vuoto + else + { // codreg non vuoto m.hide(F_OP_FINE_ANNO); m.hide(F_MOV_SEZ); if (gestione_valuta()) m.show(F_MOV_VALU); - if (!salda_conto()) m.show(F_COD_CAUS_IM); + if (!salda_conto()) + m.show(F_COD_CAUS_IM); m.show(F_AUTO_FAT); m.show(F_ALLEGAT); m.show(F_FAT_RITARDO); @@ -482,7 +488,8 @@ bool CG0500_application::MostraCampi(TMask_field& f) bool CG0500_application::cod_reg_hndl (TMask_field& f, KEY k) { - if (k == K_TAB) { + if (k == K_TAB) + { app()->MostraCampi(f); if (f.focusdirty()) app()->fill_sheet(f.mask()); return TRUE; @@ -1049,13 +1056,15 @@ bool CG0500_application::user_create() _msk = new TMask("cg0500a"); - if (!salda_conto()) { + if (!salda_conto()) + { _msk->hide (F_MOV_SEZ); _msk->hide (F_TIPO_MOV_1); _msk->hide (F_TIPO_MOV_2); _msk->show (F_COD_CAUS_IM); } - else { + else + { _msk->show (F_MOV_SEZ); _msk->hide (F_COD_CAUS_IM); } @@ -1066,7 +1075,8 @@ bool CG0500_application::user_create() _msk->hide (F_MOV_VALU); _msk->set_handler(F_TIPO_DOC, tipodoc_hndl); - if (salda_conto()) { + if (salda_conto()) + { _msk->set_handler(F_TIPO_MOV_1, tipomov_hndl); _msk->set_handler(F_TIPO_MOV_2, tipomov_hndl); } diff --git a/cg/cg0500b.uml b/cg/cg0500b.uml index 87f8d5225..6e2a7498d 100755 --- a/cg/cg0500b.uml +++ b/cg/cg0500b.uml @@ -73,9 +73,11 @@ BEGIN DISPLAY "Conto" CONTO DISPLAY "Sottoconto" SOTTOCONTO DISPLAY "Descrizione@50" DESCR - OUTPUT 103 GRUPPO - OUTPUT 104 CONTO + DISPLAY "Tipo C/F" TMCF OUTPUT 105 SOTTOCONTO + OUTPUT 102 TMCF + OUTPUT 104 CONTO + OUTPUT 103 GRUPPO OUTPUT 107 DESCR ADD RUN CG0 -0 CHECKTYPE NORMAL @@ -93,11 +95,10 @@ BEGIN USE LF_CLIFO KEY 1 INPUT TIPOCF "C" INPUT CODCF 205 + DISPLAY "Sottoconto" CODCF + DISPLAY "Ragione sociale cliente@50" RAGSOC DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - DISPLAY "Tipo C/F" TIPOCF OUTPUT 205 CODCF OUTPUT 207 RAGSOC CHECKTYPE NORMAL @@ -113,11 +114,10 @@ BEGIN USE LF_CLIFO KEY 1 INPUT TIPOCF "F" INPUT CODCF 305 + DISPLAY "Sottoconto" CODCF + DISPLAY "Ragione sociale fornitore@50" RAGSOC DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - DISPLAY "Tipo C/F" TIPOCF OUTPUT 305 CODCF OUTPUT 307 RAGSOC CHECKTYPE NORMAL diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index c63f37f6a..34417a8e0 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -23,14 +23,16 @@ TMask* TPrimanota_application::load_mask(int n) { if (_msk[n] != NULL) return _msk[n]; - + if (n == 1 || n == 2) - for (int i = 1; i < 3; i++) // Try to save windows resources! - if (_msk[i] != NULL) - { - delete _msk[i]; - _msk[i] = NULL; - } + { + const int d = 3-n; + if (_msk[d] != NULL) + { + delete _msk[d]; + _msk[d] = NULL; + } + } TFilename name("cg2100"); name << char(n == 3 ? 'o' : 'a'+n); TMask* m = new TMask(name); @@ -55,6 +57,7 @@ TMask* TPrimanota_application::load_mask(int n) case 2: { m->set_handler(F_CODREG, reg_handler); + m->set_handler(F_PROTIVA, protiva_handler); m->set_handler(F_CLIENTE, clifo_handler); m->set_handler(F_FORNITORE, clifo_handler); m->set_handler(F_TOTALE, totale_handler); @@ -96,8 +99,8 @@ if (n == 1 || n == 2) TMask& cgm = cg.sheet_mask(); cgm.set_handler(101, dareavere_handler); cgm.set_handler(102, dareavere_handler); - cgm.set_handler(105, suspended_handler); cgm.set_handler(106, suspended_handler); + cgm.set_handler(105, cg_conto_handler); cgm.set_handler(206, cg_clifo_handler); cgm.set_handler(306, cg_clifo_handler); cgm.set_handler(112, suspended_handler); @@ -175,7 +178,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year) iva = _causale.iva(); } - TMask& m = *load_mask(iva == nessuna_iva ? 1 : 2); + TMask& m = *_msk[iva == nessuna_iva ? 1: 2]; m.efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio m.efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria @@ -208,46 +211,53 @@ void TPrimanota_application::print() bool TPrimanota_application::changing_mask(int mode) { if (mode == MODE_QUERY) - return _mode != MODE_QUERY; - - _iva = nessuna_iva; - - TString16 causale; - // TString16 registro; - int annoes = 0, annoiva = 0; - - switch (mode) { - case MODE_INS: - annoes = _msk[0]->get_int(F_ANNOES); - annoiva = _msk[0]->get_int(F_ANNOIVA); - causale = _msk[0]->get(F_CODCAUS); - read_caus(causale, annoiva); - break; - case MODE_MOD: - annoes = _rel->lfile().get_int("ANNOES"); - annoiva = _rel->lfile().get_int("ANNOIVA"); - causale = _rel->lfile().get("CODCAUS"); - giornale().read(annoes); - // registro = _rel->lfile()->get("REG"); - // _causale.read(causale, 0); - // _causale.reg().read(registro, annoiva); - read_caus(causale, annoiva); - break; - default: - break; - } - _iva = _causale.iva(); - + const bool flag = _mode != MODE_QUERY; + if (flag && _iva != nessuna_iva) + { + WINDOW w = ivas().parent(); + show_window(w, TRUE); + set_front_window(w); + process_events(); + show_window(w, FALSE); + } + return flag; + } + _iva = iva_errata; return TRUE; } TMask* TPrimanota_application::get_mask(int mode) { + int annoes = 0, annoiva = 0; + TString16 caus; + _mode = mode; - const int m = (mode == MODE_QUERY) ? 0 : (iva() == nessuna_iva ? 1 : 2); - return load_mask(m); + + switch (mode) + { + case MODE_INS: + annoes = _msk[0]->get_int(F_ANNOES); + annoiva = _msk[0]->get_int(F_ANNOIVA); + caus = _msk[0]->get(F_CODCAUS); + break; + case MODE_MOD: + annoes = _rel->lfile().get_int("ANNOES"); + annoiva = _rel->lfile().get_int("ANNOIVA"); + caus = _rel->lfile().get("CODCAUS"); + break; + default: + return load_mask(0); + } + + TCausale c(caus, annoiva); + _iva = causale().iva(); + + TMask* m = load_mask(_iva == nessuna_iva ? 1 : 2); + giornale().read(annoes); + read_caus(caus, annoiva); + return m; } @@ -276,7 +286,7 @@ void TPrimanota_application::init_mask(TMask& m) else { forg = 'h'; - clig = causale().reg().corrispettivi() ? 'h' : 's'; + clig = causale().corrispettivi() ? 'h' : 's'; } m.send_key(K_SHIFT+K_CTRL+clig, -1); // group 1 (clienti) m.send_key(K_SHIFT+K_CTRL+forg, -2); // group 2 (fornitori) @@ -286,13 +296,13 @@ void TPrimanota_application::init_mask(TMask& m) const bool corrval = intra && _causale.corrval(); m.show(F_CORRVALUTA, corrval); - - // Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_VISVAL (GROUP 3) - const bool valuta = _causale.valuta() && gestione_valuta(); - m.send_key(K_SHIFT+K_CTRL+(valuta ? 's' : 'h'), -3); - if (valuta) - m.set(F_VISVAL, "X"); } + + // Show/Hide campi valuta: F_VALUTA, F_CAMBIO, F_VISVAL (GROUP 3) + const bool valuta = _causale.valuta() && gestione_valuta(); + m.send_key(K_SHIFT+K_CTRL+(valuta ? 's' : 'h'), -3); + if (valuta) + m.set(F_VISVAL, "X"); m.disable(DLG_NEWREC); } @@ -431,6 +441,9 @@ void TPrimanota_application::put_conto(TRectype& r, const TBill& c) const r.put("SOTTOCONTO", c.sottoconto()); } + +// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE) +// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale bool TPrimanota_application::test_swap(bool ritsoc) { bool s = FALSE; @@ -456,19 +469,12 @@ int TPrimanota_application::read(TMask& m) error_box("Registrazione di acquisto attribuita ad un cliente"); else if (_iva == iva_vendite && clifo == 'F') error_box("Registrazione di vendita attribuita ad un fornitore"); - - if (_iva == iva_vendite) - { - TEdit_field& f = (TEdit_field&)m.field(F_CLIENTE); - f.check_type(clifo == 'C' ? CHECK_REQUIRED : CHECK_NORMAL); - } } - TSheet_field& cgs = (TSheet_field&)m.field(F_SHEETCG); - cgs.reset(); + cgs().reset(); - _saldi.reset(); // Azzera saldi - _saldi.set_movprovv(_rel->lfile().get_char("PROVVIS") > ' ' ? TRUE : FALSE); + _saldi.reset(); // Azzera saldi + _saldi.set_movprovv(_rel->lfile().get_bool("PROVVIS")); _saldi.set_movap(_causale.apertura()); _saldi.set_anno_es(m.get_int(F_ANNOES)); _saldi.set_num_ulmov(m.get_long(F_NUMREG)); @@ -482,10 +488,8 @@ int TPrimanota_application::read(TMask& m) riga.cut(0); // Vuota la riga const int rcontr = r.get_int("RCONTR") -1; -#ifdef DBG if (rcontr < -1 || rcontr >= _rel->cg_items() || rcontr == i) error_box("La riga %d non puo' avere per contropartita la %d", i+1, rcontr+1); -#endif const real im(r.get_real("IMPORTO")); const char sezione = toupper(r.get_char("SEZIONE")); @@ -511,7 +515,7 @@ int TPrimanota_application::read(TMask& m) const char tipo = r.get_char("ROWTYPE"); riga.add(tipo); // Tipo di riga 115 - cgs.row(i) = riga; + cgs().row(i) = riga; disable_cgs_cells(i, tipo); } @@ -522,8 +526,7 @@ int TPrimanota_application::read(TMask& m) m.set(F_SOLAIVA, solaiva ? "X" : " "); m.field(F_SOLAIVA).on_hit(); - TSheet_field& ivas = (TSheet_field&)m.field(F_SHEETIVA); - ivas.reset(); + ivas().reset(); const bool to_swap = test_swap(FALSE); @@ -546,7 +549,7 @@ int TPrimanota_application::read(TMask& m) else riga.add(" | | | | | "); - ivas.row(i) = riga; + ivas().row(i) = riga; } TMask_field& vv = m.field(F_VISVAL); @@ -616,7 +619,7 @@ void TPrimanota_application::mask2rel(const TMask& m) rcontr = bill2contr(contro, n.sezione())+1; if (rcontr < 1) { - warning_box("La riga contabile %d non ha una contropartita", cur); + warning_box("La riga contabile %d non ha una contropartita valida", cur); rcontr = 0; } } @@ -628,7 +631,7 @@ void TPrimanota_application::mask2rel(const TMask& m) } if (_iva == nessuna_iva) return; - if (causale().reg().corrispettivi()) + if (causale().corrispettivi()) { TRectype& rec = _rel->lfile().curr(); rec.put("TIPO", ""); @@ -699,9 +702,13 @@ int TPrimanota_application::write(const TMask& m) if (err == NOERR) { _saldi.registra(); - const TString16 causimm(_causale.causale_inc_imm()); - if (causimm.not_empty()) - genera_incasso(causimm); + + if (iva() == iva_vendite && !gestione_saldaconto()) + { + const TString16 causimm(_causale.causale_inc_imm()); + if (causimm.not_empty()) + genera_incasso(causimm); + } if (gestione_saldaconto() && _causale.saldaconto()) aggiorna_scadenzario(m); @@ -768,15 +775,20 @@ void TPrimanota_application::genera_incasso(const char* causimm) r.put("NUMREG", _lastreg); r.put("NUMRIG", 1); r.put("IMPORTO", imp); - r.put("ROWTYPE", ' '); r.put("SEZIONE", sez == 'A' ? 'D' : 'A'); + r.put("TIPOC", m.get(F_CLIFO)); + r.put("GRUPPO", m.get_int(F_GRUPPOCLIFO)); + r.put("CONTO", m.get_int(F_CONTOCLIFO)); + r.put("SOTTOCONTO", m.get_long(F_CLIENTE)); + r.put("ROWTYPE", ' '); + inc.cg(0) = r; r.put("NUMRIG", 2); r.put("SEZIONE", sez); inc.cg(1) = r; - while (inc.write() == _isreinsert) // In caso di riscrittura + while (inc.write() == _isreinsert) // In caso di riscrittura inc.lfile().put("NUMREG", ++_lastreg); // Incrementa numero registrazione } } diff --git a/cg/cg2100i.uml b/cg/cg2100i.uml index dfd5d967c..946bc0ad0 100755 --- a/cg/cg2100i.uml +++ b/cg/cg2100i.uml @@ -50,6 +50,7 @@ BEGIN PROMPT 43 3 "Data del documento " FIELD LF_MOV->DATADOC CHECKTYPE REQUIRED + WARNING "Specificare la data del documento" END STRING F_DESCR 50 50 @@ -154,16 +155,14 @@ END NUMBER F_GRUPPOCLIFO 3 BEGIN PROMPT 1 8 "Gruppo " - FIELD LF_MOV->GRUPPO END NUMBER F_CONTOCLIFO 3 BEGIN PROMPT 16 8 "Conto " - FIELD LF_MOV->CONTO END -NUMBER F_TOTALE 14 +NUMBER F_TOTALE 15 BEGIN PROMPT 1 9 "Totale documento " FIELD LF_MOV->TOTDOC diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index 0c02a18ed..18028b90d 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -25,7 +25,7 @@ TipoIVA TPrimanota_application::cau2IVA(const char* causale, int annoiva) if (*causale > ' ') { - TCausale c; + TCausale& c = app().causale(); if (c.read(causale, annoiva)) i = c.iva(); else @@ -64,22 +64,25 @@ real TPrimanota_application::scorpora(real& imponibile, const real& percent) return imposta; } + +// Calcola il totale del documento tenenod conto del segno della prima riga e di quella delle +// ritenute sociali sulla causale real TPrimanota_application::totale_documento() { - const TMask& m = mask(); + const TMask& m = curr_mask(); const bool swapt = test_swap(FALSE); // Totale invertito ? const bool swaps = test_swap(TRUE); // Ritenute sociali invertite ? - real tot(m.get(F_TOTALE)); + real tot(m.get(F_TOTALE)); // Legge totale const real ritfis(m.get(F_RITFIS)); - tot += ritfis; + tot += ritfis; // Somma ritenute fiscali - real ritsoc(m.get(F_RITSOC)); + real ritsoc(m.get(F_RITSOC)); if (swapt ^ swaps) ritsoc = -ritsoc; + tot += ritsoc; // Somma ritenute sociali con segno - tot += ritsoc; return tot; } @@ -120,7 +123,7 @@ bool TPrimanota_application::detraibile(TToken_string& row) TRegistro& reg = app().causale().reg(); TString16 chiave; - chiave << app().mask().get(F_ANNOIVA) << reg.attivita(); + chiave << app().curr_mask().get(F_ANNOIVA) << reg.attivita(); int tipoatt = 1; if (reg.attivita_mista()) // Se attivita mista ... @@ -237,18 +240,9 @@ int TPrimanota_application::det_used(char det) const // Gestione sheet CG /////////////////////////////////////////////////////////// -TMask& TPrimanota_application::mask() const -{ - const TipoIVA i = app().iva(); - const int m = i == nessuna_iva ? 1 : 2; - CHECKD(_msk[m], "Maschera non attiva! ", m); - return *_msk[m]; -} - - TSheet_field& TPrimanota_application::cgs() const { - TSheet_field& s = (TSheet_field&)mask().field(F_SHEETCG); + TSheet_field& s = (TSheet_field&)curr_mask().field(F_SHEETCG); return s; } @@ -448,16 +442,16 @@ real TPrimanota_application::calcola_saldo() const switch (sbilancio.sign()) { case 1: - mask().set(F_DARE, (tdare-tavere).string()); - mask().reset(F_AVERE); + curr_mask().set(F_DARE, (tdare-tavere).string()); + curr_mask().reset(F_AVERE); break; case -1: - mask().reset(F_DARE); - mask().set(F_AVERE, (tavere-tdare).string()); + curr_mask().reset(F_DARE); + curr_mask().set(F_AVERE, (tavere-tdare).string()); break; default: - mask().reset(F_DARE); - mask().reset(F_AVERE); + curr_mask().reset(F_DARE); + curr_mask().reset(F_AVERE); break; } @@ -522,12 +516,15 @@ bool TPrimanota_application::cg_notify(int r, KEY k) TImporto i; i = row; if (i.valore() != 0.0) { - i.swap_section(); TBill contro(row, 9, 0x3); - app().set_cgs_row(1, i, contro, "", ' '); - TBill conto(row, 2, 0x3); - conto.add_to(cg.row(1), 9, 0x3); - app().cgs().force_update(1); + if (contro.ok()) + { + i.swap_section(); + app().set_cgs_row(1, i, contro, "", ' '); + TBill conto(row, 2, 0x3); + conto.add_to(cg.row(1), 9, 0x3); + app().cgs().force_update(1); + } } } app().calcola_saldo(); @@ -596,7 +593,7 @@ bool TPrimanota_application::imponibile_handler(TMask_field& f, KEY key) TString16 iva(m.get(102)); if (iva.empty()) { - iva = app().mask().get(F_CODIVA); + iva = app().curr_mask().get(F_CODIVA); m.set(102, iva); } if (iva.not_empty() && !app().causale().corrispettivi()) @@ -678,8 +675,8 @@ real TPrimanota_application::calcola_imp() const imposte += real(row.get(3)); } - mask().set(F_IMPONIBILI, imponibili.string()); - mask().set(F_IMPOSTE, imposte.string()); + curr_mask().set(F_IMPONIBILI, imponibili.string()); + curr_mask().set(F_IMPOSTE, imposte.string()); return imponibili+imposte; } @@ -710,9 +707,9 @@ bool TPrimanota_application::iva_notify(int r, KEY k) if (oldposiva < 0 && oldiva != ZERO) { - const int r = tipod == 'D' ? 3 : 4; - TBill c; cau.bill(r, c); - const TString80 d(cau.desc_agg(r)); + const int ri = tipod == 'D' ? 3 : 4; + TBill c; cau.bill(ri, c); + const TString80 d(cau.desc_agg(ri)); oldposiva = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), c, d, tipod); } @@ -785,8 +782,8 @@ bool TPrimanota_application::iva_notify(int r, KEY k) // Aggiorna conto IVA sulla riga contabile const bool detrarre = detraibile(row); // Determina se IVA detraibile - const int r = detrarre ? 3 : 4; - app().causale().bill(r, conto); + const int ri = detrarre ? 3 : 4; + app().causale().bill(ri, conto); const char tipod = detrarre ? 'D' : 'N'; int newposiva = type2pos(tipod); @@ -795,7 +792,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k) const TImporto val(app().real2imp(imposta, 'I')); if (val.valore() != ZERO) { - d = cau.desc_agg(r); + d = cau.desc_agg(ri); newposiva = app().set_cgs_row(-1, val, conto, d, tipod); } } @@ -814,7 +811,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k) oldposiva = newposiva; if (r == 0) - app().add_cgs_tot(app().mask()); + app().add_cgs_tot(app().curr_mask()); app().calcola_imp(); app().calcola_saldo(); } @@ -844,6 +841,26 @@ bool TPrimanota_application::iva_handler(TMask_field& f, KEY k) return TRUE; } +bool TPrimanota_application::cg_conto_handler(TMask_field& f, KEY key) +{ + if (key == K_TAB) + { + const TipoIVA i = app().iva(); + if (i != nessuna_iva) + { + TMask& m = f.mask(); + const short id = f.dlg(); + const short clifo = id + (i == iva_vendite ? 101 : 201); + if (!m.field(clifo).enabled()) + { + char cf = m.get(id-2)[0]; + if (cf != app().clifo()) + return error_box("Tipo di conto incongruente col tipo di registrazione"); + } + } + } + return TRUE; +} bool TPrimanota_application::cg_clifo_handler(TMask_field& f, KEY k) { @@ -932,7 +949,7 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key) ok = app().causale().similar(c); if (!ok) { - f.error_box("Causale incongruente con quella precedentemente inserita"); + f.error_box("Causale incongruente con quella inserita precedentemente"); return FALSE; } app().read_caus(cau, ann); @@ -990,7 +1007,9 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key) if (mov.read() == NOERR) m.set(F_CODCAUS, mov.get(MOV_CODCAUS)); } - app().read_caus(m.get(F_CODCAUS), dr.year()); + // Forza aggiornamento registro causale essendo cambiato l'anno + const bool ok = app().causale().read(m.get(F_CODCAUS), dr.year()); + if (!ok) return FALSE; } TRegistro& reg = app().causale().reg(); @@ -1254,6 +1273,19 @@ void TPrimanota_application::add_cgs_rit(bool fiscali) set_cgs_imp(pos, real2imp(imp, tipo)); } +// Handler of the F_PROTIVA +bool TPrimanota_application::protiva_handler(TMask_field& f, KEY key) +{ + if (key == K_ENTER && f.dirty() && f.mask().mode() == MODE_INS) + { + const long protiva = atol(f.get()); + const long protocol = app().causale().reg().protocol() + 1; + if (protiva != protocol) + f.warning_box("Protocollo IVA fuori sequenza: %ld invece di %ld", protiva, protocol); + } + return TRUE; +} + // Handler of the F_RITFIS // Certified 99% @@ -1302,7 +1334,9 @@ bool TPrimanota_application::solaiva_handler(TMask_field& f, KEY key) TMask& m = f.mask(); const bool anchecg = !m.get_bool(F_SOLAIVA); - app().cgs().show(anchecg); + m.show(F_SHEETCG, anchecg); + m.show(F_DARE, anchecg); + m.show(F_AVERE, anchecg); if (m.is_running() && anchecg) { diff --git a/cg/cg2102.h b/cg/cg2102.h index a524a1c2e..a47378a89 100755 --- a/cg/cg2102.h +++ b/cg/cg2102.h @@ -58,6 +58,7 @@ class TPrimanota_application : public TRelation_application static bool datacomp_handler(TMask_field& f, KEY key); static bool data74ter_handler(TMask_field& f, KEY key); static bool reg_handler(TMask_field& f, KEY key); + static bool protiva_handler(TMask_field& f, KEY key); static bool clifo_handler(TMask_field& f, KEY key); static bool totale_handler(TMask_field& f, KEY key); static bool ritfis_handler(TMask_field& f, KEY key); @@ -73,6 +74,7 @@ class TPrimanota_application : public TRelation_application static bool codiva_handler(TMask_field& f, KEY key); static bool imposta_handler(TMask_field& f, KEY key); static bool dareavere_handler(TMask_field& f, KEY k); + static bool cg_conto_handler(TMask_field& f, KEY key); static bool cg_clifo_handler(TMask_field& f, KEY k); static bool iva_notify(int r, KEY key); @@ -111,7 +113,6 @@ protected: TipoIVA iva() const { return _iva; } char clifo() const { return iva() == iva_vendite ? 'C' : 'F'; } - TMask& TPrimanota_application::mask() const; bool gestione_valuta() const { return _ges_val; } bool gestione_saldaconto() const { return _ges_sal; } bool riferimento_partita() const { return _rif_par; } diff --git a/cg/cg21iva.uml b/cg/cg21iva.uml index 3aa15ddb5..196bf7041 100755 --- a/cg/cg21iva.uml +++ b/cg/cg21iva.uml @@ -117,7 +117,7 @@ BEGIN PROMPT 2 3 "Descriz. " FIELD LF_PCON->DESCR USE LF_PCON KEY 2 - INPUT DESCR 107 + INPUT DESCR 110 DISPLAY "Descrizione@50" DESCR DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO diff --git a/cg/cg4.url b/cg/cg4.url index f3986911c..90736dbdb 100755 --- a/cg/cg4.url +++ b/cg/cg4.url @@ -24,7 +24,6 @@ MENUBAR MENU_BAR(3) MENU MENU_BAR(3) SUBMENU MENU_FILE "~File" - ITEM BAR_ITEM(1) "~Scelta parametri" /* cg4 -4 Apertura nuovo esercizio/nuovo esercizio IVA */ @@ -41,5 +40,4 @@ MENUBAR MENU_BAR(5) MENU MENU_BAR(5) SUBMENU MENU_FILE "~File" - ITEM BAR_ITEM(1) "~Chiusura Apertura Conti" diff --git a/cg/cg4300a.uml b/cg/cg4300a.uml index db63b0fe6..b5e52a78d 100755 --- a/cg/cg4300a.uml +++ b/cg/cg4300a.uml @@ -13,7 +13,7 @@ BEGIN END GROUPBOX DLG_NULL 40 5 -BEGIN +BEGIN PROMPT 23 1 "Scelta ditte" END @@ -103,7 +103,7 @@ END GROUPBOX DLG_NULL 60 3 -BEGIN +BEGIN PROMPT 4 10 "Stampa" END @@ -132,12 +132,12 @@ BEGIN END -BUTTON DLG_OK 8 2 +BUTTON DLG_OK 10 2 BEGIN PROMPT -12 -1 "" END -BUTTON DLG_CANCEL 7 2 +BUTTON DLG_CANCEL 10 2 BEGIN PROMPT -22 -1 "" END diff --git a/cg/cg4300b.uml b/cg/cg4300b.uml index 24010c32d..b79e14555 100755 --- a/cg/cg4300b.uml +++ b/cg/cg4300b.uml @@ -3,10 +3,10 @@ PAGE "Estrazione deleghe" -1 -1 45 9 NUMBER FLD_CGB_YEAR 4 -BEGIN +BEGIN PROMPT 2 1 "Anno estrazione " FLAGS "A" -END +END LIST FLD_CGB_MONTH 10 BEGIN @@ -20,24 +20,24 @@ BEGIN PROMPT 2 4 "Scelta ditte" END -BUTTON DLG_SELECT 9 2 +BUTTON DLG_SELECT 10 2 BEGIN PROMPT -12 5 "Scegli" MESSAGE EXIT,DLG_SELECT END -BUTTON BUT_CGB_ALL 9 2 +BUTTON BUT_CGB_ALL 10 2 BEGIN PROMPT -22 5 "Tutte" MESSAGE EXIT,BUT_CGB_ALL END -BUTTON DLG_OK 8 2 +BUTTON DLG_OK 10 2 BEGIN PROMPT -12 -1 "" END -BUTTON DLG_CANCEL 7 2 +BUTTON DLG_CANCEL 10 2 BEGIN PROMPT -22 -1 "" END diff --git a/cg/cg4300c.uml b/cg/cg4300c.uml index 2a3fb2077..5e913fc4c 100755 --- a/cg/cg4300c.uml +++ b/cg/cg4300c.uml @@ -35,24 +35,24 @@ BEGIN PROMPT 3 6 "Scelta ditte" END -BUTTON DLG_SELECT 9 2 +BUTTON DLG_SELECT 10 2 BEGIN PROMPT -12 7 "Scegli" MESSAGE EXIT,DLG_SELECT END -BUTTON BUT_CGC_ALL 9 2 +BUTTON BUT_CGC_ALL 10 2 BEGIN PROMPT -22 7 "Tutte" MESSAGE EXIT,BUT_CGC_ALL END -BUTTON DLG_OK 8 2 +BUTTON DLG_OK 10 2 BEGIN PROMPT -12 -1 "" END -BUTTON DLG_CANCEL 7 2 +BUTTON DLG_CANCEL 10 2 BEGIN PROMPT -22 -1 "" END diff --git a/include/mask.cpp b/include/mask.cpp index 520754f46..5672aa53f 100755 --- a/include/mask.cpp +++ b/include/mask.cpp @@ -218,6 +218,7 @@ void TMask::read_mask(const char* name, int mode, int num) _source_file.ext(MASK_EXT); TScanner scanner(_source_file); + _sheetmask = num > 0; for (int i = 0; i < num; i++) { while (scanner.ok()) @@ -417,7 +418,7 @@ void TMask::enable_page(int page, bool on) bool TMask::page_enabled(int page) const { - unsigned long n = 1 << page; + const unsigned long n = 1 << page; return (_enabled & n) > 0; } @@ -459,6 +460,8 @@ void TMask::start_run() bool TMask::check_fields() { WINDOW curpage = NULL_WIN; // Page under test + + const bool sheet = is_sheetmask() && !is_open(); const int max = fields(); for (int i = 0; i < max; i++) @@ -472,6 +475,9 @@ bool TMask::check_fields() break; // Page disabled: end of test curpage = f.parent(); // Update current page } + + if (sheet) f.set_dirty(); // Force check in sheets + if (f.on_key(K_ENTER) == FALSE) { if (is_open()) f.set_focus(); @@ -510,12 +516,12 @@ int TMask::id2pos(short id) const } } - for (pos = 0; pos < max; pos++) // Standard linear search + for (pos = 0; pos < max; pos++) // Standard linear search { const TMask_field& f = fld(pos); if (f.dlg() == id) { - if (j >= 0 && j < MAX_FIELDS) // Store position for the next clock + if (j >= 0 && j < MAX_FIELDS) // Store position for the next time positions[j] = pos; return pos; } @@ -1137,8 +1143,9 @@ void TMask::send_key(KEY key, short to) const } else { + const int max = fields(); to = -to; - for (int i = 0; i < fields(); i++) + for (int i = 0; i < max; i++) { TMask_field& campo = fld(i); if (campo.in_group((int)to)) diff --git a/include/mask.h b/include/mask.h index ce2aeead6..a60b0afa5 100755 --- a/include/mask.h +++ b/include/mask.h @@ -49,6 +49,7 @@ class TMask : public TWindow long _lastpos; // last read offset on savefile real _exchange; // Current value exhange + bool _sheetmask; // Mask owned by a sheet protected: // Ritorna la finestra della pagina corrente (Usare con attenzione) @@ -177,6 +178,7 @@ public: bool load(bool reset = FALSE); short dirty() const; // Ritorna il primo campo dirty + bool is_sheetmask() const { return _sheetmask; } bool no_mode() const { return _mode == NO_MODE; } bool query_mode() const { return _mode == MODE_QUERY || _mode == MODE_QUERYINS; } diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 79c246f47..db9751297 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -1,4 +1,4 @@ -// $Id: maskfld.cpp,v 1.27 1994-10-07 17:26:45 alex Exp $ +// $Id: maskfld.cpp,v 1.28 1994-10-11 17:36:23 guy Exp $ #include #include @@ -762,16 +762,16 @@ HIDDEN char* const _msg = &__tmp_string[512]; bool TMask_field::error_box(const char* fmt, ...) const { build_msg(); - if (mask().is_running()) + if (mask().is_sheetmask() && !mask().is_running()) { - set_focus(); - ::error_box("%s", _msg); - set_focus(); + xvt_statbar_set(_msg); + beep(); } else { - xvt_statbar_set(_msg); - beep(); + set_focus(); + ::error_box("%s", _msg); + set_focus(); } return FALSE; } @@ -789,16 +789,16 @@ bool TMask_field::warning_box(const char* fmt, ...) const { build_msg(); - if (mask().is_running()) + if (mask().is_sheetmask() && !mask().is_running()) + { + xvt_statbar_set(_msg); + beep(); + } + else { set_focus(); ::warning_box("%s", _msg); set_focus(); - } - else - { - xvt_statbar_set(_msg); - beep(); } return FALSE; } @@ -1851,6 +1851,7 @@ const char* TEdit_field::picture_data(const char* data, bool video) { if (video) { + data = format(data); set_title(win(), (char*)data); return get_window_data(); } diff --git a/include/msksheet.cpp b/include/msksheet.cpp index fe0ee9e8a..5bc77c995 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -83,6 +83,7 @@ public: TSpreadsheet(short x, short y, short dx, short dy, const char* maskname, int maskno, const char* head, WINDOW parent); + virtual ~TSpreadsheet(); }; // Certified 99% @@ -230,6 +231,12 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy, _list = xi_get_obj(_itf, LIST_CID); } +TSpreadsheet::~TSpreadsheet() +{ + set_win(NULL_WIN); +} + + // Converts a row number in the correspondig record number int TSpreadsheet::row2rec(int row) @@ -438,6 +445,13 @@ break; else *dst = '\0'; } +break; + case XIE_CHAR_CELL: + if (!_row_dirty) +{ + notify(_cur_row, K_SPACE); + _row_dirty = TRUE; +} break; case XIE_BUTTON: if (xiev->v.xi_obj->type == XIT_CELL) @@ -453,8 +467,9 @@ break; mask2str(_cur_row); // Update row _row_dirty = TRUE; } - _check_enabled = TRUE; // Enable checks + set_front_window(win()); // It seems necessary to make xi_set_focus work properly xi_set_focus(xiev->v.xi_obj); // Restore focus to cell + _check_enabled = TRUE; // Enable checks } } else if (xiev->v.xi_obj->type == XIT_LIST) @@ -536,22 +551,15 @@ break; case XIE_OFF_CELL: if (_edit_field && _check_enabled) { - TMask_field* c = _edit_field; // Save field, it could turn out to be NULL on error - const TString80 old(c->get()); // Save old value on mask - const TString80 nuo(c->picture_data(xi_get_text(xiev->v.xi_obj, NULL, -1), TRUE)); - if (old != nuo) - { - _check_enabled = FALSE; - if (!_row_dirty) - { - notify(_cur_row, K_SPACE); - _row_dirty = TRUE; - } + _check_enabled = FALSE; + if (_row_dirty) + { + TMask_field* c = _edit_field; // Save field, it could turn out to be NULL on error + const char* nuo = c->picture_data(xi_get_text(xiev->v.xi_obj, NULL, -1), TRUE); c->set(nuo); // Set new mask value c->set_dirty(); // Get it dirty! if (c->on_key(c->is_edit() ? K_TAB : K_SPACE) == FALSE) // Test it { - c->set(old); xiev->refused = TRUE; } else @@ -559,8 +567,8 @@ break; mask2str(_cur_row); // Update sheet row _edit_field = NULL; // Reset current field } - _check_enabled = TRUE; - } + } + _check_enabled = TRUE; } break; case XIE_GET_PERCENT: @@ -571,7 +579,6 @@ break; } break; case XIE_CLEANUP: - set_win(NULL_WIN); break; case XIE_XVT_EVENT: { diff --git a/include/relapp.cpp b/include/relapp.cpp index f400b5cff..bf366ab0b 100755 --- a/include/relapp.cpp +++ b/include/relapp.cpp @@ -1,4 +1,4 @@ -// $Id: relapp.cpp,v 1.13 1994-10-07 14:59:09 guy Exp $ +// $Id: relapp.cpp,v 1.14 1994-10-11 17:36:29 guy Exp $ #include #include #include @@ -330,9 +330,10 @@ bool TRelation_application::autonum(TMask* m, bool rec) void TRelation_application::query_mode(bool pre_ins) { TMask* old = _mask; + const bool changing = changing_mask(MODE_QUERY) || old == NULL; - if (changing && old) + if (changing && old != NULL) old->close_modal(); _mask = get_mask(MODE_QUERY); @@ -373,7 +374,7 @@ void TRelation_application::insert_mode() const bool changing = changing_mask(MODE_INS); - TFilename workname; workname.temp("rim.$$"); + TFilename workname; workname.temp("rim$$"); if (changing) { @@ -427,7 +428,7 @@ bool TRelation_application::modify_mode() if (err != NOERR) { - error_box("Errore di caricamento dati nella maschera %d", err); + error_box("Errore di caricamento dati nella maschera: %d", err); query_mode(); return FALSE; } @@ -745,8 +746,8 @@ bool TRelation_application::main_loop() } break; case K_F9: - if (save(TRUE)); - search_mode(); + if (save(TRUE)) + search_mode(); break; default: if (save(TRUE)) diff --git a/include/relation.cpp b/include/relation.cpp index 304d81e7a..3d7fb0d16 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -1,4 +1,4 @@ -// $Id: relation.cpp,v 1.15 1994-10-07 14:55:43 alex Exp $ +// $Id: relation.cpp,v 1.16 1994-10-11 17:36:31 guy Exp $ // relation.cpp // fv 12/8/93 // relation class for isam files @@ -661,7 +661,7 @@ FILE* TCursor::open_index(bool create) const FILE* f = fopen(_indexname, create ? w : r); if (f == NULL) - fatal_box("Can't use cursor index for file %d\n", file().filehnd()->ln); + fatal_box("Can't use cursor index for file %d: '%s'\n", file().filehnd()->ln, _indexname); return f; } diff --git a/include/window.cpp b/include/window.cpp index 3a89a1139..12579b196 100755 --- a/include/window.cpp +++ b/include/window.cpp @@ -149,6 +149,7 @@ void TWindow_manager::unreg(const TWindow* m) { cur_win()->enable(); win_menu_enable(TASK_WIN, M_FILE_QUIT, _current == 0); + win_update_menu_bar(TASK_WIN); } }