diff --git a/cg/cg1307.cpp b/cg/cg1307.cpp index 735a338d4..4492b4389 100755 --- a/cg/cg1307.cpp +++ b/cg/cg1307.cpp @@ -4,7 +4,10 @@ #include #include #include +#include +#include #include +#include #include "cgsaldac.h" @@ -15,18 +18,8 @@ #include #include -#ifndef FOR_EACH_FILE_RECORD - -#define FOR_EACH_FILE_RECORD(isamfile) \ -for (int _e##isamfile = isamfile.first(); \ - _e##isamfile == NOERR; \ - _e##isamfile = isamfile.next()) - -#endif - class TElimina_zoppi : public TSkeleton_application { -// TArray _files; TArray _decoders; protected: @@ -40,11 +33,11 @@ protected: static int kill_row(long numreg, char tipor, int numrig); static bool firm_handler(TMask_field& f, KEY k); - static bool select_handler(TMask_field& f, KEY k); public: const char* app_name() const {return TR("Righe prima nota errate");} const char* decode(int num, const char* key, const char* field); + const char* decode(int num, long key, const char* field); virtual void main_loop(); }; @@ -56,22 +49,14 @@ bool TElimina_zoppi::firm_handler(TMask_field& f, KEY k) if (k == K_F9) { TArray_sheet sheet(-1, -1, 70, 20, TR("Scelta ditta"), HR("Codice|Ragione Sociale@50")); - TToken_string row; - TLocalisamfile ditte(LF_NDITTE); - - FOR_EACH_FILE_RECORD(ditte) + TString_array& rows = sheet.rows_array(); + prefix().firms(rows); + FOR_EACH_ARRAY_ROW(rows, r, row) { - const long cod = ditte.get_long(NDT_CODDITTA); - if (prefix().exist(cod)) - { - row.cut(0); - row.add(cod); - row.add(ditte.get(NDT_RAGSOC)); - - const long pos = sheet.add(row); - if (cod == prefix().get_codditta()) - sheet.select(pos); - } + const long cod = row->get_long(0); + row->add(app().decode(LF_NDITTE, cod, NDT_RAGSOC)); + if (cod == prefix().get_codditta()) + sheet.select(r); } if (sheet.run() == K_ENTER) { @@ -86,7 +71,7 @@ bool TElimina_zoppi::firm_handler(TMask_field& f, KEY k) if (ok) prefix().set_codditta(cod); else - f.error_box(FR("La ditta %05ld non e' attivata per la contabilita'"), cod); + f.error_box(FR("La ditta %05ld non è attivata per la contabilità"), cod); } return ok; @@ -103,11 +88,19 @@ const char* TElimina_zoppi::decode(int num, const char* key, const char* field) return dec->decode(key); } +const char* TElimina_zoppi::decode(int num, long key, const char* field) +{ + TString8 k; k.format("%ld", key); + return decode(num, k, field); +} + bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr) { bool ok = true; TLocalisamfile mov(LF_MOV); - TLocalisamfile row(lf_rmov); + + TString8 query; query.format("USE %d", lf_rmov); + TISAM_recordset recset(query); TString msg; switch (lf_rmov) @@ -119,7 +112,7 @@ bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr) } msg << ": 0"; - TProgind pi(row.items(), msg, true, true); + TProgress_monitor pi(recset.items(), msg); TToken_string riga, descr; long reg, last_reg = 0, found = 0; @@ -129,9 +122,10 @@ bool TElimina_zoppi::test_row_file(int lf_rmov, TString_array& arr) int gruppo, conto; long sottoconto; - FOR_EACH_FILE_RECORD(row) + const TRectype& row = recset.cursor()->curr(); + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) { - if (!pi.addstatus(1)) + if (!pi.add_status(1)) { ok = false; break; @@ -242,8 +236,7 @@ bool TElimina_zoppi::test_riga_partita(const TRectype& pagsca) k.add(pagsca.get(PART_ANNO)); k.add(pagsca.get(PART_NUMPART)); k.add(nriga); - const TRectype& part = cache().get(LF_PARTITE, k); - const int tipomov = part.get_int(PART_TIPOMOV); + const int tipomov = atoi(app().decode(LF_PARTITE, k, PART_TIPOMOV)); ok = tipomov == 1; } @@ -253,7 +246,9 @@ bool TElimina_zoppi::test_riga_partita(const TRectype& pagsca) bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr) { bool ok = true; - TLocalisamfile pagsca(lf_pagsca); + + TString8 query; query.format("USE %d", lf_pagsca); + TISAM_recordset recset(query); long found = 0; TString msg; @@ -267,12 +262,13 @@ bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr) msg << ": 0"; msg.center_just(50); - TProgind pi(pagsca.items(), msg, true, true); + TProgress_monitor pi(recset.items(), msg); TToken_string riga, descr; - FOR_EACH_FILE_RECORD(pagsca) + const TRectype& pagsca = recset.cursor()->curr(); + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) { - if (!pi.addstatus(1)) + if (!pi.add_status()) { ok = false; break; @@ -287,11 +283,11 @@ bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr) case LF_PAGSCA: if (pagsca.get_int(PAGSCA_NRIGP) <= 0) to_kill = true; - if (!test_riga_partita(pagsca.curr())) + if (!test_riga_partita(pagsca)) to_kill = true; break; case LF_SCADENZE: - if (!test_riga_partita(pagsca.curr())) + if (!test_riga_partita(pagsca)) to_kill = true; break; default: @@ -306,7 +302,7 @@ bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr) msg << found; pi.set_text(msg); - riga.format(" |%6ld", pagsca.recno()); + riga.format(" |%6ld", recset.cursor()->file().recno()); if (lf_pagsca == LF_SCADENZE) riga.add("S"); else @@ -331,8 +327,10 @@ bool TElimina_zoppi::test_scrow_file(int lf_pagsca, TString_array& arr) bool TElimina_zoppi::test_head_file(TString_array& arr) { + TEsercizi_contabili esc; + bool ok = true; - TLocalisamfile mov(LF_MOV); + TISAM_recordset recset("USE MOV"); TLocalisamfile rmov(LF_RMOV); TLocalisamfile rmoviva(LF_RMOVIVA); @@ -340,31 +338,39 @@ bool TElimina_zoppi::test_head_file(TString_array& arr) msg << TR("Controllo testate di prima nota: 0"); msg.center_just(50); - TProgind pi(mov.items(), msg, true, true, 50); + TProgress_monitor pi(recset.items(), msg); TToken_string riga, descr; + const TRectype& mov = recset.cursor()->curr(); - FOR_EACH_FILE_RECORD(mov) + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) { - if (pi.iscancelled()) + if (!pi.add_status()) { ok = false; break; } - pi.addstatus(1); long reg = mov.get_long(MOV_NUMREG); - int rmov_err = NOERR; - int rmoviva_err = NOERR; - if (reg > 0) + + bool good = reg > 0; + if (good) { + //int rmoviva_err = NOERR; rmov.put(RMV_NUMREG, reg); rmov.put(RMV_NUMRIG, 1); - rmov_err = rmov.read(); - rmoviva.put(RMI_NUMREG, reg); + int rmov_err = rmov.read(); + /*rmoviva.put(RMI_NUMREG, reg); rmoviva.put(RMI_NUMRIG, 1); - rmoviva_err = rmoviva.read(); + int rmoviva_err = rmoviva.read();*/ + good = rmov_err == NOERR; + if (good) + { + const int annoes = mov.get_int(MOV_ANNOES); + good = annoes > 0 && esc.exist(annoes); + } } - if (reg == 0 || (rmov_err != NOERR && rmoviva_err != NOERR)) + + if (!good) { riga.format(" |%6ld|T", reg); riga.add(mov.get(MOV_ANNOES)); @@ -487,18 +493,32 @@ int TElimina_zoppi::kill_row(long numreg, char tipor, int numrig) rmov.put(RMV_NUMRIG, numrig); int err = rmov.read(); if (err == NOERR) + { err = rmov.remove(); + if (err == NOERR && lf == LF_MOV) + { + // Cancella anche le righe collegate alla testata + for (int r = 1; kill_row(numreg, 'C', r) == NOERR; r++); + for (int r = 1; kill_row(numreg, 'I', r) == NOERR; r++); + } + } return err; } -bool TElimina_zoppi::select_handler(TMask_field& f, KEY k) -{ - bool ok = true; - if (k == K_SPACE) - { - TArray_sheet sheet(-1, -1, 76, 20, app().app_name(), HR("@1|Codice@6|Riga@5|Anno@R|Importo@20R|Grp@R|Cnt@R|Sottoc@R|Descrizione@50")); +void TElimina_zoppi::main_loop() +{ + open_files(LF_CLIFO, LF_NDITTE, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA, LF_PARTITE, LF_SCADENZE, LF_PAGSCA, 0); + + TMask m(app_name(), 1, 30, 5); + m.add_number(DLG_USER, 0, TR("Codice ditta "), 1, 1, 5, "BUF").set_handler(firm_handler); + m.add_button(DLG_ELABORA, 0, "", -12, -1, 10, 2, "", BMP_ELABORA).set_exit_key(K_ENTER); + m.add_button(DLG_QUIT, 0, "", -22, -1, 10, 2); + + while (m.run() != K_QUIT) + { + TArray_sheet sheet(0, 0, 0, 0, app().app_name(), HR("@1|Codice@6|Riga@5|Anno@R|Importo@20R|Grp@R|Cnt@R|Sottoc@R|Descrizione@50")); TString_array& arr = sheet.rows_array(); - ok = test_row_file(LF_RMOV, arr); + bool ok = test_row_file(LF_RMOV, arr); if (ok) ok = test_row_file(LF_RMOVIVA, arr); if (ok) @@ -515,16 +535,15 @@ bool TElimina_zoppi::select_handler(TMask_field& f, KEY k) { const long total = sheet.checked(); if (total > 0 && - yesno_box(FR("Confermare l'eliminazione di %ld righe."), total)) + delete_box(FR("Confermare l'eliminazione di %ld righe."), total)) { - TProgind pi(total, TR("Eliminazione righe..."), true, true); + TProgress_monitor pi(total, TR("Eliminazione righe...")); FOR_EACH_ARRAY_ROW(arr, i, riga) { if (sheet.checked(i)) { - if (pi.iscancelled()) + if (!pi.add_status()) break; - pi.addstatus(1); TString16 str = riga->get(2); char tipor = str[0]; @@ -536,21 +555,6 @@ bool TElimina_zoppi::select_handler(TMask_field& f, KEY k) } } } - return ok; -} - -void TElimina_zoppi::main_loop() -{ - open_files(LF_CLIFO, LF_NDITTE, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA, LF_PARTITE, LF_SCADENZE, LF_PAGSCA, 0); - - TMask m(app_name(), 1, 30, 5); - m.add_number(DLG_USER, 0, TR("Codice ditta "), 1, 1, 5, "BUF"); - m.add_button(DLG_SELECT, 0, "", -12, -1, 10, 2); - m.add_button(DLG_QUIT, 0, "", -22, -1, 10, 2); - m.set_handler(DLG_USER, firm_handler); - m.set_handler(DLG_SELECT, select_handler); - - while (m.run() != K_QUIT); } void elimina_zoppi(int argc, char* argv[]) diff --git a/cg/cg1500.cpp b/cg/cg1500.cpp index 0b4a28dbc..b9e2f054e 100755 --- a/cg/cg1500.cpp +++ b/cg/cg1500.cpp @@ -2803,12 +2803,10 @@ void TStampa_bilanci::leggi_sort() void TStampa_bilanci::controlla_conto(int file1,int file2) { - char dep = '*'; - if (!file1) if (_cambiato_conto_1) { - set_row(_i,"@68g%c", dep); + set_row(_i,"@67g*"); _cambiato_conto_1 = FALSE; } else @@ -2827,7 +2825,7 @@ void TStampa_bilanci::controlla_conto(int file1,int file2) if (!file2) if (_cambiato_conto_2) { - set_row(_i,"@68g%c", dep); + set_row(_i,"@67g*"); _cambiato_conto_2 = FALSE; } else @@ -2878,8 +2876,8 @@ void TStampa_bilanci::set_page(int file, int counter) if (!counter) { - set_row(_i++,FR("@29gATTIVITA'@94gPASSIVITA'")); - set_row(_i++,"@29g---------@94g----------"); + set_row(_i++,FR("@29gATTIVITA'@98gPASSIVITA'")); + set_row(_i++,"@29g---------@98g----------"); set_row(_i++, dep); } @@ -2889,8 +2887,8 @@ void TStampa_bilanci::set_page(int file, int counter) if (!_salto_pagina) { printer().formfeed(); - set_row(_i++,FR("@29gCOSTI@94gRICAVI")); - set_row(_i++,"@29g-----@94g------"); + set_row(_i++,FR("@29gCOSTI@98gRICAVI")); + set_row(_i++,"@29g-----@98g------"); set_row(_i++, dep); _salto_pagina = TRUE; @@ -3446,91 +3444,69 @@ void TStampa_bilanci::stampa_totali_uno(const real& r1,const real& r2) void TStampa_bilanci::stampa_prima_colonna(int g, int c, long s, const char* desc, const real& saldo) { - char dep = '*'; - if (_codici) //sono stampate solo le descrizioni dei conti { if (!_totali) { if (c != 0 && s == 0) - set_row(_i, "%-.44s @44g @49g%r @68g%c", desc, &saldo, dep); + set_row(_i, "%-.44s @44g @48g%r", desc, &saldo); else - set_row(_i, "%-.48s @49g%r @68g%c", desc, &saldo, dep); + set_row(_i, "%-.48s @48g%r", desc, &saldo); } else if ( !(c == 0 && s == 0) ) //se cioe' non e' un gruppo { if (s == 0) //se e' un conto - set_row(_i, "%-.44s @44g @49g%r @68g%c", desc, &saldo, dep); + set_row(_i, "%-.44s @44g @48g%r", desc, &saldo); else - set_row(_i, "%-.48s @49g%r @68g%c", desc, &saldo, dep); + set_row(_i, "%-.48s @48g%r", desc, &saldo); } } else { if (_totali && c == 0 && s == 0l) return; - else if ( c == 0 && s == 0l ) + + set_row(_i, "@0g%3d", g); + if (c > 0) { - set_row(_i, "%3d ", g); - set_row(_i, "@15g%-.31s @49g%r @68g%c", desc, &saldo, dep); - } - else if (s == 0l) - { - set_row(_i, "%3d ", g); - set_row(_i, "%3d ", c); - set_row(_i, "@15g%-.31s @49g%r @68g%c", desc, &saldo, dep); - } - else - { - set_row(_i, "%3d ", g); - set_row(_i, "%3d ", c); - set_row(_i, "%6ld ", s); - set_row(_i, "@15g%-.31s @49g%r @68g%c", desc, &saldo, dep); + set_row(_i, "@4g%3d", c); + if (s > 0) + set_row(_i, "@8g%6ld", s); } + set_row(_i, "@15g%-.31s @48g%r", desc, &saldo); } + set_row(_i, "@67g*"); } // Guy: stampa la seconda colonna del bilancio di raffronto -void TStampa_bilanci::stampa_seconda_colonna(int g, int c, long s, - const char* desc, const real& saldo) +void TStampa_bilanci::stampa_seconda_colonna(int g, int c, long s, const char* desc, const real& saldo) { - char dep = '*'; - if (_codici) //sono stampate solo le descrizioni dei conti { if (!_totali) { - set_row(_i, "@68g%c@69g%-.47s @114g%r", dep, desc, &saldo); + set_row(_i, "@67g*@69g%-.47s @114g%r", desc, &saldo); } else + { if ( !(c == 0 && s == 0) ) - { - set_row(_i, "@68g%c @69g%-.47s @114g%r", dep, desc, &saldo); - } + set_row(_i, "@67g*@69g%-.47s @114g%r", desc, &saldo); + } } else { if (_totali && c == 0 && s == 0l) return; - else if ( c == 0 && s == 0l ) - { - set_row(_i, "@68g%c@69g%3d ", dep, g); - set_row(_i, "@84g%-.30s @114g%r", desc, &saldo); - } - else if (s == 0l) + + set_row(_i, "@67g*@69g%3d ", g); + if (c > 0) { - set_row(_i, "@68g%c@69g%3d ", dep, g); - set_row(_i, "%3d", c); - set_row(_i, "@84g%-.30s @114g%r", desc, &saldo); - } - else - { - set_row(_i, "@68g%c@69g%3d ", dep, g); - set_row(_i, "%3d ", c); - set_row(_i, "%6ld ",s); - set_row(_i, "@84g%-.30s @114g%r", desc, &saldo); + set_row(_i, "@73g%3d", c); + if (s > 0) + set_row(_i, "@77g%6ld", s); } + set_row(_i, "@84g%-.30s @114g%r", desc, &saldo); } } diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 7e28fd41d..3be8587fb 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -2424,12 +2424,12 @@ bool TPrimanota_application::protected_record(TRectype& mov) { if (mov.get_bool(MOV_STAMPATO)) { - ok = delete_box(FR("Il movimento %ld è già stato stampato sul libro giornale:\n" + ok = delete_box(FR("Il movimento %ld è già stato stampato sul libro giornale:\n" "si desidera eliminarlo ugualmente?"), numreg); } if (ok && mov.get_bool(MOV_REGST)) { - ok = delete_box(FR("Il movimento %ld è già stato stampato sul bollato:\n" + ok = delete_box(FR("Il movimento %ld è già stato stampato sul bollato:\n" "si desidera eliminarlo ugualmente?"), numreg); } if (ok && mov.get_bool(MOV_INVIATO)) diff --git a/cg/cg2100n.uml b/cg/cg2100n.uml index 2fe56c0e8..425191c8d 100755 --- a/cg/cg2100n.uml +++ b/cg/cg2100n.uml @@ -1,8 +1,8 @@ #include "cg2100p.h" -PAGE "Nuova partita" -1 -1 40 10 +PAGE "Nuova partita" -1 -1 42 10 -RADIOBUTTON P_NUOVO 1 23 +RADIOBUTTON P_NUOVO 1 25 BEGIN PROMPT 0 0 "@BTipo movimento" ITEM "1|Fattura" @@ -14,7 +14,7 @@ END NUMBER P_ANNO 4 BEGIN - PROMPT 24 0 "Anno " + PROMPT 26 0 "Anno " // FLAGS "A" CHECKTYPE REQUIRED WARNING "Inserire l'anno di riferimento partita" @@ -22,20 +22,20 @@ END STRING P_NUMERO 7 BEGIN - PROMPT 24 1 "Numero " + PROMPT 26 1 "Numero " FLAGS "U#" CHECKTYPE REQUIRED WARNING "Inserire il numero di riferimento partita" -END +END BUTTON DLG_CANCEL 10 2 BEGIN - PROMPT 26 2 "" + PROMPT -1 -3 "" END BUTTON DLG_OK 10 2 BEGIN - PROMPT 26 4 "" + PROMPT -1 -1 "" END ENDPAGE diff --git a/cg/cg2102.cpp b/cg/cg2102.cpp index 9f24086c0..3dccd2515 100755 --- a/cg/cg2102.cpp +++ b/cg/cg2102.cpp @@ -2476,16 +2476,13 @@ bool TPrimanota_application::numdoc_handler(TMask_field& f, KEY key) if (annodoc > 0 && fornitore > 0) { // SELECT NUMREG,DATAREG,DATADOC,NUMDOC FROM MOV - // WHERE TIPO='F' AND CODCF=F_FORNITORE AND + // WHERE TIPO='F' AND CODCF=F_FORNITORE AND REG<>'' AND // NUMDOC=F_NUMDOC AND DATAREG>=F_DATADOC AND NUMREG<>F_NUMREG TString filter; - filter << MOV_NUMDOC << "=\"" << f.get() << '"'; + filter << '(' << MOV_NUMDOC << "=\"" << f.get() << "\")&&(" << MOV_REG << "!=\"\")"; if (m.edit_mode()) - { - filter.insert("("); - filter << ")&&(" << MOV_NUMREG << "!=\"" << m.get(F_NUMREG) << "\")"; - } + filter << "&&(" << MOV_NUMREG << "!=\"" << m.get(F_NUMREG) << "\")"; TRelation rel(LF_MOV); TRectype& rec = rel.curr(); @@ -2505,7 +2502,7 @@ bool TPrimanota_application::numdoc_handler(TMask_field& f, KEY key) { const int ad = rec.get_date(MOV_DATADOC).year(); if (ad == annodoc) - return yesno_box("Il documento %d / %s e' gia' stato inserito con la registrazione %ld\nSi desidera continuare ugualmente?", + return yesno_box("Il documento %d / %s è già stato inserito con la registrazione %ld\nSi desidera continuare ugualmente?", annodoc, (const char*)f.get(), rec.get_long(MOV_NUMREG)); } } diff --git a/cg/cg2105.cpp b/cg/cg2105.cpp index c05b4ff35..db76e46bb 100755 --- a/cg/cg2105.cpp +++ b/cg/cg2105.cpp @@ -45,7 +45,7 @@ protected: static bool edit_scadenza_handler(TMask_field& f, KEY k); static bool nuovo_handler(TMask_field& f, KEY k); static bool cambio_handler(TMask_field& f, KEY k); - + void add_importo(TToken_string& s, const TImporto& i, const char* val = NULL, int pos = -1); void add_descrizione(TToken_string& s, const TRiga_partite& riga, int pos = -1); TImporto get_importo(TToken_string& s, int pos) const; @@ -85,6 +85,7 @@ public: TSheet_field& partite() const { return sfield(P_PARTITE); } TSheet_field& scadenze() const { return sfield(P_SCADENZE); } const TBill& conto() const { return _conto; } + TPartita* partita_corrente() const; const TImporto& residuo(bool val) const { return val ? _resval : _residuo; } bool changed() const { return _changed; } @@ -795,7 +796,6 @@ const TRiga_partite* TGame_mask::cerca_prima_riga() const return riga; } - void TGame_mask::aggiorna_valuta(const TValuta& val) { TPartite_array& pa = app().partite(); @@ -832,13 +832,25 @@ void TGame_mask::aggiorna_valuta(const TValuta& val) TToken_string& TGame_mask::add_colored_row(TSheet_field& sheet, char type) const { - int r = sheet.insert(-1, FALSE, FALSE); + int r = sheet.insert(-1, false, false); COLOR back, fore; app().type2colors(type, back, fore); sheet.set_back_and_fore_color(back, fore, r); return sheet.row(r); } +TPartita* TGame_mask::partita_corrente() const +{ + if (_riga_partite < 0) + return NULL; + TToken_string& row = partite().row(_riga_partite); + const int anno = row.get_int(0); // Anno partita + const TString16 num = row.get(); // Numero partita + const TBill& zio = conto(); + TPartita* game = app().partite().exist(zio, anno, num); + return game; +} + bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) { TGame_mask& gm = (TGame_mask&)partite.mask(); @@ -1189,19 +1201,49 @@ bool TGame_mask::partite_notify(TSheet_field& partite, int r, KEY k) if (k == K_INS) { gm.send_key(K_CTRL + 'N', 0, &partite); // Simula la pressione del tasto nuovo - return FALSE; // Rifiuta l'aggiunta di una riga + return false; // Rifiuta l'aggiunta di una riga } return true; } +static bool partita_bloccata(const TPartita& game) +{ + int rate = 0, bloccate = 0; + for (int i = game.last(); i > 0; i = game.pred(i)) + { + const TRiga_partite& riga = game.riga(i); + if (riga.tipo() == tm_fattura) + { + for (int r = riga.rate(); r > 0; r--) + { + rate++; + const TRiga_scadenze& rata = riga.rata(r); + if (rata.get_bool(SCAD_BLOCCATA)) + bloccate++; + } + } + } + return bloccate > 0 && bloccate == rate; +} + bool TGame_mask::scadenze_notify(TSheet_field& scadenze, int r, KEY k) { if (k == K_INS) { TGame_mask& gm = (TGame_mask&)scadenze.mask(); +#ifndef __EXTRA__ + const TCausale& causale = app().causale(); + const tipo_movimento tm = (tipo_movimento)causale.tipomov(); + if (tm == tm_pagamento) + { + const TPartita* game = gm.partita_corrente(); + if (game && partita_bloccata(*game)) + return error_box(TR("Le rate della partita risultano bloccate")); + } +#endif gm.send_key(K_CTRL + 'N', 0, &scadenze); // Simula la pressione del tasto nuovo - return FALSE; // Rifiuta l'aggiunta di una riga + return false; // Rifiuta l'aggiunta di una riga } return true; } @@ -1397,8 +1439,9 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k) { if (m.get_bool(114)) { - if (was == NULL) giochi.destroy(game); - return f.error_box(FR("La rata %d e' bloccata."), nrata); + if (was == NULL) + giochi.destroy(game); + return f.error_box(FR("La rata %d risulta bloccata."), nrata); } #ifndef __EXTRA__ @@ -1414,7 +1457,7 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k) } #endif - tipo_movimento tm; + tipo_movimento tm = tm_pagamento; #ifdef __EXTRA__ TMask* nm = new TNew_mask(gm.conto().tipo(), FALSE, FALSE); nm->set(P_ANNO, game.anno()); @@ -1427,7 +1470,7 @@ bool TGame_mask::edit_scadenza_handler(TMask_field& f, KEY k) { if (was == NULL) giochi.destroy(game); - return FALSE; + return false; } #else tm = (tipo_movimento)app().causale().tipomov(); @@ -1530,7 +1573,7 @@ bool TGame_mask::nuovo_handler(TMask_field& f, KEY k) else new_game->init(gm.conto().tipo(), allow_fatt, TRUE); - tipo_movimento tm; + tipo_movimento tm = tm_pagamento; #ifndef __EXTRA__ const TMask& cm = app().curr_mask(); @@ -1555,7 +1598,9 @@ bool TGame_mask::nuovo_handler(TMask_field& f, KEY k) { // Creazione nuova partita TPartita& game = app().partite().partita(gm.conto(), anno, numero); - + if (tm == tm_pagamento && partita_bloccata(game)) + return error_box(TR("Le rate di questa partita risultano bloccate")); + bool edit = FALSE; // N.B. Le fatture non possone essere editate in modo contabile if (tm != tm_fattura) @@ -1934,6 +1979,9 @@ void TGame_mask::fill_partite() bool TGame_mask::edit_pagamento(TPartita& p, int nriga, int nrata, int nrigp) const { + if (nrigp <= 0) + return false; + TRectype oldpag = p.pagamento(nriga, nrata, nrigp); TRiga_partite& somma = p.riga(nrigp); @@ -2176,24 +2224,28 @@ bool TPrimanota_application::edit_partite(const TMask& m, int riga) if (changed) { + TSheet_field& s = cgs(); + if (m.field(CG_DESCR).empty()) { TString descr; if (genera_riferimento(riga, descr)) { - TSheet_field& s = cgs(); - s.row(riga).add(descr, CG_DESCR-101); - TBill conto; conto.get(s.row(riga), 2, 0x3); + const int idx = s.cid2index(CG_DESCR); + TToken_string& sr = s.row(riga); + sr.add(descr, idx); + TBill conto; conto.get(sr, 2, 0x3); for (int r = riga+1; r < s.items(); r++) { - TBill contro; contro.get(s.row(r), 9, 0x3); + TToken_string& sr = s.row(r); + TBill contro; contro.get(sr, 9, 0x3); if (conto == contro) - s.row(r).add(descr, CG_DESCR-101); + sr.add(descr, idx); } } } - cgs().force_update(); // Aggiornamento righe contabili + s.force_update(); // Aggiornamento righe contabili calcola_saldo(); _sal_dirty = true; } diff --git a/cg/cg2107.cpp b/cg/cg2107.cpp index cf2bb666c..b95f088bb 100755 --- a/cg/cg2107.cpp +++ b/cg/cg2107.cpp @@ -310,7 +310,6 @@ static int sort_by_fields(TSheet_field& sheet, int r1, int r2, const short* cons return diff; } - static int sort_by_date(TSheet_field& sheet, int r1, int r2) { // Elenco dei campi da confrontare in ordine di priorita' @@ -1064,12 +1063,13 @@ void TEasySolder_mask::fill_sheet() if (_tipomov == tm_insoluto) { - s.set_column_header(S_IMPORTO, TR("Importo\nInsoluto")); - s.set_column_header(S_RESIDUO, TR("Importo\nPagato")); + s.set_column_header(S_IMPORTO, HR("Importo\nInsoluto")); + s.set_column_header(S_RESIDUO, HR("Importo\nPagato")); } else { - s.set_column_header(S_RESIDUO, TR("Residuo\nScadenza")); + s.set_column_header(S_IMPORTO, HR("Importo\nPagamento")); + s.set_column_header(S_RESIDUO, HR("Residuo\nScadenza")); } s.set_column_justify(S_PARTITA, TPartita::allineamento_richiesto(_conto.tipo()) == 'R'); diff --git a/cg/cg4100.cpp b/cg/cg4100.cpp index 94c7b3498..4f8990a97 100755 --- a/cg/cg4100.cpp +++ b/cg/cg4100.cpp @@ -159,7 +159,8 @@ bool CG4100_App::sort_sal() { if (gruppo <= 0 || conto <= 0 || sottoconto <= 0) { - warning_box(FR("Conto non valido alla riga %d nel movimento %ld"), rmov.get_int(RMV_NUMRIG), numreg); + warning_box(FR("Conto non valido alla riga %d nel movimento %ld"), + rmov.get_int(RMV_NUMRIG), numreg); continue; } sal.aggiorna(gruppo, conto, sottoconto, importo, sezione, true, scaricato); diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 39e6e51a9..9e5d0f726 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -2501,6 +2501,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) // Prorata per l'anno corrente + quelli eventuali dello scorso anno e quelli che sono oltre 3 anni fa... // E quelli che non hanno la % prorata settata in tabella real aaa = acquisti_iva; + aaa -= ammort_det_iva; // Scarta gli acquisti di beni ammortizzabili (4-9-2014) if (percentuale1 != INVALID_PRORATA && percentuale1 != INVALID_PRORATA_ASSERT) aaa -= rr1 ? *rr1 : ZERO; if (percentuale2 != INVALID_PRORATA && percentuale2 != INVALID_PRORATA_ASSERT) @@ -2533,7 +2534,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) * Il prorata pagato in annuale viene scritto a 0, perche' in realta' sarebbe * la somma di quelli pagati nei mesi precedenti. */ - _plm->put("R2", prorata); // Prorata complessivo (acq. rif. anno attuale + acq. rif. anni precedenti) + _plm->put("R2", prorata); // Prorata complessivo (acq. rif. anno attuale + acq. rif. anni precedenti) _plm->put("R14", prorata_precedente1); // Prorata acq. rif. anno addietro _plm->put("R15", prorata_precedente2); // Prorata acq. rif. 2 anni addietro @@ -3841,8 +3842,8 @@ void TLiquidazione_app::write_liq(int month, const char* codatts) conguaglio = topay - ppg; round_imposta(conguaglio); - _pla->put("R9", conguaglio); - _pla->put("R10",prorata); + _pla->put("R9", conguaglio); + _pla->put("R10", prorata); // Prorata delle mie brame... // Chi e' il piu' sfatto del reame? @@ -4282,8 +4283,7 @@ void TLiquidazione_app::recalc_annual(const char* att) { if (!look_plm(i,aaa)) continue; - - pro_pag += _plm->get_real("R2"); // Can't do anyway else... + pro_pag += _plm->get_real("R2"); // Can't do anyway else... } // Modifiche per PIM13 diff --git a/cg/cg5900.cpp b/cg/cg5900.cpp index bfc0d866b..4b7cea588 100644 --- a/cg/cg5900.cpp +++ b/cg/cg5900.cpp @@ -350,9 +350,11 @@ bool TProrata_msk::on_field_event(TOperable_field& o, TField_event e, long jolly case F_DATAINI: if (e == fe_init) { - const TDate oggi(TODAY); - o.set(TDate(1,1,oggi.year()-1)); - set(F_DATAFIN, TDate(31,12,oggi.year()-1), 0x3); + TDate d(TODAY); d.set_day(1); --d; + d.set_day(1); + o.set(d); + d.set_end_month(); + set(F_DATAFIN, d, 0x3); } break; case F_DATAFIN: diff --git a/cg/cgsalda3.cpp b/cg/cgsalda3.cpp index bf0f8bab0..98fddbf76 100755 --- a/cg/cgsalda3.cpp +++ b/cg/cgsalda3.cpp @@ -797,7 +797,14 @@ TImage* TSolder_tree::image(bool selected) const case 3: { const TRiga_scadenze* s = scadenza(); - id = s && s->chiusa() ? BMP_DIRDNSEL : BMP_DIRDN; + id = BMP_DIRDN; + if (s) + { + if (s->get_bool(SCAD_BLOCCATA)) + return get_res_icon(10203); // Icona di stop + if (s->chiusa()) + id = BMP_DIRDNSEL; + } } break; case 4: