diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index f4f5c57fe..0ae25853a 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -12,6 +12,9 @@ // Nomi dei campi #include +#include +#include +#include #include #include @@ -58,8 +61,9 @@ TMask* TPrimanota_application::load_mask(int n) { m->set_handler(F_NUMREG, num_handler); m->set_handler(F_CODCAUS, caus_query_handler); - m->set_handler(F_DATAREG, datareg_handler); - m->set_handler(F_DATACOMP, datacomp_handler); + m->set_handler(F_DATAREG, datareg_handler); + // DATACOM new way + // m->set_handler(F_DATACOMP, datacomp_handler); TConfig c(CONFIG_STUDIO, "cg"); @@ -537,8 +541,9 @@ void TPrimanota_application::init_query_mode(TMask& m) } else { - m.set(F_DATAREG, _last_dreg); - m.set(F_DATACOMP, _last_dcom); + m.set(F_DATAREG, _last_dreg); + // DATACOMP new way + // m.set(F_DATACOMP, _last_dcom); } _incasso->_step = 0; // Azzera flag di incasso immediato @@ -601,7 +606,10 @@ const char* TPrimanota_application::get_next_key() _tmp.add(m.get(F_DATAREG)); _tmp.add(F_DATACOMP); // Ricopia data competenza - _tmp.add(m.get(F_DATACOMP)); + if (m.field(F_DATACOMP).empty()) + _tmp.add(m.get(F_DATAREG)); + else + _tmp.add(m.get(F_DATACOMP)); if (iva() == iva_vendite) { @@ -1554,6 +1562,164 @@ bool TPrimanota_application::link_m770() return tipo_coll > 0; } +HIDDEN void ini2bill(TConfig& ini, TBill& bil, bool contro) +{ + char tipo = ini.get_char(contro ? "TIPOC" : "TIPO"); + int gruppo = ini.get_int(contro ? "GRUPPOC" : "GRUPPO"); + int conto = ini.get_int(contro ? "CONTOC" : "CONTO"); + long sottoconto = ini.get_long(contro ? "SOTTOCONTOC" : "SOTTOCONTO"); + bil.set(gruppo, conto, sottoconto, tipo); +} + +HIDDEN bool set_not_empty(TMask& msk, int id, TConfig& ini, const char* var) +{ + const TString& val = ini.get(var); + bool ok = val.not_empty(); + if (ok) + msk.set(id, val); + return ok; +} + +HIDDEN bool add_not_empty(TToken_string& str, int pos, TConfig& ini, const char* var) +{ + const TString& val = ini.get(var); + bool ok = val.not_empty(); + if (ok) + str.add(val, pos); + return ok; +} + +void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query) +{ + TRelation_application::ini2mask(ini, msk, query); + if (query) + { + set_not_empty(msk, F_CODCAUS, ini, MOV_CODCAUS); + set_not_empty(msk, F_DATAREG, ini, MOV_DATAREG); + } + else + { + int i; + + TSheet_field& is = ivas(); + for (i = 0; ini.set_paragraph(format("25,%d", i+1)); i++) + { + TToken_string& riga = is.row(i); + + iva_notify(is, i, K_SPACE); + add_not_empty(riga, 0, ini, RMI_IMPONIBILE); // Imponibile 101 + add_not_empty(riga, 1, ini, RMI_CODIVA); // IVA 102 + add_not_empty(riga, 2, ini, RMI_TIPODET); // Detrazione 103 + add_not_empty(riga, 3, ini, RMI_IMPOSTA); // Imposta 104 + + TBill c; ini2bill(ini, c, FALSE); + if (c.gruppo() > 0) + c.add_to(riga, 4, 0x7); // Conto 105-110 + + iva_notify(is, i, K_ENTER); + } + + TSheet_field& cg = cgs(); + for (i = 0; ini.set_paragraph(format("24,%d", i+1)); i++) + { + TToken_string& riga = cg.row(-1); + + TImporto import(ini.get_char(RMV_SEZIONE), real(ini.get(RMV_IMPORTO))); + if (!import.is_zero()) + import.add_to(riga, 0); // Dare/Avere 101-102 + + TBill conto; ini2bill(ini, conto, FALSE); + if (conto.gruppo() > 0) + conto.add_to(riga, 2, 0x3); // Conto 103-107 + + riga.add("", 7); // Codice descrizione 108 + riga.add(ini.get(RMV_DESCR), 8); // Descrizione riga 109 + + ini2bill(ini, conto, TRUE); + if (conto.gruppo() > 0) + conto.add_to(riga, 9, 0x3); // Contropartita 110-114 + + riga.add(ini.get(RMV_NUMGIO), 13); + const char tipo = ini.get_char(RMV_ROWTYPE); + riga.add(tipo, 14); // Tipo di riga 115 + + disable_cgs_cells(i, tipo); + } + + calcola_imp(); // Calcola totale imponibile ed imposte + + TSheet_field& pag = pags(); + const int start_items = pag.items(); + + msk.reset(FS_RECALC); // Disabilita ricalcolo automatico + for (i = 0; ini.set_paragraph(format("29,%d", i+1)); i++) + { + TToken_string& row = pag.row(i); + if (i >= start_items) + pag_notify(pag, i, K_CTRL+K_INS); + + pag_notify(pag, i, K_SPACE); + add_not_empty(row, 0, ini, SCAD_DATASCAD); + add_not_empty(row, 1, ini, SCAD_IMPORTO); + add_not_empty(row, 2, ini, SCAD_IMPORTOVAL); + pag_notify(pag, i, K_ENTER); + } + pagamento().set_sheet(pag); + } +} + +void TPrimanota_application::mask2ini(TMask& msk, TConfig& ini) +{ + TRelation_application::mask2ini(msk, ini); + int i, f; + + for (i = 0; i < _rel->cg_items(); i++) + { + ini.set_paragraph(format("24,%d", i+1)); + + const TRectype& rec = _rel->cg(i); + for (f = rec.items()-1; f >= 0; f--) + { + const char* name = rec.fieldname(f); + ini.set(name, rec.get(name)); + } + } + + for (i = 0; i < _rel->iva_items(); i++) + { + ini.set_paragraph(format("25,%d", i+1)); + const TRectype& rec = _rel->iva(f); + for (f = rec.items()-1; f >= 0; f--) + { + const char* name = rec.fieldname(i); + ini.set(name, rec.get(name)); + } + } + + if (is_fattura()) + { + const long numreg = _rel->lfile().get_long(MOV_NUMREG); + TPartita* game = partite().first(); + if (game) + { + const int rigafatt = game->prima_fattura(numreg); + if (rigafatt > 0) + { + const TRiga_partite& riga = game->riga(rigafatt); + for (int r = 1; r <= riga.rate(); r++) + { + ini.set_paragraph(format("29,%d", r)); + const TRectype& rec = riga.rata(r); + for (f = rec.items()-1; f >= 0; f--) + { + const char* name = rec.fieldname(i); + ini.set(name, rec.get(name)); + } + } + } + } + } +} int cg2100 (int argc, char** argv) { diff --git a/cg/cg2100a.uml b/cg/cg2100a.uml index 9c9fedac6..b344635a2 100755 --- a/cg/cg2100a.uml +++ b/cg/cg2100a.uml @@ -65,6 +65,8 @@ BEGIN FLAGS "D" END + +/* DATACOMP new way DATE F_DATACOMP BEGIN PROMPT 3 9 "Data di competenza " @@ -77,6 +79,7 @@ BEGIN PROMPT 52 9 "Codice esercizio " FLAGS "DRZ" END +*/ STRING F_CODCAUS 3 BEGIN diff --git a/cg/cg2100b.uml b/cg/cg2100b.uml index c21e52c69..cc157b96a 100755 --- a/cg/cg2100b.uml +++ b/cg/cg2100b.uml @@ -54,8 +54,9 @@ BEGIN PROMPT 1 4 "Data di competenza " HELP "Data di competenza dell'operazione" FIELD DATACOMP - CHECKTYPE REQUIRED MESSAGE COPY,K_DATACOMP +// DATACOMP NEW WAY +// CHECKTYPE REQUIRED END NUMBER F_ANNOES 4 diff --git a/cg/cg2100c.uml b/cg/cg2100c.uml index 7b976cc8d..f5ceb46da 100755 --- a/cg/cg2100c.uml +++ b/cg/cg2100c.uml @@ -67,7 +67,7 @@ END NUMBER F_ANNOIVA 4 BEGIN - PROMPT 32 3 "Anno IVA " + PROMPT 32 3 "Anno IVA " FIELD ANNOIVA FLAGS "D" END @@ -76,7 +76,8 @@ DATE F_DATACOMP BEGIN PROMPT 1 4 "Data competenza " FIELD DATACOMP - CHECKTYPE REQUIRED +// DATACOMP NEW WAY +// CHECKTYPE REQUIRED END NUMBER F_ANNOES 4 diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index 7f0014ce6..acb168a4c 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -1596,8 +1596,9 @@ bool TPrimanota_application::num_handler(TMask_field& f, KEY key) if (ok) // Riempie a mano i campi necessari nel caso non sia stato usata la ricerca F9 { TMask& m = f.mask(); - m.set(F_DATAREG, mov.get("DATAREG"), TRUE); - m.set(F_DATACOMP, mov.get("DATACOMP"), TRUE); + m.set(F_DATAREG, mov.get("DATAREG"), TRUE); + // DATACOMP new way + // m.set(F_DATACOMP, mov.get("DATACOMP"), TRUE); m.set(F_CODCAUS, mov.get("CODCAUS")); f.set_focusdirty(FALSE); return m.stop_run(K_AUTO_ENTER); @@ -1777,7 +1778,9 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key) if (datacomp.empty()) { datacomp = dr.string(); - f.set(datacomp); + // DATACOMP new way + if (key == K_ENTER) + f.set(datacomp); } const TDate dc(datacomp); // Data di competenza TEsercizi_contabili& esc = app()._esercizi; @@ -1863,8 +1866,9 @@ bool TPrimanota_application::datadoc_handler(TMask_field& f, KEY key) if (a.is_fattura()) { if (m.insert_mode()) - { - a.recalc_scadenze(dd); + { + if (m.get_bool(FS_RECALC)) // Evita scancellamenti indesiderati + a.recalc_scadenze(dd); } else { diff --git a/cg/cg2102.h b/cg/cg2102.h index 74fb32c19..3abb2a079 100755 --- a/cg/cg2102.h +++ b/cg/cg2102.h @@ -146,6 +146,8 @@ protected: // TApplication virtual void on_config_change(); virtual void print(); virtual bool menu(MENU_TAG m); + virtual void ini2mask(TConfig& ini, TMask& msk, bool query); + virtual void mask2ini(TMask& msk, TConfig& ini); protected: // TRelation_application virtual bool user_create(); diff --git a/cg/cg2104.cpp b/cg/cg2104.cpp index 46d3e5f31..9604d79f6 100755 --- a/cg/cg2104.cpp +++ b/cg/cg2104.cpp @@ -26,8 +26,10 @@ TPagamento& TPrimanota_application::pagamento() const bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k) { - TMask* msk = &(ps.mask()); - if (!msk->is_running()) return TRUE; // Necessario per evitare il CHECK sul pagamento nullo + TMask* msk = &(ps.mask()); + +// if (!msk->is_running()) return TRUE; // Necessario per evitare il CHECK sul pagamento nullo + if (!app().is_fattura()) return TRUE; // Necessario per evitare il CHECK sul pagamento nullo TPagamento& pag = app().pagamento(); TString_array& rws = app().pag_rows(); @@ -67,7 +69,6 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k) newp = ns.get(3); // Percentuale newt = ns.get(4); // Tipo pagamento newu = ns.get(5); // Ulteriore classificazione - // qui viene il bello, si fa per dire if (news != ts.get(0)) // modificata data scadenza @@ -91,7 +92,8 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k) if (newu != ts.get(5)) // modificata ulteriore classificazione mod = m_ulc = TRUE; - else if (m_tipo) { + else if (m_tipo) + { // forza reset di ulc se si e' modificato il tipo rata m_ulc = TRUE; newu = ""; @@ -155,8 +157,9 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k) ahiahi = P_OK; // put data as they are TToken_string& trw = pag.rata(r); - TToken_string srw = trw; - if (m_tipo) trw.add(newt,2); + TToken_string& trs = ps.row(r); + if (m_tipo) + trw.add(newt,2); if (m_ulc) trw.add(newu, 5); if (m_scad) @@ -169,7 +172,8 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k) if (pag.mese_commerciale() && (scd % 30) != 0) scd = 30 * ((scd/30)+1); trw.add(scd, 0); - } + } + trs.add(news, 0); } if (m_impl) { @@ -179,22 +183,20 @@ bool TPrimanota_application::pag_notify(TSheet_field& ps, int r, KEY k) // si ricalcola la percentuale a modifica importo in lire solo // se non c'e' l'importo in valuta const real p = pag.recalc_percrata(r, FALSE); - ps.row(r).add(p.string(), 3); + trs.add(p.string(), 3); } - ps.force_update(r); } if (m_impv) { trw.add(newv,4); const real p = pag.recalc_percrata(r, TRUE); - ps.row(r).add(p.string(), 3); - ps.force_update(r); + trs.add(p.string(), 3); } - else - if (m_tipo) - ps.force_update(r); if (mod) - rws.row(r) = ps.row(r); + { + rws.row(r) = trs; + ps.force_update(r); + } } if (ahiahi) // any error? Rimetti le righe com'erano prima