From f2770ff0cbc6d0ab910982cf50fc8dd74f8eaab7 Mon Sep 17 00:00:00 2001 From: guy Date: Thu, 29 Feb 1996 11:14:48 +0000 Subject: [PATCH] Corretta gestione extra-contabile git-svn-id: svn://10.65.10.50/trunk@2652 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg2102.cpp | 25 ++++---- cg/cg2105.cpp | 168 +++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 144 insertions(+), 49 deletions(-) diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index e2c99bdcd..3a3163802 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -1239,7 +1239,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k) oldpos = bill2pos(oldconto, 'I'); if (oldpos < 0) { - const TString80 d(cau.desc_agg(2)); + const TString d(cau.desc_agg(2)); oldpos = a.set_cgs_row(-1, a.real2imp(ZERO, 'I'), oldconto, d, 'I'); } } @@ -1307,7 +1307,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k) const TImporto val(a.real2imp(imponibile, 'I')); if (conto.ok() && !val.is_zero()) // Se c'e' imponibile ... { // crea una nuova riga contabile - const TString80 d(cau.desc_agg(2)); + const TString d(cau.desc_agg(2)); a.set_cgs_row(-1, val, conto, d, 'I'); } } @@ -1337,7 +1337,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k) if (!imposta.is_zero()) // Se c'e' imposta ... { // ... crea nuova riga per l'IVA const TImporto val(a.real2imp(imposta, 'I')); - const TString80 d(cau.desc_agg(ri)); + const TString d(cau.desc_agg(ri)); newposiva = a.set_cgs_row(-1, val, contoiva, d, tipod); } } @@ -1487,7 +1487,7 @@ bool TPrimanota_application::iva_sottoconto_handler(TMask_field& f, KEY key) if (td == "FV" || td == "NC") spric = 4; } - TString16 s; if (spric > 0) s << spric; + TString s; if (spric > 0) s << spric; m.set(105, s, TRUE); // Setta il campo spesa-ricavo della riga IVA } return TRUE; @@ -1598,7 +1598,7 @@ bool TPrimanota_application::caus_query_handler(TMask_field& f, KEY key) if (f.to_check(key)) { - const TString16 cau = f.get(); + const TString cau = f.get(); const int ann = m.get_int(F_ANNOIVA); const TipoIVA i = app().cau2IVA(cau, ann); // Cerca causale e suo tipo @@ -1625,7 +1625,7 @@ bool TPrimanota_application::caus_modify_handler(TMask_field& f, KEY key) if (!ok) return FALSE; const int ann = f.mask().get_int(F_ANNOIVA); - const TString16 cau(f.get()); + const TString cau(f.get()); const TCausale c(cau, ann); if (!c.ok()) return FALSE; @@ -1656,12 +1656,15 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key) if (dr > TDate(TODAY)) return f.error_box("La data dell'operazione e' superiore quella di sistema"); - const int ae = app()._esercizi.date2esc(dr); // Anno esercizio + TPrimanota_application& a = app(); + TLibro_giornale& gio = a.giornale(); + + const int ae = a._esercizi.date2esc(dr); // Anno esercizio if (ae <= 0) return f.error_box("La data dell'operazione non appartiene a nessun esercizio"); - if (m.query_mode() || app().giornale().year() != ae) - ok = app().giornale().read(ae); + if (m.query_mode() || gio.year() != ae) + ok = gio.read(ae); else ok = TRUE; @@ -1670,13 +1673,11 @@ bool TPrimanota_application::datareg_handler(TMask_field& f, KEY key) if (key == K_ENTER || f.focusdirty()) { - TPrimanota_application& a = app(); const long numreg = m.get_long(F_NUMREG); const bool error = numreg == 0 || numreg > a._lastreg; - if (key != K_ENTER && !app()._skip_giornale_check) + if (key != K_ENTER && !a._skip_giornale_check) { - const TLibro_giornale& gio = a.giornale(); if (dr < gio.last_print()) { f.error_box("La data dell'operazione e' antecedente al %s,\n" diff --git a/cg/cg2105.cpp b/cg/cg2105.cpp index c982621f9..2f3785a35 100755 --- a/cg/cg2105.cpp +++ b/cg/cg2105.cpp @@ -101,6 +101,7 @@ class TPay_mask : public TMask const TGame_mask& _parent; TDecoder _causale; + bool _assigned; bool _can_solder; protected: @@ -111,10 +112,21 @@ protected: static bool conto_handler(TMask_field& f, KEY k); static bool descr_handler(TMask_field& f, KEY k); void gioca_cambi(int force = 0x0); +#ifdef __EXTRA__ + static bool datareg_handler(TMask_field& f, KEY k); + static bool datadoc_handler(TMask_field& f, KEY k); + static bool numdoc_handler(TMask_field& f, KEY k); + static bool sezione_handler(TMask_field& f, KEY k); +#endif public: void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo); void get_pag(TRectype& oldpag, TRectype& somma) const; + + bool assigned() const { return _assigned; } + bool unassigned() const { return !_assigned; } + + void attiva_valuta(bool on); TPay_mask(const TGame_mask& parent, int mode); virtual ~TPay_mask() {} @@ -134,13 +146,15 @@ TPay_mask::TPay_mask(const TGame_mask& parent, int mod) enable(DLG_DELREC, edit_mode()); #ifdef __EXTRA__ - enable(E_SEZIONE, insert_mode()); - hide(E_CODPAG); hide(E_DESPAG); - + hide(E_CODPAG); hide(E_DESPAG); + set_handler(E_DATAREG, datareg_handler); + set_handler(E_DATADOC, datadoc_handler); + set_handler(E_NUMDOC, numdoc_handler); + set_handler(E_SEZIONE, sezione_handler); set_handler(E_TOTALE, TSaldaconto_app::totale_handler); if (app().gestione_valuta()) - { - disable(E_VALUTA); // Non posso cambiare codice valuta! + { + show(-3); set_handler(E_TOTDOCVAL, TSaldaconto_app::totval_handler); set_handler(E_VALUTA, TSaldaconto_app::valuta_handler); set_handler(E_DATACAMBIO, TSaldaconto_app::datacambio_handler); @@ -164,14 +178,38 @@ TPay_mask::TPay_mask(const TGame_mask& parent, int mod) #endif } +void TPay_mask::attiva_valuta(bool in_valuta) +{ + if (in_valuta) + { + set_handler(S_IMPORTOVAL, importo_handler); + set_handler(S_IMPORTO, importolire_handler); + } + else + set_handler(S_IMPORTO, importo_handler); + + enable(S_RITENUTE, !in_valuta); // dis/abilita ritenute + enable(S_IMPORTOVAL, in_valuta); + + if (in_valuta) + { + reset(S_RITENUTE); + } + else + { + reset(S_IMPORTOVAL_SCAD); + reset(S_IMPORTOVAL); + } +} + void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& residuo) { const TPartita& p = scad.partita(); const int nrigp = oldpag.get_int(PAGSCA_NRIGP); const TRiga_partite& sum = p.riga(nrigp); - const bool assigned = oldpag.get_int(PAGSCA_NRIGA) != TPartita::UNASSIGNED; - const TRiga_partite& fatt = assigned ? scad.riga() : sum; + _assigned = oldpag.get_int(PAGSCA_NRIGA) != TPartita::UNASSIGNED; + const TRiga_partite& fatt = _assigned ? scad.riga() : sum; TRelation rel(LF_PAGSCA); // Working relation rel.add(LF_PARTITE, "ANNO=ANNO|NUMPART=NUMPART"); @@ -192,12 +230,13 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, prompt << ' ' << k.sottoconto() << ' '; prompt << "Partita:" << p.anno() << ' ' << p.numero() << " Riga:" << oldpag.get_int(PAGSCA_NRIGA) - << " Rata:" << oldpag.get_int(PAGSCA_NRATA) - << " del "; - if (assigned) - prompt << scad.get_date(SCAD_DATASCAD).string(); + << " Rata:" << oldpag.get_int(PAGSCA_NRATA); + if (assigned()) + prompt << " del " << scad.get_date(SCAD_DATASCAD).string(); +#ifndef __EXTRA__ else - prompt << sum.get_date(PART_DATAPAG).string(); + prompt << " del " << sum.get_date(PART_DATAPAG).string(); +#endif group.set(prompt); set(S_NUMDOC, fatt.get(PART_NUMDOC)); // Numero documento @@ -215,7 +254,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const bool in_valuta = fatt.in_valuta(); const char sez_fat = fatt.sezione(); set(S_SEZIONE_SCAD, sez_fat == 'A' ? "A" : "D"); // Sezione della riga - if (assigned) + if (assigned()) { set(S_IMPORTO_SCAD, scad.get(SCAD_IMPORTO)); // Importo della rata if (in_valuta) @@ -234,15 +273,8 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, hide(S_RESIDUORATA); // Se non assegnato nascondi residuo rata _da_pagare = ZERO; } - - - if (in_valuta) - { - set_handler(S_IMPORTOVAL, importo_handler); - set_handler(S_IMPORTO, importolire_handler); - } - else - set_handler(S_IMPORTO, importo_handler); + + attiva_valuta(in_valuta); set_handler(S_SALDOACC, saldo_handler); real oldimp = oldpag.get_real(in_valuta ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO); @@ -252,9 +284,6 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, // Ricorda l'importo da pagare _da_pagare += oldimp; -// const long numreg = sum.get_long(PART_NREG); -// const int numrig = sum.get_int(PART_NUMRIG); - #ifndef __EXTRA__ _pagabile = _parent.residuo(in_valuta).valore(); @@ -267,7 +296,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, // Il flag di saldo/acconto e' attivo solo se non ci sono acconti, cioe': // pagamento non assegnato o con data documento antecedente quella della fattura - _can_solder = assigned; + _can_solder = _assigned; if (_can_solder) { const tipo_movimento tm = sum.tipo(); @@ -282,13 +311,15 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, // Mostra saldo solo se non e' ne' un acconto, ne' una nota di credito enable(S_SALDOACC, _can_solder); - show(-3, in_valuta); // Attiva campi relativi alla valuta #ifdef __EXTRA__ + enable(E_SEZIONE, oldpag.get_char(PAGSCA_ACCSAL) != 'S'); + // La valuta puo' essere cambiata solo su partite nuove const bool on = p.first() == p.last(); enable(E_VALUTA, on); #else + show(-3, in_valuta); // Attiva campi relativi alla valuta set_handler(S_GRUPPO, conto_handler); set_handler(S_CONTO, conto_handler); const bool mostra_conto = !sum.is_nota_credito(); @@ -299,8 +330,8 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, _datadoc = sum.get_date(PART_DATADOC); set_handler(S_DATAPAG, datapag_handler); - const bool mostra_ritenute = !(sum.is_nota_credito() || in_valuta); - show(S_RITENUTE, mostra_ritenute); // mostra/nasconde ritenute + const bool mostra_ritenute = !sum.is_nota_credito(); + show(S_RITENUTE, mostra_ritenute); } void TPay_mask::get_pag(TRectype& newpag, TRectype& sum) const @@ -356,12 +387,21 @@ bool TPay_mask::importo_handler(TMask_field& f, KEY k) TPay_mask& m = (TPay_mask&)f.mask(); if (k == K_F8) - { + { real imp; +#ifdef __EXTRA__ + const bool in_valuta = m.field(S_IMPORTOVAL).active(); + m._pagabile = m.get_real(in_valuta ? E_TOTDOCVAL : E_TOTALE); + if (m._assigned) + imp = fnc_min(m._da_pagare, m._pagabile); + else + imp = m._pagabile; +#else if (m.field(S_RESIDUORATA).shown() && m.field(S_RESIDUOPAG).shown()) imp = fnc_min(m._da_pagare, m._pagabile); else imp = m.field(S_RESIDUORATA).shown() ? m._da_pagare : m._pagabile; +#endif if (m.field(S_RITENUTE).active()) imp -= real(m.get(S_RITENUTE)); @@ -411,8 +451,15 @@ bool TPay_mask::importolire_handler(TMask_field& f, KEY k) TPay_mask& m = (TPay_mask&)f.mask(); if (k == K_F8) + { +#ifdef __EXTRA__ + if (m.unassigned()) + f.set(m.get(E_TOTALE)); + else +#endif m.send_key(k, S_IMPORTOVAL); - + } + if (f.to_check(k)) m.gioca_cambi(); return TRUE; @@ -432,6 +479,55 @@ bool TPay_mask::saldo_handler(TMask_field& f, KEY k) return TRUE; } +bool TPay_mask::numdoc_handler(TMask_field& f, KEY k) +{ + if (f.to_check(k)) + { + TPay_mask& m = (TPay_mask&)f.mask(); + if (!m._assigned) + m.set(S_NUMDOC, f.get()); + } + return TRUE; +} + +bool TPay_mask::datareg_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.focusdirty()) + { + TMask& m = f.mask(); + if (m.get(S_DATAPAG).empty()) + m.set(S_DATAPAG, f.get()); + } + return TRUE; +} + + +bool TPay_mask::datadoc_handler(TMask_field& f, KEY k) +{ + if (f.to_check(k)) + { + TPay_mask& m = (TPay_mask&)f.mask(); + m._datadoc = f.get(); + if (!m._assigned) + m.set(S_DATADOC, m._datadoc); + if (m.get(S_DATAPAG).empty()) + m.set(S_DATAPAG, m._datadoc); + } + return TRUE; +} + +bool TPay_mask::sezione_handler(TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + TPay_mask& m = (TPay_mask&)f.mask(); + if (!m._assigned) + m.set(S_SEZIONE_SCAD, f.get()); + } + return TRUE; +} + + bool TPay_mask::datapag_handler(TMask_field& f, KEY k) { if (f.to_check(k)) @@ -481,7 +577,7 @@ bool TNew_mask::tipomov_handler(TMask_field& f, KEY k) { TNew_mask& m = (TNew_mask&)f.mask(); if (!m._allow_fatt && f.get() == "1") - return f.error_box("Non e' possibile utilizzare una fattura per un pagamento"); + return f.error_box("Non e' possibile utilizzare una fattura come pagamento"); } return TRUE; @@ -1071,7 +1167,7 @@ char TGame_mask::calcola_sezione(tipo_movimento tm) const int TGame_mask::nuova_riga(TPartita& partita, tipo_movimento tm) const { - const int prima_riga = partita.first(); // Memorizza prima riga + const int una_riga = partita.last(); // Memorizza una riga valida TRiga_partite& part = partita.new_row(); // Creazione nuova riga vuota const int nriga = part.get_int(PART_NRIGA); // Nuova riga @@ -1086,9 +1182,9 @@ int TGame_mask::nuova_riga(TPartita& partita, tipo_movimento tm) const part.put(PART_TIPOMOV, (int)tm); - if (prima_riga > 0) + if (una_riga > 0) { - const char* valuta = partita.riga(prima_riga).get(PART_CODVAL); + const char* valuta = partita.riga(una_riga).get(PART_CODVAL); part.put(PART_CODVAL, valuta); } @@ -1097,8 +1193,6 @@ int TGame_mask::nuova_riga(TPartita& partita, tipo_movimento tm) const const char* s = oggi.string(); part.put(PART_DATADOC, s); part.put(PART_DATAREG, s); - if (tm != tm_fattura) - part.put(PART_DATAPAG, s); #else // Setta il cambio corrente const TValuta valuta(*this, P_VALUTA, P_DATACAMBIO, P_CAMBIO);