diff --git a/src/cg/cg2102.cpp b/src/cg/cg2102.cpp index f6ccbc361..4cbce4f65 100755 --- a/src/cg/cg2102.cpp +++ b/src/cg/cg2102.cpp @@ -509,7 +509,7 @@ real TPrimanota_application::calcola_saldo() const if (pag) { const char tipo = row_type(*r); - if (strchr("ACGKP", tipo) != NULL) // Abbuoni attivi, differenze cambio, spese, ... + if (strchr("GK", tipo) != NULL) // Abbuoni attivi, differenze cambio, spese, ... // (A o P) Abbuoni e (C) Differenze cambio perchè c'erano ? non (T) totolae documento perchè pagamento saldaconto += importo; } } @@ -580,7 +580,10 @@ HIDDEN bool imptot_error(const TImporto& imptot, const TImporto& impsal, bool va msg << TR("\nSi desidera correggere il totale documento?"); ok = a.cgs().yesno_box(msg); if (ok) + { m.set(F_TOTALE, cassa.valore()); + a.calcola_saldo(); + } } return ok; } @@ -671,7 +674,8 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k) } } - if (errato) + + if (errato) { TString msg(128); const TCurrency euro(speso.valore()); @@ -699,7 +703,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k) return false; } } - if (strchr("ACGKPT", tipo) != NULL) + if (strchr("GKT", tipo) != NULL) // Abbuoni attivi, differenze cambio, spese, ... // (A o P) Abbuoni e (C) Differenze cambio perchè c'erano ? { saldaconto += importo; if (in_valuta) @@ -2497,13 +2501,20 @@ bool TPrimanota_application::datacomp_handler(TMask_field& f, KEY key) } const TDate chiusura = app()._esercizi[ae].chiusura(); - if (chiusura.ok() && dc <= chiusura) - { - f.error_box(FR("%s è antecedente al %s,\ndata di chiusura dell'esercizio %d"), - data, chiusura.stringa(), ae); - // Errore non bloccante - } - + if (chiusura.ok() && dc < chiusura) + { + f.error_box(FR("%s è antecedente al %s,\ndata di chiusura dell'esercizio %d"), + data, chiusura.stringa(), ae); + // Errore non bloccante + } + else + if (chiusura.ok() && dc == chiusura) + { + f.error_box(FR("%s è uguale al %s,\ndata di chiusura dell'esercizio %d"), + data, chiusura.stringa(), ae); + // Errore non bloccante + } + } else { @@ -3287,17 +3298,50 @@ bool TPrimanota_application::totdoc_handler(TMask_field& f, KEY key) if (a.is_pagamento()) a.calcola_saldo(); } - } - - if (key == K_ENTER) - { - const TCurrency totale(real(f.get())); - if (totale.get_num().is_zero()) + } + if (key == K_TAB && a.is_pagamento() && !a._as400) + { + m.show(K_RESIDUO, f.get().full()); + m.show(K_TOTALE, f.get().full()); + + } + + if (key == K_ENTER) + { + if (a.is_pagamento()&& ! a._as400) + { + TImporto importo, totdocsc,tot; + TSheet_field& cgrows = a.cgs(); + + FOR_EACH_SHEET_ROW_BACK(cgrows, i, r) + { + const char tipo = row_type(*r); + if (strchr("GK", tipo) != NULL) // Abbuoni attivi, differenze cambio, spese, ... // (A o P) Abbuoni e (C) Differenze cambio perchè c'erano ? non (T) totolae documento perchè pagamento + { + TImporto importo; + + importo = *r; + totdocsc += importo; + } + } + if (tot.valore().is_zero()) + { + totdocsc.normalize(a.causale().sezione_clifo()); + tot = totdocsc; + f.set(tot.valore().string()); + a.calcola_saldo(); + } + } + + TCurrency totale(real(f.get())); + + if (totale.get_num().is_zero()) ok = yesno_box(TR("Totale documento nullo: continuare ugualmente?")); if (ok) { const TValuta cambio(m, SK_VALUTA, SK_DATACAMBIO, SK_CAMBIO); + if (cambio.in_valuta()) { const real totval(m.get(SK_TOTDOCVAL)); diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index 22a230419..89be80413 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -34,6 +34,8 @@ #endif class TDati_mov_auto; +enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3}; + class TPrimanota_application : public TRelation_application { TMovimentoPN* _rel; // Relazione principale @@ -264,7 +266,6 @@ protected: void ivas_pack(); void cgs_pack(); bool ci_sono_importi(const TSheet_field& cgs) const; - real calcola_saldo() const; real calcola_imp() const; void add_cgs_tot(TMask& m); @@ -324,9 +325,12 @@ public: static bool iva_notify(TSheet_field& s, int r, KEY key); static bool cg_notify(TSheet_field& s, int r, KEY key); + TMask * mask(CGMaskType type) { return _msk[type]; } + void type2colors(char tipor, COLOR& back, COLOR& fore); void set_type_colors(char tipor, COLOR back, COLOR fore); void reset_colors(); + real calcola_saldo() const; TCausale& causale() const { return *_causale; } TPartite_array& partite() { return _partite; } // Partite editate diff --git a/src/cg/cg2105.cpp b/src/cg/cg2105.cpp index 33a91d9f1..0480c8148 100755 --- a/src/cg/cg2105.cpp +++ b/src/cg/cg2105.cpp @@ -256,8 +256,8 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, 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) set(S_IMPORTOVAL_SCAD, scad.get(SCAD_IMPORTOVAL)); // Importo in valuta @@ -309,6 +309,16 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, _pagabile += oldimp; #endif + if (_pagabile.is_zero()) + { + hide(S_RESIDUOPAG); + hide(S_RESIDUORATA); // Se non assegnato nascondi residuo rata + } + else + { + show(S_RESIDUOPAG); + show(S_RESIDUORATA); // Se non assegnato nascondi residuo rata + } // 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 @@ -333,7 +343,7 @@ void TPay_mask::set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, #else set_handler(S_GRUPPO, conto_handler); set_handler(S_CONTO, conto_handler); - const bool mostra_conto = !sum.is_nota_credito() && app().curr_mask().get_real(F_TOTALE) != ZERO; + const bool mostra_conto = !sum.is_nota_credito(); // && app().curr_mask().get_real(F_TOTALE) != ZERO; show(-2, mostra_conto); // mostra/nasconde conto contropartita if (!mostra_conto) reset(-2); @@ -1032,7 +1042,9 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) if (pag.get_char(PAGSCA_ACCSAL) == 'S') { const TImporto abb(sez, pag.get_real(PAGSCA_ABBUONI)); - if (!abb.is_zero()) + bool is_totdoc = app().mask(_no_iva)->get(F_TOTALE).full(); + + if (!abb.is_zero()) { const char tipo_abb = pag.get_char(PAGSCA_PASSATT); TToken_string& rabb = gm.add_colored_row(sheet, tipo_abb); @@ -1040,13 +1052,18 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) if (in_valuta) { TImporto abb_lit = abb; + prima_valuta.val2eur(abb_lit); - gm.add_importo(rabb, abb_lit); - gm.add_importo(rabb, abb, prima_valuta.codice()); + if (is_totdoc) + { + gm.add_importo(rabb, abb_lit); + gm.add_importo(rabb, abb, prima_valuta.codice()); + } } else { - gm.add_importo(rabb, abb); + if (is_totdoc) + gm.add_importo(rabb, abb); rabb.add(""); } rabb.add((int)sum.tipo(), 11); @@ -1060,7 +1077,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) { TToken_string& rdiff = gm.add_colored_row(sheet, 'C'); rdiff.add(TR("Differenza cambio"), 4); - gm.add_importo(rdiff, diff); + if (is_totdoc) + gm.add_importo(rdiff, diff); rdiff.add((int)sum.tipo(), 11); } } @@ -1152,6 +1170,8 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) if (pag.get_char(PAGSCA_ACCSAL) == 'S' || !pag.get_real(PAGSCA_ABBUONI).is_zero()) { const TImporto abb(sez, pag.get_real(PAGSCA_ABBUONI)); + bool is_totdoc = app().mask(_no_iva)->get(F_TOTALE).full(); + if (!abb.is_zero()) { const char tipo_abb = pag.get_char(PAGSCA_PASSATT); @@ -1161,34 +1181,23 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) { TImporto abb_lit = abb; prima_valuta.val2eur(abb_lit); - gm.add_importo(rabb, abb_lit); - gm.add_importo(rabb, abb, prima_valuta.codice()); - + if (is_totdoc) + { + gm.add_importo(rabb, abb_lit); + gm.add_importo(rabb, abb, prima_valuta.codice()); + } tot_lit += abb_lit; tot_val += abb; } else { - gm.add_importo(rabb, abb); + if (is_totdoc) + gm.add_importo(rabb, abb); rabb.add(""); tot_lit += abb; } rabb.add((int)sum.tipo(), 11); } -/* Continuo a ritenre impossibile ... per ora - // Le differenze cambio possono esistere solo in valuta - if (in_valuta) - { - const TImporto diff(sez, pag.get_real(PAGSCA_DIFFCAM)); - if (!diff.is_zero()) - { - TToken_string& rdiff = gm.add_colored_row(sheet, 'C'); - rdiff.add(TR("Differenza cambio"), 4); - gm.add_importo(rdiff, diff); - rdiff.add((int)sum.tipo(), 11); - } - } -*/ } // Il pagamento era a saldo } // Fine ciclo non assegnati