diff --git a/build/AgaLib.vcxproj b/build/AgaLib.vcxproj index 9c4891e8e..7ed602a3b 100644 --- a/build/AgaLib.vcxproj +++ b/build/AgaLib.vcxproj @@ -881,10 +881,6 @@ {9c91bacf-9a70-4973-b8cc-fa3d2af9867c} - - - - diff --git a/build/AgaLib.vcxproj.filters b/build/AgaLib.vcxproj.filters index bc007fcc3..958661ae8 100644 --- a/build/AgaLib.vcxproj.filters +++ b/build/AgaLib.vcxproj.filters @@ -14,9 +14,6 @@ {ad187331-43fa-476b-9ee2-7e0cab5cde0e} - - {3ac37126-3475-4122-be0b-b16a7b877069} - @@ -800,12 +797,4 @@ Libraries - - - Alx - - - Alx - - \ No newline at end of file diff --git a/build/PATCHDEF.EXE b/build/PATCHDEF.EXE index e0c1f8fef..b4cf135fd 100644 Binary files a/build/PATCHDEF.EXE and b/build/PATCHDEF.EXE differ diff --git a/build/ci1.vcxproj.filters b/build/ci1.vcxproj.filters index de1b415ac..9972592ae 100644 --- a/build/ci1.vcxproj.filters +++ b/build/ci1.vcxproj.filters @@ -158,21 +158,21 @@ Reports + + Reports + + + Reports + Reports Reports - - Reports - Reports - - Reports - Reports diff --git a/build/fastrip.exe b/build/fastrip.exe index bdf1e6ba5..0a766454c 100644 Binary files a/build/fastrip.exe and b/build/fastrip.exe differ diff --git a/cd/Setup.exe b/cd/Setup.exe index 19edbbe06..07d92d59f 100644 Binary files a/cd/Setup.exe and b/cd/Setup.exe differ diff --git a/src/ba/ba1100.cpp b/src/ba/ba1100.cpp index 88609c5bb..decb7c941 100755 --- a/src/ba/ba1100.cpp +++ b/src/ba/ba1100.cpp @@ -1,11 +1,11 @@ #ifdef WIN32 -#define _CRT_NONSTDC_NO_DEPRECATE 1 -#define _CRT_SECURE_NO_WARNINGS 1 -#include -#include + #define _CRT_NONSTDC_NO_DEPRECATE 1 + #define _CRT_SECURE_NO_WARNINGS 1 + #include + #include #else -#include -#include + #include + #include #endif #include @@ -13,9 +13,11 @@ #include "ba1100.h" #include "ba1103.h" +#include #include -#include +#include #include +#include #include #include @@ -33,16 +35,69 @@ #define Dir_file "dir.gen" #define Trc_file "trc.gen" +class TManutenzione_app : public TSkeleton_application +{ + TDir_sheet* _browse; + TArray _dirs; + TArray _recs; + TMask* _mask; + long _firm; + long _level; + long _history_firm; + TRec_sheet* _rec; + TLog_report* _log; + bool _print_log; + + bool _superprassi; + +protected: + virtual void main_loop(); + virtual bool create () ; + virtual bool destroy(); + void insert_riga(long, TToken_string&); + void edit_riga(long, TToken_string&); + void edit_riga(const TString&); + void delete_riga(long); + virtual bool extended_firm() const { return true; } + + bool set_converting(); + bool reset_converting(); + + bool try_to_recover(TSystemisamfile& f, int err); + void update(); + void update_dir(); + void convert_dir(); + virtual void print(); + virtual void do_print(TPrinter & p, TRec_sheet & r); + const char* dumpfilename(const FileDes& dep) const; + void load_des(); + void open_history(); + void put_history(const char* firm); + void close_history(); + void dump_trc(const char * dir, const bool des_too, const long modules); + void repair_file(int i); + void save_file(const char * file); + + void open_log(); + void write_log(const char* line, const int severity = 0); + void close_log(); + + bool moveable_file(int file) const; +public: + + TManutenzione_app(); +}; + HIDDEN bool browse_file_handler(TMask_field& f, KEY k) { if (k == K_F9) - { + { FILE_SPEC fs; memset(&fs, 0, sizeof(FILE_SPEC)); TFilename fname = f.get(); fname.ext("dbf"); xvt_fsys_convert_str_to_fspec(fname, &fs); xvt_fsys_get_default_dir(&fs.dir); if (xvt_dm_post_file_open(&fs, TR("Selezione file")) == FL_OK) - { + { TFilename n; xvt_fsys_convert_dir_to_str(&fs.dir, n.get_buffer(n.size()), n.size()); n.add(fs.name); @@ -50,7 +105,7 @@ HIDDEN bool browse_file_handler(TMask_field& f, KEY k) } f.set_focus(); } - + return true; } @@ -62,51 +117,51 @@ TManutenzione_app::TManutenzione_app() : _browse(NULL), _mask(NULL), _firm(0), _ strncpy_s(fd.SysName, "$dir.gen", sizeof(fd.SysName)); strncpy_s(fd.Des, "Directory", sizeof(fd.Des)); strncpy_s(fd.FCalc, "0", sizeof(fd.FCalc)); - strncpy_s(fd.GenPrompt, "", sizeof(fd.GenPrompt)); - fd.LenR = 160; + strncpy_s(fd.GenPrompt,"", sizeof(fd.GenPrompt)); + fd.LenR =160; fd.EOD = fd.EOX = 1L; fd.Flags = 0; - + #ifdef WIN32 - int handle = sopen(Dir_file, O_RDWR | O_BINARY | O_CREAT, SH_DENYNO, S_IREAD | S_IWRITE); + int handle = sopen(Dir_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE); #else - int handle = open(Dir_file, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); + int handle = open(Dir_file, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); #endif if (handle != -1) { - if (write(handle, &fd, sizeof(FileDes)) == -1) - fatal_box("Impossibile scrivere il file dir.gen per dati standard: errore %d", errno); + if (write( handle, &fd, sizeof(FileDes)) == -1) + fatal_box("Impossibile scrivere il file dir.gen per dati standard: errore %d",errno); close(handle); } - else - fatal_box("Impossibile creare il file dir.gen per dati standard: errore %d", errno); + else + fatal_box("Impossibile creare il file dir.gen per dati standard: errore %d",errno); } if (!fexist(Trc_file)) { TTrec r; RecDes& rd = r.rec(); #ifdef WIN32 - int handle = sopen(Trc_file, O_RDWR | O_BINARY | O_CREAT, SH_DENYNO, S_IREAD | S_IWRITE); + int handle = sopen(Trc_file, O_RDWR|O_BINARY|O_CREAT,SH_DENYNO,S_IREAD|S_IWRITE); #else - int handle = open(Trc_file, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); + int handle = open(Trc_file, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); #endif if (handle != -1) { - if (write(handle, (void*)&rd, sizeof(RecDes)) == -1) - fatal_box("Impossibile scrivere il file trc.gen per dati standard: errore %d", errno); + if (write( handle, (void*)&rd, sizeof(RecDes)) == -1) + fatal_box("Impossibile scrivere il file trc.gen per dati standard: errore %d",errno); close(handle); } - else - fatal_box("Impossibile creare il file trc.gen per dati standard: errore %d", errno); + else + fatal_box("Impossibile creare il file trc.gen per dati standard: errore %d",errno); } } void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) { - const char* table[] = { "", TR("Alfanumerico"), TR("Intero"), TR("Intero Lungo"), + const char* table[] = {"", TR("Alfanumerico"), TR("Intero"), TR("Intero Lungo"), TR("Reale"), TR("Data"), TR("Intero"), TR("Carattere"), - TR("Booleano"), TR("Intero Zerofilled"), TR("Intero Lungo Zerofilled"),TR("Memo") }; + TR("Booleano"), TR("Intero Zerofilled"), TR("Intero Lungo Zerofilled"),TR("Memo")}; TPrintrow row; TToken_string s; TParagraph_string d("", 25); @@ -125,7 +180,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) row.reset(); if (istab) - row.put(format(FR("Lista tabella %s "), (const char *)tab), 2); + row.put(format(FR("Lista tabella %s "), (const char *) tab), 2); else row.put(format(FR("Lista tracciato %s (%s)"), dir.des(), dir.name()), 2); row.put(TR("Pag. @#"), 69); @@ -144,10 +199,10 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) row.put(riga, 1); p.setheaderline(3, row); p.setheaderline(5, row); - + int i; - - for (i = 0; i < rec.fields(); i++) + + for (i = 0; i < rec.fields(); i ++) { row.reset(); s = rec.fielddef(i); @@ -173,7 +228,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) } p.print(row); wd = d.get(); - while (wd != NULL) + while(wd != NULL) { row.reset(); row.put(wd, 53); @@ -181,25 +236,25 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) wd = d.get(); } } - } - + } + row.reset(); p.print(row); - + row.put(HR("Espressione chiave"), 7); row.put(HR("Duplicabile"), 68); p.setheaderline(4, row); if (p.rows_left() < 5) p.formfeed(); - else + else { p.print(row); row.put(riga, 1); - p.print(row); - } - - for (i = 0; i < rec.keys(); i++) + p.print(row); + } + + for (i = 0; i < rec.keys(); i ++) { row.reset(); s = rec.keydef(i); @@ -237,7 +292,7 @@ void TManutenzione_app::print() } } } - + TString_array list; items = list_files("recdesc/d???.des", list); if (items > 0) @@ -256,17 +311,18 @@ void TManutenzione_app::print() } } } - else + else do_print(p, *_rec); p.close(); } bool TManutenzione_app::create() // initvar e arrmask { - TString sw(argc() > 2 ? argv(2) : ""); + _firm = get_firm(); + + TString sw(argc()>2 ? argv(2) : ""); // Posso fare le operazione avanzate solo se sono ammistratore // e NON mi trovo su di una installazione di tipo client - xvt_vobj_show(TASK_WIN); _superprassi = user() == ::dongle().administrator() && !::dongle().demo(); if (_superprassi) @@ -274,7 +330,7 @@ bool TManutenzione_app::create() // initvar e arrmask const int type = ini_get_int(CONFIG_INSTALL, "Main", "Type"); _superprassi = (type == 1) || (type == 2); } - + if (argc() > 2 && sw == "-C") { update(); @@ -300,15 +356,14 @@ bool TManutenzione_app::create() // initvar e arrmask modules = atol(argv(5)); prefix().set(""); load_des(); - dump_trc(dir, des_too, modules); + dump_trc(dir,des_too,modules); return false; } else if (!::dongle().demo() && !set_firm()) return false; - _firm = atol(prefix().name()); load_des(); - + _mask = new TMask("ba1100a"); _browse = new TDir_sheet(TR("Manutenzione file di sistema"), _superprassi); if (_superprassi) @@ -330,26 +385,8 @@ bool TManutenzione_app::destroy() return TApplication::destroy(); } -void TManutenzione_app::show_log() -{ - if (db_log()) - { - if (admin()) - { - TLog_mask m; - - m.run(); - } - else - message_box(TR("Il log delle transazioni è visualizzabile dall'amministratore")); - } - else - message_box(TR("Il log delle transazioni è disattivato")); -} - - -void TManutenzione_app::open_log() -{ +void TManutenzione_app::open_log() +{ _print_log = false; if (_log == NULL) { @@ -359,7 +396,7 @@ void TManutenzione_app::open_log() } void TManutenzione_app::write_log(const char* line, const int severity) -{ +{ if (_log != NULL) { _log->log(severity, line); @@ -380,30 +417,30 @@ void TManutenzione_app::close_log() } void TManutenzione_app::save_file(const char * file) -{ +{ TFilename n(file); const TFilename source_path(n.path()); TFilename dest_path(source_path); - + n.ext("*"); TString_array files_to_copy; - + list_files(n, files_to_copy); - dest_path << "sav"; - + dest_path << "sav"; + if (!dest_path.exist()) make_dir(dest_path); - + FOR_EACH_ARRAY_ROW_BACK(files_to_copy, row, fname) - { + { TFilename source_file(*fname); - TFilename dest_file(dest_path); dest_file << '/' << (const char *)source_file.name(); - fcopy((const char *)source_file, dest_file); + TFilename dest_file(dest_path); dest_file << '/' << (const char *) source_file.name(); + fcopy((const char *) source_file, dest_file); } } -void TManutenzione_app::insert_riga(long riga_sel, TToken_string& riga) +void TManutenzione_app::insert_riga (long riga_sel, TToken_string& riga) { const int logicnum = int(riga_sel) + 1; const int num_files = (int)_browse->items(); @@ -412,30 +449,30 @@ void TManutenzione_app::insert_riga(long riga_sel, TToken_string& riga) _mask->disable(DLG_RECORD); _mask->disable(DLG_LOAD); _mask->disable(DLG_DUMP); - _mask->show(F_TAB, (logicnum >= LF_TABGEN && logicnum <= LF_TAB) || (logicnum == LF_TABMOD)); + _mask->show(F_TAB, (logicnum >= LF_TABGEN && logicnum <= LF_TAB)||(logicnum == LF_TABMOD)); _mask->hide(FLD_EXTEND); _mask->hide(FLD_EOX); - _mask->set(FLD_NUM, riga.get(0)); - _mask->reset(F_TAB); + _mask->set (FLD_NUM, riga.get(0)); + _mask->reset (F_TAB); if (_mask->run() == K_ENTER) { /* shift di uno in avanti degli elementi del direttorio partendo dall'ultimo */ - for (int i = num_files; i >= logicnum; i--) + for (int i=num_files; i>=logicnum; i--) { - _browse->dir().get(i, _nolock, _nordir, _sysdirop); - _browse->dir().put(i + 1, _nordir, _sysdirop); - _browse->rec().get(i); - _browse->rec().put(i + 1); + _browse->dir().get (i, _nolock, _nordir, _sysdirop); + _browse->dir().put (i + 1, _nordir, _sysdirop); + _browse->rec().get (i); + _browse->rec().put (i + 1); } _browse->dir().set(_mask->get(FLD_NOME), _mask->get_long(FLD_EOD), - _mask->get_long(FLD_FLAG), _mask->get(FLD_DESC), - _mask->get(FLD_FORMULA)); + _mask->get_long(FLD_FLAG), _mask->get (FLD_DESC), + _mask->get (FLD_FORMULA)); _browse->dir().put(logicnum, _nordir, _sysdirop); _browse->rec().zero(); _browse->rec().put(logicnum); _browse->dir().get(LF_DIR); - _browse->dir().set_eod(_browse->dir().eod() + 1); + _browse->dir().set_eod(_browse->dir().eod()+1); _browse->set_items(_browse->dir().eod()); _browse->dir().put(LF_DIR); } @@ -443,32 +480,32 @@ void TManutenzione_app::insert_riga(long riga_sel, TToken_string& riga) void TManutenzione_app::open_history() { - FILE *fp = fopen(History_file, "r"); + FILE *fp = fopen(History_file,"r"); if (fp != NULL) { char line[16]; - fgets(line, 16, fp); + fgets(line,16,fp); int l = strlen(line); - line[l > 0 ? l - 1 : 0] = '\0'; - if (l == 0) + line[l > 0 ? l -1 : 0 ] = '\0'; + if (l==0) _history_firm = -1; else _history_firm = atol(line); } else { - fp = fopen(History_file, "w"); + fp = fopen(History_file,"w"); _history_firm = -1; } - fclose(fp); + fclose (fp); } void TManutenzione_app::put_history(const char* firm) { - FILE * fp = fopen(History_file, "w"); - fprintf(fp, "%s\n", firm); - fclose(fp); + FILE * fp = fopen(History_file,"w"); + fprintf(fp,"%s\n",firm); + fclose (fp); } void TManutenzione_app::close_history() @@ -481,7 +518,7 @@ void TManutenzione_app::dump_trc(const char * dir, const bool des_too, const lon { TDir d; d.get(LF_DIR); - const int items = (int)d.eod(); + const int items = (int) d.eod(); const long flags = d.flags(); // livello archivi TFilename fn(dir); fn << "/level.dir"; @@ -489,12 +526,12 @@ void TManutenzione_app::dump_trc(const char * dir, const bool des_too, const lon ofstream of(fn); of << flags << '\n'; } - + TString s(TR("Scarico dei tracciati standard in ")); s << dir; TProgind p(items ? items : 1, s, false, true); p.setstatus(1); - for (int i = 2; i <= items; i++) //Salta il primo (dir.gen) + for (int i=2;i<=items;i++) //Salta il primo (dir.gen) { p.addstatus(1); TTrec& rc = (TTrec&)_recs[i]; @@ -504,16 +541,16 @@ void TManutenzione_app::dump_trc(const char * dir, const bool des_too, const lon TFilename descfname; descfname.format("%s/d%d.des", DESCDIR, i); if (!fexist(descfname)) // crea la descrizione se non esiste - { - FILE * fd = fopen(descfname, "w"); + { + FILE * fd = fopen(descfname, "w"); if (fd != NULL) fclose(fd); } - TConfig conf_des(descfname, DESCPAR); - + TConfig conf_des(descfname,DESCPAR); + if (des_too) rc.set_des(&conf_des); fn = dir; - fn << "/f"; fn << i; + fn << "/f";fn << i; fn.ext("trr"); ofstream out(fn); out << rc; @@ -536,24 +573,24 @@ const char* TManutenzione_app::dumpfilename(const FileDes& dep) const return tmp; } -void TManutenzione_app::edit_riga(const TString& name) +void TManutenzione_app::edit_riga (const TString& name) { const TFilename n(name); TExternisamfile* f = new TExternisamfile(n); - - _mask->set(FLD_NUM, ""); - _mask->set(FLD_NOME, n); - _mask->set(FLD_EOD, f->items()); - _mask->set(FLD_EOX, f->items()); - _mask->set(F_LEN, f->curr().len()); - _mask->set(FLD_DESC, f->description()); - _mask->set(FLD_FORMULA, ""); - _mask->set(FLD_FLAG, ""); - _mask->reset(FLD_EXTEND); - _mask->reset(F_TAB); + + _mask->set (FLD_NUM, ""); + _mask->set (FLD_NOME, n); + _mask->set (FLD_EOD, f->items()); + _mask->set (FLD_EOX, f->items()); + _mask->set (F_LEN, f->curr().len()); + _mask->set (FLD_DESC, f->description()); + _mask->set (FLD_FORMULA, ""); + _mask->set (FLD_FLAG, ""); + _mask->reset (FLD_EXTEND); + _mask->reset (F_TAB); _mask->disable(-1); _mask->enable(DLG_RECORD, _superprassi); - + KEY tasto = _mask->run(); switch (tasto) { @@ -575,7 +612,7 @@ void TManutenzione_app::edit_riga(const TString& name) } } -void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) +void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) { const int logicnum = int(riga_sel) + 1; @@ -585,16 +622,16 @@ void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) _mask->enable(DLG_DUMP); _mask->show(F_TAB, logicnum >= LF_TABGEN && logicnum <= LF_TAB); - _mask->set(FLD_NUM, riga.get(0)); - _mask->set(FLD_NOME, riga.get()); - _mask->set(FLD_EOD, riga.get()); - _mask->set(FLD_EOX, riga.get()); - _mask->set(F_LEN, riga.get()); - _mask->set(FLD_DESC, riga.get()); - _mask->set(FLD_FORMULA, riga.get()); - _mask->set(FLD_FLAG, riga.get()); - _mask->reset(FLD_EXTEND); - _mask->reset(F_TAB); + _mask->set (FLD_NUM, riga.get(0)); + _mask->set (FLD_NOME, riga.get()); + _mask->set (FLD_EOD, riga.get()); + _mask->set (FLD_EOX, riga.get()); + _mask->set (F_LEN, riga.get()); + _mask->set (FLD_DESC, riga.get()); + _mask->set (FLD_FORMULA, riga.get()); + _mask->set (FLD_FLAG, riga.get()); + _mask->reset (FLD_EXTEND); + _mask->reset (F_TAB); const TRecnotype oldeox = _mask->get_long(FLD_EOX); const bool com = prefix().is_com() || !*prefix().name(); @@ -631,11 +668,11 @@ void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) case K_ENTER: { FileDes dep; - strncpy(dep.SysName, _mask->get(FLD_NOME), sizeof(dep.SysName)); - dep.EOD = atol(_mask->get(FLD_EOD)); - dep.Flags = atol(_mask->get(FLD_FLAG)); - strncpy(dep.Des, _mask->get(FLD_DESC), sizeof(dep.Des)); - strncpy(dep.FCalc, _mask->get(FLD_FORMULA), sizeof(dep.FCalc)); + strncpy (dep.SysName,_mask->get(FLD_NOME), sizeof(dep.SysName)); + dep.EOD = atol(_mask->get (FLD_EOD)); + dep.Flags = atol(_mask->get (FLD_FLAG)); + strncpy (dep.Des,_mask->get (FLD_DESC), sizeof(dep.Des)); + strncpy (dep.FCalc,_mask->get (FLD_FORMULA), sizeof(dep.FCalc)); const TRecnotype eox = _mask->get_bool(FLD_EXTEND) ? _mask->get_long(FLD_EOX) : oldeox; TDir& dir = _browse->dir(); @@ -652,7 +689,7 @@ void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) TFilename f_name(d.name()); f_name.ext("dbf"); - if (!f_name.exist()) + if (!f_name.exist()) f.build(); _browse->dir().get(logicnum, _nolock, _nordir, _sysdirop); @@ -661,7 +698,7 @@ void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) { f.packfile(true); f.packindex(true); - // le 4 righe seguenti servono per allineare i valori di EOD ed EOX dopo una compattazione forzata +// le 4 righe seguenti servono per allineare i valori di EOD ed EOX dopo una compattazione forzata dir.get(logicnum, _nolock, _nordir, _sysdirop); dir.set(dep.SysName, dep.EOD, dep.Flags, dep.Des, dep.FCalc); dir.set_eox(_browse->dir().eod()); @@ -695,8 +732,8 @@ void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) const int keyno = m.get_int(FLD_KEYNO); const TString4 tabella(_mask->get(F_TAB)); if (tabella.not_empty()) - { - TToken_string filter; + { + TToken_string filter; filter.add("COD"); filter.add(tabella); f.dump(nout, keyno, fs, fd, rs, true, withdel, filter); } @@ -733,19 +770,19 @@ void TManutenzione_app::edit_riga(long riga_sel, TToken_string& riga) } } -void TManutenzione_app::delete_riga(long riga_sel) +void TManutenzione_app::delete_riga (long riga_sel) { const int num_files = (int)_browse->items(); const int logicnum = int(riga_sel) + 1; - if (riga_sel == num_files - 1 && yesno_box(FR("Si conferma l'eliminazione del file %d"), logicnum)) + if (riga_sel == num_files-1 && yesno_box(FR("Si conferma l'eliminazione del file %d"), logicnum)) { /* shift di uno in avanti degli elementi del direttorio partendo dall'ultimo */ for (int i = logicnum + 1; i <= num_files; i++) { - _browse->dir().get(i, _nolock, _nordir, _sysdirop); - _browse->dir().put(i - 1, _nordir, _sysdirop); - _browse->rec().get(i); - _browse->rec().put(i - 1); + _browse->dir().get (i, _nolock, _nordir, _sysdirop); + _browse->dir().put (i - 1, _nordir, _sysdirop); + _browse->rec().get (i); + _browse->rec().put (i - 1); } _browse->dir().get(LF_DIR); @@ -753,7 +790,7 @@ void TManutenzione_app::delete_riga(long riga_sel) TTrec r; r.zero(); r.put(_browse->dir().eod()); - _browse->dir().set_eod(_browse->dir().eod() - 1); + _browse->dir().set_eod(_browse->dir().eod()-1); _browse->set_items(_browse->dir().eod()); _browse->dir().put(LF_DIR); _browse->force_update(); @@ -770,10 +807,10 @@ bool TManutenzione_app::try_to_recover(TSystemisamfile& f, int err) } void TManutenzione_app::repair_file(int i) -{ +{ TString s(_MAX_PATH + 50); // Messaggio di log - - TDir d(i); + + TDir d(i); const char* n = d.filename(); if (d.eod() == 0) @@ -792,13 +829,13 @@ void TManutenzione_app::repair_file(int i) d.get(i, _nolock, _nordir, _sysdirop); save_file(n); TExternisamfile ef(n); - + const RecDes& rd = ef.curr().rec_des(); - TTrec rec; rec.get(i); + TTrec rec; rec.get(i); const int oldreclen = rec.len(); rec.rec() = rd; - rec.put(i); - + rec.put(i); + const int reclen = rec.len(); d.set_len(reclen); d.put(i, _nordir, _sysdirop); @@ -827,29 +864,29 @@ void TManutenzione_app::update_dir() TDir d(LF_DIR); // equivale a d.get(LF_DIR, _nolock, _nordir, _sysdirop); const int last_curr_item = (int)d.eod(); //quale è il numero dell'ultimo file attualmente presente - + const int update_items = (last_new_item < last_curr_item) ? last_new_item : last_curr_item; safely_close_closeable_isamfiles(); // Serve a premettere la chiamata ad fsize() in sicurezza TString prompt(128); - if (is_com) + if (is_com) prompt << TR("Aggiornamento dati comuni"); else prompt << TR("Aggiornamento ditta") << ' ' << atol(pref); prompt << ".\n"; TProgind p(update_items ? update_items : 1, prompt, false, true); - + int i; for (i = LF_USER; i <= update_items; i++) { if (!p.setstatus(i)) break; - const TDir & ds = (const TDir &)_dirs[i]; + const TDir & ds = (const TDir &) _dirs[i]; const bool is_firm = ds.is_firm(); const bool to_create = (is_com ? ds.is_com() : ds.is_firm()); - + TFilename fd(ds.filename()); bool towrite = false; @@ -857,7 +894,7 @@ void TManutenzione_app::update_dir() const long flags = ds.flags(); d.get(i, _nolock, _nordir, _sysdirop); const bool old_is_firm = d.is_firm(); - + TFilename fs = d.filename(); //modifica 03/06/09 Se un file si chiama fnnn (es. f106) nel vecchio set di tracciati, mentre esiste con nome.. @@ -867,7 +904,7 @@ void TManutenzione_app::update_dir() const TString& fs_name = fs.name_only(); if (fs_name.starts_with("f") && real::is_natural(fs_name.mid(1))) fs.cut(0); - + if (!fs.exist()) { if (d.eox() > 0L) @@ -880,10 +917,10 @@ void TManutenzione_app::update_dir() else { if (is_com) - { + { if (old_is_firm && !moveable_file(i) && d.eod() == 0L) { - const char* n = d.filename(); + const char* n = d.filename(); save_file(n); TToken_string names; get_table_names(i, names, 0xF); @@ -904,7 +941,7 @@ void TManutenzione_app::update_dir() int err = b.is_valid(true); // Aggiunto err==-60 per errore conversione sui file 98,99,125 in Pharmatex e dintorni if ((err == _istrcerr || err == _ispatherr || err == -60) && (d.eod() == 0) && (size < 4096)) - { + { bool kill = true; //controllo solo all'aga if (is_power_station()) @@ -938,7 +975,7 @@ void TManutenzione_app::update_dir() } if (err != NOERR && flags < 10000L) { - if (!try_to_recover(b, err)) + if (!try_to_recover(b, err)) { msg.format(TR("Impossibile compattare il file %d - %s : errore n.ro %d"), i, (const char*)d.filename(), err); @@ -963,7 +1000,7 @@ void TManutenzione_app::update_dir() } } d.get(i, _nolock, _nordir, _sysdirop); - + bool cmn_file = false; bool valid_file = moveable_file(i); if (!is_com && valid_file && d.is_com()) @@ -974,7 +1011,7 @@ void TManutenzione_app::update_dir() // Serve per evitare che durante l'aggiornamento i file // PCON, CLIFO, CAUS ed RCAUS vengano spostati da COM alla // prima ditta - + if (to_create && !cmn_file) { d.set(ds.name(), d.eox(), 0L, ds.des(), d.expr()); @@ -988,10 +1025,10 @@ void TManutenzione_app::update_dir() if (!valid_file) d.set(ds.name(), d.eox(), d.eod(), ds.des(), d.expr()); else - strcpy((char *)d.des(), ds.des()); + strcpy((char *) d.des(), ds.des()); } } - if (is_com && valid_file && d.name()[0] == '$') + if (is_com && valid_file && d.name()[0] == '$') { TString name(d.name()); name[0] = '%'; @@ -1005,7 +1042,7 @@ void TManutenzione_app::update_dir() //se il numero totale di files nuovi è inferiore a quello dei files già presenti c'è qualcosa che probabilmente.. //..non va (aggiornamento da un cd vecchio ad esempio); comunque ha finito il suo lavoro qui, perchè quello che.. //..segue riguarda solo i files nuovi - if (last_curr_item >= last_new_item) + if (last_curr_item >= last_new_item) return; //aggiornatore degli EOX EOD ecc. dei files nuovi @@ -1032,7 +1069,7 @@ void TManutenzione_app::convert_dir() const TString pref(prefix().name()); const bool is_com = prefix().is_com(); const int last_new_item = _dirs.last(); - + TDir d(LF_DIR); const int last_curr_item = (int)d.eod(); @@ -1040,10 +1077,10 @@ void TManutenzione_app::convert_dir() TString s; s << TR("Aggiornamento archivi "); - if (is_com) + if (is_com) s << TR("comuni"); else - s << TR("ditta ") << atol(pref); + s << TR("ditta ") << atol (pref); s << ".\n"; TProgress_monitor p(update_items, s, is_power_station()); @@ -1053,7 +1090,7 @@ void TManutenzione_app::convert_dir() break; const TTrec& rs = (const TTrec&)_recs[i]; // Nuovo tracciato record - const TDir& ds = (const TDir&)_dirs[i]; + const TDir& ds = (const TDir&)_dirs[i]; const long flags = ds.flags(); if (ds.len() > 0) @@ -1067,11 +1104,11 @@ void TManutenzione_app::convert_dir() const int module = abs((int)ds.flags()); TSystemisamfile f(i); - int err = f.is_valid(true); + int err = f.is_valid(true); switch (err) { case -64: - case -60: + case -60: err = NOERR; // verif. break; default: @@ -1079,7 +1116,7 @@ void TManutenzione_app::convert_dir() } if (i > LF_USER && err != NOERR && ((is_com && d.is_com()) || (!is_com && d.is_firm()))) - { + { if (err == _istrcerr || err == _isbadtrc) { repair_file(i); @@ -1097,12 +1134,12 @@ void TManutenzione_app::convert_dir() } //if (i > 2 && err != NOERR &&... bool to_create = (is_com ? d.is_com() : d.is_firm()); - + // I files LF_PCON, LF_CAUS, LF_RCAUS, LF_CLIFO, LF_CFVEN, LF_INDSPED // vanno creati comunque nel direttorio COM, vuoti, (se non esistono gia'). if (is_com && !to_create && moveable_file(i)) to_create = true; - + if (to_create && has_module(module, CHK_DONGLE)) { const TDir df(i); @@ -1111,7 +1148,7 @@ void TManutenzione_app::convert_dir() //crea il nuovo file in base al tracciato record nuovo! if (!fname.exist() && ds.len() > 0 && rs.len() > 0) { - set_autoload_new_files(false); + set_autoload_new_files(false); f.build(rs); set_autoload_new_files(true); // Anche se il file non esisteva, prosegue, perche' possono esserci conversioni @@ -1146,7 +1183,7 @@ void TManutenzione_app::convert_dir() d.put(i, _nordir, _sysdirop); r.put(i); } //else di if(flags>=... - + } //if (ds.len() > 0... (la dimensione del tracciato e' > 0) else // altrimenti se la dimensione del tracciato e' zero... { @@ -1179,19 +1216,19 @@ void TManutenzione_app::load_des() int items = (int)d.eod(); long flags = d.flags(); const bool standard = pref.empty(); - + if (standard) // carica eventuali nuove descrizioni ed il nuovo livello archivi { // Cerca in RECDESC i files f[nnn].dir TString ws; TFilename fn; - TDir td, new_dir; + TDir td,new_dir; TTrec tr; - int ln = items, last_newln = items; + int ln = items,last_newln = items; tr.zero(); fn << DESCDIR << "/level.dir"; - + if (fexist(fn)) { ifstream infile(fn); @@ -1199,16 +1236,16 @@ void TManutenzione_app::load_des() infile >> fl; if (fl > flags) flags = fl; } - + // scandisce *.dir in RECDESC // eventuali "buchi" oltre al numero attuale di items vengono rimpiazzati // con tracciati vuoti. - fn.format("%s/f*.dir", DESCDIR); + fn.format("%s/f*.dir",DESCDIR); TString_array list; const int totfiles = list_files(fn, list); - + for (int n = 0; n < totfiles; n++) { fn = list.row(n); @@ -1221,48 +1258,48 @@ void TManutenzione_app::load_des() const bool is_new = ln > last_newln; // memorizza l'ultimo record scritto come nuovo if (is_new) // aggiunge i files che mancano { - for (int i = last_newln + 1; i < ln; i++) + for (int i = last_newln+1; i> r; - r.put(i); + r.put(i); d.set_len(r.len()); d.put(i, _nordir, _sysdirop); r.set_des(); + } } } - } _dirs.add(d, i); _recs.add(r, i); } @@ -1368,34 +1405,34 @@ void TManutenzione_app::update() open_history(); long firm = get_firm(); TString pref; - if (firm == 0) + if (firm == 0) pref = prefix().name(); prefix().set(""); load_des(); prefix().set_codditta(0L); // COM - + TString mxs; mxs = TR("Conversione dati comuni"); open_log(); - write_log(mxs); - write_log(""); + write_log(mxs); + write_log(""); TPointer_array ditte; // Evita di aprire LF_NDITTE const int nditte = prefix().firms(ditte); update_dir(); convert_dir(); - + for (int i = 0; i < nditte; i++) { const long codditta = ditte.get_long(i); if (codditta > _history_firm && prefix().exist(codditta) && set_firm(codditta)) { mxs.cut(0) << TR("Conversione Ditta ") << codditta; - write_log(""); - write_log(mxs); - write_log(""); + write_log(""); + write_log(mxs); + write_log(""); update_dir(); convert_dir(); } @@ -1403,14 +1440,14 @@ void TManutenzione_app::update() //chiude il log di conversione close_log(); - + if (firm > 0) set_firm(firm); else prefix().set(pref); load_des(); reset_converting(); close_history(); - + send_campo_xml(); // Spedisce situazione via ftp } @@ -1428,7 +1465,7 @@ void TManutenzione_app::main_loop() KEY key = _browse->run(); - if (key != K_ENTER && key != K_QUIT && key != K_ESC && + if (key != K_ENTER && key != K_QUIT && key != K_ESC && !_superprassi) { error_box(FR("Operazione non permessa all'utente %s"), (const char*)user()); @@ -1452,29 +1489,29 @@ void TManutenzione_app::main_loop() case K_F6: riga_selezionata = _browse->selected(); riga = _browse->row(); - insert_riga(riga_selezionata, riga); + insert_riga (riga_selezionata, riga); break; case K_ENTER: riga_selezionata = _browse->selected(); riga = _browse->row(); - edit_riga(riga_selezionata, riga); + edit_riga (riga_selezionata, riga); break; case K_DEL: riga_selezionata = _browse->selected(); delete_riga(riga_selezionata); break; case K_QUIT: - case K_ESC: - done = true; close_history(); + case K_ESC: + done = true; close_history(); + break; + case K_F7: + update(); break; - case K_F7: - update(); - break; case K_F8: _browse->add(); riga_selezionata = _browse->items() - 1; riga = _browse->row(riga_selezionata); - edit_riga(riga_selezionata, riga); + edit_riga (riga_selezionata, riga); break; case K_F5: // Other file { @@ -1492,8 +1529,9 @@ void TManutenzione_app::main_loop() } int ba1100(int argc, char** argv) -{ +{ TManutenzione_app a; a.run(argc, argv, TR("Gestione files")); return 0; -} \ No newline at end of file +} + diff --git a/src/ba/ba1100.h b/src/ba/ba1100.h index ffa804122..ff79ff996 100755 --- a/src/ba/ba1100.h +++ b/src/ba/ba1100.h @@ -1,10 +1,6 @@ #ifndef __BA1100_H #define __BA1100_H -#ifndef __APPLICAT_H -#include -#endif - #ifndef __CONFIG_H #include #endif @@ -21,14 +17,6 @@ class TMask_field; #endif -#ifndef __PRINTER_H -#include -#endif - -#ifndef __REPUTILS_H -#include -#endif - #include "ba1100a.h" /////////////////////////////////////////////////////////// @@ -37,129 +25,71 @@ class TMask_field; class TDir_sheet : public TSheet { - TTrec _rec; - TDir _dir; - FileDes _s_dir; - long _items; + TTrec _rec; + TDir _dir; + FileDes _s_dir; + long _items; -protected: - virtual long get_items() const { return _items; } - virtual void get_row(long n, TToken_string& r); +protected: + virtual long get_items() const { return _items; } + virtual void get_row(long n, TToken_string& r); public: - const TDir& dir() const { return _dir; } - TDir& dir() { return _dir; } - const TTrec& rec() const { return _rec; } - TTrec& rec() { return _rec; } - void set_items(long items) { _items = items; } - void add(); - void rebuild() { _items = _dir.items(); } + const TDir& dir() const { return _dir; } + TDir& dir() { return _dir; } + const TTrec& rec() const { return _rec; } + TTrec& rec(){ return _rec; } + void set_items(long items) { _items = items; } + void add(); + void rebuild() { _items = _dir.items();} - TDir_sheet(const char* title, bool superprassi); + TDir_sheet(const char* title, bool superprassi); }; class TRec_sheet : public TObject { - TTrec _rec; - TTrec _rec_old; - TDir _dir; - bool _comfile; - TConfig *_descr; - static TMask *_mask; - TFilename _descfname; - TString16 _tab; - bool _external; + TTrec _rec; + TTrec _rec_old; + TDir _dir; + bool _comfile; + TConfig *_descr; + static TMask *_mask; + TFilename _descfname; + TString16 _tab; + bool _external; protected: - bool check_key_expr(int key, const char* key_expr); - static bool key_notify(TSheet_field& s, int r, KEY k); - static bool fld_notify(TSheet_field& s, int r, KEY k); - void save(); - void save_desc(); - - virtual long get_items() const { return _rec.fields(); } + bool check_key_expr(int key, const char* key_expr); + static bool key_notify(TSheet_field& s, int r, KEY k); + static bool fld_notify(TSheet_field& s, int r, KEY k); + void save(); + void save_desc(); + + virtual long get_items() const { return _rec.fields(); } public: - const TDir& dir() const { return _dir; } - const TTrec& rec() const { return _rec; } - const char* descfname() const { return _descfname; } - const char* tab() const { return _tab; } - void edit(); + const TDir& dir() const { return _dir; } + const TTrec& rec() const { return _rec; } + const char* descfname() const { return _descfname;} + const char* tab() const { return _tab; } + void edit(); - TRec_sheet(int logicnum, const char* tab); - TRec_sheet(TExternisamfile* file); - virtual ~TRec_sheet(); + TRec_sheet(int logicnum, const char* tab); + TRec_sheet(TExternisamfile* file); + virtual ~TRec_sheet(); }; class TEdit_file : public TObject { protected: - void edit_record(TRectype& rec); - bool browse_cursor(TCursor& cur, const TFilename& name); + void edit_record(TRectype& rec); + bool browse_cursor(TCursor& cur, const TFilename& name); public: - bool browse_file(int logicnum, const TFilename& name, const TString& tab, const int selKey = 1); - bool browse_file(TExternisamfile* file, const TFilename& name); - TEdit_file() {} - virtual ~TEdit_file() {} + bool browse_file(int logicnum, const TFilename& name, const TString& tab, const int selKey = 1); + bool browse_file(TExternisamfile* file, const TFilename& name); + TEdit_file() {} + virtual ~TEdit_file() {} }; -class TManutenzione_app : public TSkeleton_application -{ - TDir_sheet* _browse; - TArray _dirs; - TArray _recs; - TMask* _mask; - long _firm; - long _level; - long _history_firm; - TRec_sheet* _rec; - TLog_report* _log; - bool _print_log; - - bool _superprassi; - -protected: - virtual void main_loop(); - virtual bool create(); - virtual bool destroy(); - void insert_riga(long, TToken_string&); - void edit_riga(long, TToken_string&); - void edit_riga(const TString&); - void delete_riga(long); - virtual bool extended_firm() const { return true; } - - bool set_converting(); - bool reset_converting(); - - bool try_to_recover(TSystemisamfile& f, int err); - void update(); - void update_dir(); - void convert_dir(); - virtual void print(); - virtual void do_print(TPrinter & p, TRec_sheet & r); - const char* dumpfilename(const FileDes& dep) const; - void load_des(); - void open_history(); - void put_history(const char* firm); - void close_history(); - void dump_trc(const char * dir, const bool des_too, const long modules); - void repair_file(int i); - void save_file(const char * file); - - virtual void show_log(); - - void open_log(); - void write_log(const char* line, const int severity = 0); - void close_log(); - - bool moveable_file(int file) const; -public: - long get_firm() const { return _firm; } - - TManutenzione_app(); -}; - -inline TManutenzione_app & app() { return (TManutenzione_app &)main_app(); } - #endif diff --git a/src/ba/ba1101.cpp b/src/ba/ba1101.cpp index d70b78334..f413898ce 100755 --- a/src/ba/ba1101.cpp +++ b/src/ba/ba1101.cpp @@ -275,17 +275,9 @@ void TRec_sheet::edit() } f2.set_notify(key_notify); f2.set_append(FALSE); - - int nkeys = _rec.keys(); - - for (i = 0; i < nkeys; i++) - f2.row(i) = _rec.keydef(i); - f2.disable_cell(0, 1); - - const bool enable_save = (_dir.is_com() && app().get_firm() == 0) || - (_dir.is_firm() && app().get_firm() > 0); - - _mask->enable(DLG_SAVEREC, enable_save); + int nkeys = _rec.keys(); + for (i = 0; i < nkeys; i++) f2.row(i) = _rec.keydef(i); + f2.disable_cell(0, 1); while (true) { f1.force_update(0); // Non togliere, serve per fare l'update della descrizione quando si fa l'import!! diff --git a/src/ba/ba1600.cpp b/src/ba/ba1600.cpp index 2d29027f8..eefaf7f45 100755 --- a/src/ba/ba1600.cpp +++ b/src/ba/ba1600.cpp @@ -859,6 +859,7 @@ bool TMod_composition_msk::obs_handler(TMask_field& f, KEY k) return true; } + bool TMod_composition_msk::deselect_handler(TMask_field& f, KEY k) { if (k == K_SPACE) @@ -1444,10 +1445,8 @@ bool TCreadischi_mask::creazip_handler(TMask_field& f, KEY k) const TString& module = m.get(S_MODULE); const bool agg = f.dlg() == S_CREATEPATCH; TCreadischi_mask& fm = (TCreadischi_mask&)m.get_sheet()->mask(); - const int patch = m.get_int(S_PATCHLEVEL); - const TDate data = m.get_int(S_DATE); - if (fm.zip_module(module, agg, patch)) + if (fm.zip_module(module, agg, m.get_int(S_PATCHLEVEL))) { #ifdef __FCONV__ // creazione XXfconv.ini (esporta le info di conversione ) @@ -1459,42 +1458,6 @@ bool TCreadischi_mask::creazip_handler(TMask_field& f, KEY k) TFconv_ini fconv; fconv.export_module(module, fconv_path); #endif - TString_array updated_modules ; // ?? - const int mod_items = updated_modules.items(); - TArray_sheet& main_sheet = (TArray_sheet&)f.mask(); - const int items = main_sheet.items(); - bool some_updated = false; - - TFilename sommario; //e' il file .ini con l'elenco dei files (XX@@@@a.ini) - - sommario.tempdir(); - sommario.add(format("%s%04da.ini", (const char *) module, patch)); - sommario.ext("ini"); - - TConfig ini(sommario); - - ini.list_paragraphs(updated_modules); - for (int m = 0; m < items; m++) - { - const TToken_string mod_dep(main_sheet.row(m).get(5), ','); - - FOR_EACH_ARRAY_ROW(updated_modules, submod, um) - { - FOR_EACH_STR_TOKEN(mod_dep, dep) - { - if (dep == submod) - { - main_sheet.row(m).add(patch, 3); - main_sheet.row(m).add(data, 4); - fm.zip_module(main_sheet.row(m).get(1), agg, patch); - some_updated = true; - break; - } - } - } - } - if (some_updated) - main_sheet.force_update(); } } return true; diff --git a/src/ba/ba2900.cpp b/src/ba/ba2900.cpp index ab54b52bc..faffa4b7b 100644 --- a/src/ba/ba2900.cpp +++ b/src/ba/ba2900.cpp @@ -136,7 +136,7 @@ protected: bool dir_gen() const; bool trc_gen() const; bool export_manager(const TString generalErrors) const; - bool show_export_log(); + bool show_log(); void log(int severity, const char* msg); public: @@ -980,7 +980,7 @@ bool TMSSQLExport_app::export_manager(TString generalErrors) const return true; } -bool TMSSQLExport_app::show_export_log() +bool TMSSQLExport_app::show_log() { if (_log) { @@ -1089,7 +1089,7 @@ void TMSSQLExport_app::main_loop() } message_box("Migrazione effettuata correttamente!"); } while (loop); - show_export_log(); + show_log(); } else message_box("Fallita connessione"); diff --git a/src/ba/ba3400.cpp b/src/ba/ba3400.cpp index 62cccd6b1..14a4dd375 100755 --- a/src/ba/ba3400.cpp +++ b/src/ba/ba3400.cpp @@ -52,24 +52,26 @@ bool TTestrel_application::user_destroy() // Testmask /////////////////////////////////////////////////////////// -class TTest_application : public TSkeleton_application +class TTest_application : public TApplication { const char* _maskname; protected: - void main_loop(); + bool create() { return menu(0); } + bool destroy() { return TRUE; } + bool menu(MENU_TAG); public: TTest_application(const char* name) : _maskname(name) {} }; -void TTest_application::main_loop() +bool TTest_application::menu(MENU_TAG) { if (*_maskname) { TMask m(_maskname); - - while (m.run() == K_ENTER); + KEY k = m.run(); + if (k == K_QUIT) stop_run(); } else { @@ -81,6 +83,8 @@ void TTest_application::main_loop() m.run(); } } + + return FALSE; } /////////////////////////////////////////////////////////// diff --git a/src/ba/ba3400a.uml b/src/ba/ba3400a.uml index 7ef31e31b..b056d73fb 100755 --- a/src/ba/ba3400a.uml +++ b/src/ba/ba3400a.uml @@ -4,7 +4,7 @@ PAGE "Richiesta" -1 -1 76 12 STRING F_NOME 50 BEGIN - PROMPT 3 3 "Maschera " + PROMPT 3 3 "Nome maschera" END BUTTON DLG_OK 10 2 diff --git a/src/ba/ba7100.cpp b/src/ba/ba7100.cpp index ffd601aa6..a166a511e 100755 --- a/src/ba/ba7100.cpp +++ b/src/ba/ba7100.cpp @@ -1742,7 +1742,6 @@ class TMailer : public TSkeleton_application bool _start_full_screen; protected: - virtual bool task_win_iconized() const { return !_start_full_screen && xvt_win_is_taskbar_visible(); } virtual bool create(); virtual void main_loop(); }; @@ -1768,7 +1767,7 @@ void TMailer::main_loop() WINDOW tray = xvt_trayicon_create(TASK_WIN, 9013, appname); // CampoServer.ico open_files(LF_USER, 0); -/* if (!_start_full_screen && xvt_win_is_taskbar_visible()) + if (!_start_full_screen && xvt_win_is_taskbar_visible()) { if (tray != NULL_WIN) { @@ -1779,7 +1778,7 @@ void TMailer::main_loop() if (xvt_rect_get_width(&rct_postman) >= xvt_rect_get_width(&rct_screen) - 64) xvt_vobj_set_visible(TASK_WIN, FALSE); } - } */ + } TMailer_mask mm; diff --git a/src/ba/ba8300.cpp b/src/ba/ba8300.cpp index 2f8ffe6bd..39f52ec14 100755 --- a/src/ba/ba8300.cpp +++ b/src/ba/ba8300.cpp @@ -567,13 +567,6 @@ bool TReport_mask::save_report() if (ok) _is_dirty = false; } - if (is_power_station()) - { - DIRECTORY dir; - - xvt_fsys_get_default_dir(&dir); - xvt_fsys_set_dir(&dir); - } return ok; } diff --git a/src/ba/batbiva.uml b/src/ba/batbiva.uml index 1b74f4c28..ddaacf0b2 100755 --- a/src/ba/batbiva.uml +++ b/src/ba/batbiva.uml @@ -46,7 +46,7 @@ BEGIN WARNING "Manca la descrizione" END -LIST LST_TABIVA_S1 2 28 +LIST LST_TABIVA_S1 2 20 BEGIN PROMPT 2 2 "Tipo " FIELD S1 @@ -70,15 +70,11 @@ BEGIN MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0 MESSAGE ENABLE,FLD_TABIVA_I3|ENABLE,FLD_TABIVA_I4|SHOW,CHK_TABIVA_B5 MESSAGE ENABLE,FLD_TABIVA_S6 - ITEM "RC|Reverse Charge (vendite)" - MESSAGE CLEAR,FLD_TABIVA_R0|CLEAR,FLD_TABIVA_I0 - MESSAGE CLEAR,FLD_TABIVA_I3|CLEAR,FLD_TABIVA_I4|HIDE,CHK_TABIVA_B5 - MESSAGE ENABLE,FLD_TABIVA_S6 - END +END STRING FLD_TABIVA_S6 4 BEGIN - PROMPT 44 2 "C.IVA a cui ventilare " + PROMPT 39 2 "C.IVA a cui ventilare " FLAGS "U" FIELD S6 COPY USE FLD_TABIVA_CODTAB @@ -150,7 +146,7 @@ END BOOLEAN CHK_TABIVA_B5 BEGIN - PROMPT 30 5 "Escluso dal calcolo dei bolli su fatture esenti" + PROMPT 30 5 "Escluso dal calcolo dei bolli sufatture esenti" FIELD B5 END @@ -192,8 +188,6 @@ BEGIN INPUT FLD_TABIVA_I3 OUTPUT FLD_TABIVA_I3 ITEM " |Nessuno" - ITEM "14|Passaggi interni" - ITEM "16|Cessioni beni ammortizzabili" ITEM "20|Operazioni non imponibili (comma 1, artt.8, 8bis e 9)" ITEM "21|Operazioni non imponibili a seguito di dich. d'intento" ITEM "22|Altre operazioni non imponibili" @@ -207,7 +201,6 @@ BEGIN ITEM "36|Cessione di microprocessori" ITEM "37|Prestazioni comparto edile e settori connessi" ITEM "38|Operazioni settore energetico" - ITEM "39|Reverse charge altri casi" ITEM "B1|Ammontare op. es. escluse da nr. 1 a 9 e 11 art. 10" ITEM "B2|Ammontare op. es. di cui al nr. 11 art. 10" ITEM "B3|Ammontare op. es. di cui ai nr. 1 a 9 art. 10" diff --git a/src/cb/source/f4temp.c b/src/cb/source/f4temp.c index 17c23b9f0..877274791 100755 --- a/src/cb/source/f4temp.c +++ b/src/cb/source/f4temp.c @@ -249,7 +249,7 @@ int file4tempLow( FILE4 *file, CODE4 *c4, const int autoRemove ) time( &t ) ; t %= 10000L ; - c4ltoa45( (long)t, fileName + 4, -4 ) ; + c4ltoa45( t, fileName + 4, -4 ) ; u4nameMake( name, sizeof( name ), drive, env + strlen( drive ), fileName ) ; rc = file4create( file, c4, name, 1 ) ; diff --git a/src/cb/source/i4add.c b/src/cb/source/i4add.c index d8a054076..7bae57cc3 100755 --- a/src/cb/source/i4add.c +++ b/src/cb/source/i4add.c @@ -674,7 +674,7 @@ static int i4addOneTag( INDEX4 *i4, const TAG4INFO *tagData ) break ; } - tagFile->header.exprLen = (short) strlen( tagFile->expr->source ) + 1 ; + tagFile->header.exprLen = strlen( tagFile->expr->source ) + 1 ; if ( tagData[0].filter != 0 ) if ( *( tagData[0].filter ) != '\0' ) { @@ -688,7 +688,7 @@ static int i4addOneTag( INDEX4 *i4, const TAG4INFO *tagData ) rc = error4code( c4 ) ; break ; } - tagFile->header.filterLen = (short)strlen( tagFile->filter->source ) ; + tagFile->header.filterLen = strlen( tagFile->filter->source ) ; } tagFile->header.filterLen++ ; /* minimum of 1, for the '\0' */ diff --git a/src/ce/ce1300.cpp b/src/ce/ce1300.cpp index 43bd53d71..6013eb60f 100755 --- a/src/ce/ce1300.cpp +++ b/src/ce/ce1300.cpp @@ -230,9 +230,9 @@ bool TSelam_qmask::on_field_event(TOperable_field& o, TField_event e, long jolly const TRectype & ammce = cache().get(LF_AMMCE, key); if (!ammce.empty()) { - if (ammce.get_bool(AMMCE_FZPER)) + if (ammce.get_bool(AMMCE_FZPER) == TRUE) return error_box(TR("Sul cespite sono state forzate le Percentuali:\nprocedere dalla forzatura ammortamenti su cespite")); - if (ammce.get_bool(AMMCE_FZQUO)) + if (ammce.get_bool(AMMCE_FZQUO) == TRUE) return error_box(TR("Sul cespite sono state forzate le Quote:\nprocedere dalla forzatura ammortamenti su cespite")); } diff --git a/src/ce/ce2100.cpp b/src/ce/ce2100.cpp index 0f628d881..8e92d11f9 100755 --- a/src/ce/ce2100.cpp +++ b/src/ce/ce2100.cpp @@ -120,7 +120,6 @@ bool TCalcamm::calcola_ammortamenti() break; TCespite cespite(cur.curr()); - for (int tipo_sit = 1; tipo_sit <= 3; tipo_sit++) cespite.calc_amm(tipo_sit, data_limite, true); } diff --git a/src/cg/cg2100.cpp b/src/cg/cg2100.cpp index 6533921d3..1013a4605 100755 --- a/src/cg/cg2100.cpp +++ b/src/cg/cg2100.cpp @@ -50,8 +50,6 @@ public: TString4 _causale_originale; TipoIVA _iva_originale; TString_array _iva; - TString _idsdi; - TDate _datasdi; }; /////////////////////////////////////////////////////////// @@ -61,7 +59,7 @@ public: TPrimanota_application::TPrimanota_application() : _rel(nullptr), _mode(0), _iva(nessuna_iva), _causale(nullptr), _giornale(nullptr), _lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(nullptr), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false), - _skip_giornale_check(false), _skip_bollato_check(false), _pro_mask(nullptr) + _skip_giornale_check(false), _skip_bollato_check(false) { memset(_msk, 0, sizeof(_msk)); } @@ -441,7 +439,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year) } const char sezione = rcaus->get_char(RCA_SEZIONE); - TImporto zero('D', ZERO); + const TImporto zero('D', ZERO); const TString80 desc(causale().desc_agg(i)); if (nriga == 1) m->set(F_DESCR, desc); @@ -699,7 +697,7 @@ void TPrimanota_application::init_mask(TMask& m) _sal_dirty = false; // Azzero il flag di modifica del saldaconto fill_sheet(m); // Riempe righe contabili coi conti della causale m.hide(F_LINKDOC); - has_f1_db(m); + set_has_f1_db(&m); } void TPrimanota_application::init_query_mode(TMask& m) @@ -738,7 +736,7 @@ void TPrimanota_application::init_query_mode(TMask& m) m.set(F_CODCAUS, ini.get(MOV_CODCAUS)); m.send_key(K_SPACE, DLG_NEWREC); } - has_f1_db(m); + set_has_f1_db(&m); } @@ -997,19 +995,17 @@ void TPrimanota_application::init_insert_mode(TMask& m) m.enable(F_BOLLACODCLI, causale().tipo_doc() == "BD"); m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD"); } - if (iva() != nessuna_iva) - f1_init(m, m.get_date(F_DATAREG) >= get_data_start_fatt()); } -void TPrimanota_application::f1_init(TMask& m, const bool fe_enabled, const bool f1_linked) +void TPrimanota_application::f1_init_modify(TMask& m, const TRectype& mov) { - const bool reverse_charge = app().causale().reverse_charge_pubb(); + const bool after_data_inizio_fe = mov.get_date(MOV_DATADOC) >= get_data_start_fatt(); - m.field(F_IDDOCSDI).show(fe_enabled && reverse_charge); - m.field(F_DATADOCSDI).show(fe_enabled && reverse_charge); - m.field(F_COLFPPRO).show(fe_enabled); - m.field(DLG_LINK).enable(fe_enabled); - m.set(F_COLFPPRO, fe_enabled && f1_linked, 0x3); + m.field(F_IDDOCSDI).show(after_data_inizio_fe); + m.field(F_DATADOCSDI).show(after_data_inizio_fe); + m.field(F_COLFPPRO).show(after_data_inizio_fe); + m.field(DLG_LINK).enable(after_data_inizio_fe); + m.set(F_COLFPPRO, !after_data_inizio_fe || mov.get(MOV_KEYFPPRO).empty() ? " " : "X"); } void TPrimanota_application::init_modify_mode(TMask& m) @@ -1120,7 +1116,7 @@ void TPrimanota_application::init_modify_mode(TMask& m) m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD"); } if (iva() != nessuna_iva) - f1_init(m, mov.get_date(MOV_DATADOC) >= get_data_start_fatt(), mov.get(MOV_KEYFPPRO).full()); + f1_init_modify(m, mov); } // Controlla sulla causale se il segno del totale documento (ritsoc=false) @@ -1492,14 +1488,18 @@ void TPrimanota_application::check_saldi() void TPrimanota_application::write_fppro() { - if (main_app().has_module(FPAUT) && !ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO")) +#ifdef DBG + if (!ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO")) { +#endif // Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov if (save_fppro() > 0 && !save_dbmov()) message_box( "ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" "Movimento registrato senza collegamento ai documenti in ingresso."); +#ifdef DBG } +#endif } bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys) @@ -1556,7 +1556,7 @@ void TPrimanota_application::set_movcoll(const long movcoll, const long numreg) } int TPrimanota_application::controlli_f1(const TMask& m) { - if (iva_mask(m) && m.get(F_PROKEY).full() && has_f1_db(m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS))) + if (m.find_by_id(F_PROKEY) != nullptr && m.get(F_PROKEY).full() && has_f1_db((TMask*)&m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS))) { TToken_string keys(m.get(F_PROKEY), ';'); const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric(); @@ -1717,19 +1717,10 @@ int TPrimanota_application::rewrite(const TMask& m) if (caus.reverse_charge_pubb()) { - long movcoll = m.get_long(F_MOVCOLL); + const long movcoll = m.get_long(F_MOVCOLL); if (movcoll == 0L) find_movcoll(_rel->file().get_long(MOV_NUMREG)); - movcoll = m.get_long(F_MOVCOLL); - if (movcoll > 0L) - { - TRectype & reccoll = (TRectype &) cache().get(LF_MOV, movcoll); - - reccoll.put(MOV_IDDOCSDI, m.get(F_IDDOCSDI)); - reccoll.put(MOV_DATADOCSDI, m.get(F_DATADOCSDI)); - reccoll.rewrite(); - } } mask2rel(m); @@ -1797,7 +1788,7 @@ void TPrimanota_application::clean_fppro() // Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio if (_mode != MODE_MOD - || !has_f1_db(msk) + || !has_f1_db(&msk) || last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega()) return; @@ -1812,17 +1803,27 @@ void TPrimanota_application::clean_fppro() fp_db().sq_commit(); } -bool TPrimanota_application::has_f1() const +void TPrimanota_application::set_has_f1_db(TMask* m) { - return has_module(F1AUT) && get_db_indirizzo().full(); + if (m->find_by_id(F_DATAREG) != nullptr && !m->get(F_DATAREG).empty()) + { + if (TDate(m->get(F_DATAREG)) >= TDate(get_data_start_fatt())) + _isf1 = has_module(F1AUT) && !get_db_indirizzo().empty(); + else + _isf1 = false; + _is_set_fpcheck = true; + } + else if (!_is_set_fpcheck) + { + _isf1 = false; + _is_set_fpcheck = true; + } } -bool TPrimanota_application::has_f1_db(const TMask & m) +bool TPrimanota_application::has_f1_db(TMask* m) { - const TDate datareg = m.get_date(F_DATAREG); - - _is_set_fpcheck = true; - return datareg.ok() && (datareg >= get_data_start_fatt()) && has_f1(); + set_has_f1_db(m); + return _isf1; } bool TPrimanota_application::remove() @@ -1891,8 +1892,6 @@ void TPrimanota_application::genera_automatico(int tipo, const char* causimm) _automatico->_movcoll = m.get_long(F_NUMREG); _automatico->_iva.destroy(); _automatico->_totale = ZERO; - _automatico->_idsdi = m.get(F_IDDOCSDI); - _automatico->_datasdi = m.get(F_DATADOCSDI); for (int i = 0; i < items; i++) { TToken_string row = iva.row(i); @@ -1980,9 +1979,6 @@ void TPrimanota_application::genera_automatico(int tipo, const char* causimm) const TString& clnt = cache().get(LF_CLIFO, forn, CLI_CODCFASS); m.set(F_CODCLIFOR, clnt); } - m.set(F_IDDOCSDI, _automatico->_idsdi); - m.set(F_DATADOCSDI, _automatico->_datasdi); - TSheet_field & iva = m.sfield(F_SHEETIVA); const int items = _automatico->_iva.items(); @@ -2676,7 +2672,7 @@ int TPrimanota_application::save_fppro() TMask& msk = curr_mask(); // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP - if (!has_f1_db(msk)) + if (!has_f1_db(&msk)) return pro_nofp; // Anzitutto guardo la modalita' in cui sono @@ -2741,7 +2737,7 @@ int TPrimanota_application::save_fppro() items = fp_db().sq_items(); } - if(has_f1_db(msk) && items != 1) + if(has_f1_db(&msk) && items != 1) { const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n" "Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n" @@ -2855,7 +2851,6 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action) const BOOLEAN bModify = xvt_str_same(action, "Modify"); - TFilename intrini; intrini.tempdir(); intrini.add("ActIntra.ini"); diff --git a/src/cg/cg2100c.uml b/src/cg/cg2100c.uml index 3a69254b4..f681a0adb 100755 --- a/src/cg/cg2100c.uml +++ b/src/cg/cg2100c.uml @@ -569,7 +569,7 @@ END STRING F_PROKEY 80 BEGIN - PROMPT 1 26 "db key" + PROMPT 1 19 "db key" HELP "Chiave database" FIELD KEYFPPRO FLAGS "H" diff --git a/src/cg/cg2100t.uml b/src/cg/cg2100t.uml index 96590a6a6..ec4eb71cd 100644 --- a/src/cg/cg2100t.uml +++ b/src/cg/cg2100t.uml @@ -13,14 +13,12 @@ BEGIN PROMPT 2 1 "Contabilizzaz." PICTURE TOOL_EXPORT MODULE F1 - MESSAGE EXIT,K_ENTER END BUTTON DLG_LINK 2 2 BEGIN PROMPT 3 1 "Collega in Prima nota" PICTURE TOOL_LINK - MESSAGE EXIT,K_ENTER END BUTTON DLG_QUIT 2 2 diff --git a/src/cg/cg2102.cpp b/src/cg/cg2102.cpp index e334045ca..cdb67df4f 100755 --- a/src/cg/cg2102.cpp +++ b/src/cg/cg2102.cpp @@ -219,10 +219,7 @@ TSheet_field& TPrimanota_application::cgs() const void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp) { TSheet_field& s = cgs(); - TImporto i(imp); - - i.normalize(); - i.add_to(s.row(n), 0); + imp.add_to(s.row(n), 0); s.force_update(n); } @@ -374,7 +371,7 @@ void TPrimanota_application::reset_sheet_row(TSheet_field& s, int n) s.destroy(n); // Remove line n } -int TPrimanota_application::set_cgs_row(int n, TImporto& importo, +int TPrimanota_application::set_cgs_row(int n, const TImporto& imp, const TBill& conto, const char* desc, char tipo, const char* cms, const char* fas) { @@ -383,8 +380,7 @@ int TPrimanota_application::set_cgs_row(int n, TImporto& importo, TToken_string& row = cg.row(n); row.cut(0); - importo.normalize(); - importo.add_to(row, 0); + imp.add_to(row, 0); row.add(conto.string(0x3)); row.add(""); // Codice decrizione row.add(desc); // Descrizione aggiuntiva @@ -1540,7 +1536,7 @@ void TPrimanota_application::add2cg_row(TSheet_field& s, TToken_string & row, TS { const TBill conto(row, cid2index(IVA_TIPO), 0x1); const int pos = bill2pos(conto, cgrowtype_imponibile); // Riga in cui andra' l'imponibile - TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile + const TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile if (pos >= 0) // Se il conto esisteva anche prima ... { @@ -1765,7 +1761,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& s, int r, KEY k) real pimponibile(pag.imponibile(inv)); pimponibile.round(pag.round(inv)); - if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare()))) + if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back()))) a.set_scadenze(m); // Ricalcola rate } } @@ -2846,7 +2842,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m) TImporto imp = real2imp(m.get_real(F_TOTALE), cgrowtype_totale); - set_cgs_row(riga_totale, imp, nuovo, descr, cgrowtype_totale); + set_cgs_row(riga_totale, imp.normalize(), nuovo, descr, cgrowtype_totale); } calcola_imp(); // Ricalcola totale IVA calcola_saldo(); // Ricalcola sbilanci @@ -3022,7 +3018,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key) ixc->set(ic ? "X" : ""); } if(m.get(F_PROKEY).empty() && app().has_module(F1AUT)) - a.fppro_mask(f, key); + fppro_mask(f, key); } } return true; @@ -3566,11 +3562,21 @@ HIDDEN void inventa_cambio_intra(TMask& m) { const TString& codval = m.get(F_VALUTAINTRA); - if (codval.full() && TCurrency::get_firm_val() != codval) + if (codval.not_empty() && TCurrency::get_firm_val() != codval) { - const TRectype & cam =cache().get("CAM", codval); + TTable cam("CAM"); - if (cam.full()) + cam.put("CODTAB", codval); + const int err = cam.read(_isgteq); + bool yes = err != NOERR; + if (!yes) + { + TString16 v = cam.get("CODTAB"); + + v.cut(3).rtrim(); + yes = v != codval; + } + if (yes) m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4")); } } @@ -3897,74 +3903,71 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key) return true; } - -void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk) +void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr& msk) { TSheet_field& sf = cg_msk.sfield(F_SHEETIVA); - const TString_array& righe = msk.get_righeiva(); + const vector& righe = msk->get_righeiva(); + int i = 0; - FOR_EACH_ARRAY_ITEM( righe, r, obj) + for (auto it = righe.begin(); it != righe.end(); ++it) { - TToken_string & riga = STRING_TOKEN(obj); - const real imponibile = riga.get_real(FPRI_IMPONIBILE); - const real imposta = riga.get_real(FPRI_IMPOSTA); - - if (imponibile != ZERO || imposta != ZERO) + if(it->imponibile != 0 || it->imposta != 0) { - TToken_string& row = sf.row(r); + TToken_string& row = sf.row(i); - sf.notify(r, K_SPACE); - sf.set_row_cell(IVA_IMPONIBILE, imponibile, r); - sf.set_row_cell(IVA_IMPOSTA, imposta, r); - sf.set_row_cell(IVA_PERCIVA, riga.get(FPRI_ALIQUOTA), r); - sf.set_row_cell(IVA_NATURIVA, riga.get(FPRI_NATURA), r); - sf.notify(r, K_ENTER); + sf.notify(i, K_SPACE); + row.add(it->imponibile, cid2index(IVA_IMPONIBILE)); + row.add(it->imposta, cid2index(IVA_IMPOSTA)); + row.add(it->aliquota, cid2index(IVA_PERCIVA)); + row.add(it->natura, cid2index(IVA_NATURIVA)); + sf.notify(i, K_ENTER); + i++; } } } -bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const TPro_msk & msk) +bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr& msk) { TSheet_field& sf = cg_msk.sfield(FS_RATESHEET); const int items = sf.items(); - const TString_array & righe = msk.get_scadenze(); + const vector& righe = msk->get_scadenze(); + int i = 0; - FOR_EACH_ARRAY_ITEM(righe, r, obj) + for (auto it = righe.begin(); it != righe.end(); ++it, ++i) { - TToken_string& row = app().pags().row(r); - TToken_string & riga = STRING_TOKEN(obj); + TToken_string& row = app().pags().row(i); - if (r >= items) - pag_notify(sf, r, K_CTRL+K_INS); - pag_notify(sf, r, K_SPACE); - sf.set_row_cell(101, riga.get_date(FPSC_DATA), r); - sf.set_row_cell(102, riga.get_real(FPSC_IMPORTO), r); - pag_notify(sf, r, K_ENTER); + if(i >= items) + pag_notify(sf, i, K_CTRL+K_INS); + pag_notify(sf, i, K_SPACE); + row.add(it->data, cid2index(101)); + row.add(it->importo, cid2index(102)); + pag_notify(sf, i, K_ENTER); } - return righe.items() > 0; + return !righe.empty(); } -void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk) +void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr& msk) { bool ok = false; TLocalisamfile clifo(LF_CLIFO); - TToken_string keys(msk.get_fpprokeys(), ';'); - long codforn = TFppro(keys).get_codforn(); + TToken_string keys(msk->get_fpprokeys(), ';'); + TString codforn = TFppro(keys).get_codforn(); - if (codforn == 0L) - codforn = msk.get_codforn(); - if (codforn == 0L) + if (codforn.empty()) + codforn = msk->get_codforn(); + if (codforn.empty()) { clifo.setkey(5); clifo.put(CLI_TIPOCF, "F"); - clifo.put(CLI_PAIV, msk.get_piva()); + clifo.put(CLI_PAIV, msk->get_piva()); clifo.read(); - ok = clifo.get(CLI_PAIV) == msk.get_piva(); + ok = clifo.get(CLI_PAIV) == msk->get_piva(); if(!ok) { clifo.zero(); clifo.setkey(5); clifo.put(CLI_TIPOCF, "F"); - clifo.put(CLI_PAIV, msk.get_piva()); + clifo.put(CLI_PAIV, msk->get_piva()); clifo.put(CLI_STATOPAIV, "IT"); clifo.read(); } @@ -3976,8 +3979,8 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk) clifo.put(CLI_CODCF, codforn); clifo.read(); } - ok = clifo.get(CLI_PAIV) == msk.get_piva(); - if (ok && (cg_msk.get_long(F_CODCLIFOR) == 0 || cg_msk.get_long(F_CODCLIFOR) != codforn)) + ok = clifo.get(CLI_PAIV) == msk->get_piva(); + if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn)) { cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF)); cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC)); @@ -3985,21 +3988,20 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk) cg_msk.set(F_PIVA, clifo.get(CLI_PAIV)); cg_msk.set(F_COFI, clifo.get(CLI_COFI)); cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG)); - - const TRectype & tab = cache().get("%CPG", clifo.get(CLI_CODPAG)); - + TTable tab("%CPG"); tab.put("CODTAB", clifo.get(CLI_CODPAG)); + tab.read(); cg_msk.set(F_DESPAG, tab.get("S0")); } } -void TPrimanota_application::set_totale(TMask& cg_msk, TPro_msk & msk) +void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr& msk) { - real totale = msk.get_totdoc(); + real totale = msk->get_totdoc(); - if (totale == ZERO) + if(totale == ZERO) totale = app().calcola_imp(); - const real rit = msk.get_ritenute(); + const real rit = msk->get_ritenute(); if (rit != ZERO) { @@ -4007,83 +4009,78 @@ void TPrimanota_application::set_totale(TMask& cg_msk, TPro_msk & msk) cg_msk.set(F_RITFIS, rit); app().add_cgs_ritenute(cgrowtype_ritfis); } - else - if (msk.is_doc_split()) - totale = msk.get_tot_imp_riva(); + else if (msk->is_doc_split()) + totale = msk->get_tot_imp_riva(); cg_msk.set(F_TOTALE, totale); } -void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, TPro_msk & msk) +void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr& msk) { - const bool bring = msk.da_riportare(); + const bool bring = msk->should_bring_back(); if (bring) { - TPrimanota_application & a = app(); - - if (msk.get_numdoc() != 0L && cg_msk.get(F_CODCLIFOR).empty()) - a.write_clifo(cg_msk, msk); - a.write_righe_iva_f1(cg_msk, msk); - a.set_totale(cg_msk, msk); + if (msk->get_numdoc().full() && cg_msk.get(F_CODCLIFOR).empty()) + write_clifo(cg_msk, msk); + write_righe_iva_f1(cg_msk, msk); + set_totale(cg_msk, msk); cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE); - if (a.write_scad_f1(cg_msk, msk)) - a.set_scad_f1(cg_msk); + if (write_scad_f1(cg_msk, msk)) + app().set_scad_f1(cg_msk); } // Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati - if (bring || cg_msk.get(F_NUMDOCEXT) != msk.get_str_numdoc()) + if (bring || cg_msk.get(F_NUMDOC).empty()) { - - cg_msk.set(F_NUMDOCEXT, msk.get_str_numdoc()); - cg_msk.set(F_NUMDOC, format("%-7ld", msk.get_numdoc())); - cg_msk.set(F_DATADOC, msk.get_datadoc()); - cg_msk.set(F_IDDOCSDI, msk.get_str_numdoc()); - cg_msk.set(F_DATADOCSDI, msk.get_datadoc()); - cg_msk.disable(F_IDDOCSDI); - cg_msk.disable(F_DATADOCSDI); + cg_msk.set(F_NUMDOCEXT, msk->get_numdoc()); + cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7)); } + + if (bring || cg_msk.get(F_DATADOC).empty()) + cg_msk.set(F_DATADOC, msk->get_datadoc()); } -void TPrimanota_application::insert_part_scad(TConfig& ini) // che cazzo significa la partita 73/001 +void TPrimanota_application::insert_part_scad(TConfig& ini) { - TArray rif_doc; - TString str = ini.get("NUMLINEA", "23", 0); + vector rif_doc; + int i = 0; + ini.set_paragraph("23"); // Carico nel vettore - for (int i = 0; str.full(); str = ini.get("NUMLINEA", "23", ++i)) + while(true) { TToken_string doc("", '|'); - + TString str; str << ini.get("NUMLINEA", nullptr, i, "NULL"); + if (str != "NULL") + { doc.add(str); - doc.add(ini.get("DOCRIF", "23", i)); - doc.add(ini.get("DATADOCRIF", "23", i)); - rif_doc.add(doc); + doc.add(ini.get("DOCRIF", nullptr, i, "NULL")); + doc.add(ini.get("DATADOCRIF", nullptr, i, "NULL")); + + rif_doc.insert(rif_doc.end(), doc); + i++; } + else + break; + } // Agganciare alla partita del documento di riferimento - if(rif_doc.items() > 0) + if(!rif_doc.empty()) { is_f1() = true; TString query; query << "USE MOV\nSELECT (DATADOC==#DATADOC)"; TISAM_recordset rec(query); + rec.set_var("#DATADOC", TVariant(TDate(rif_doc[0].get(2)))); TString part; - - FOR_EACH_ARRAY_ITEM(rif_doc, r, _obj) + do { - if (part.blank()) + if (rec.get(MOV_NUMDOC).as_string() == "73/001") { - rec.set_var("#DATADOC", ((TToken_string&)rif_doc[0]).get_date(2)); - - for (bool ok = rec.move_first(); ok; ok = rec.move_next()) - { - if (rec.get_string(MOV_NUMDOC) == "73/001") - { - part = rec.get_string(MOV_PROTIVA); + part = rec.get(MOV_PROTIVA).as_string(); break; } } while (rec.move_next()); - } - } + _num_doc_rif_partite = part; } } @@ -4095,10 +4092,9 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key) if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS))) return true; - TPro_msk * msk = app()._pro_mask; - - if (msk == nullptr) - app()._pro_mask = msk = new TPro_msk(cg_msk); + auto msk = std::make_shared(cg_msk); + + app()._pro_mask = msk; const TString datadoc = cg_msk.get(F_DATADOC); @@ -4108,13 +4104,16 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key) msk->field(F_DATESEARCH).show(); msk->set(F_DATESEARCH, datadoc); } + if (msk->load_fppro_mask(msk.get())) + { msk->run(); // Riporto dati FPPRO su maschera Prima Nota (solo se hai F1) // Se non hai F1 collego senza riportarti i dati (solo le chiavi db) - riporta_dati_f1(cg_msk, *msk); + riporta_dati_f1(cg_msk, msk); cg_msk.set(F_PROKEY, msk->get_fpprokeys()); - cg_msk.set(F_COLFPPRO, cg_msk.get(F_PROKEY).full()); + is_collegato(cg_msk.field(F_COLFPPRO)); cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA)); + } return true; } @@ -4133,11 +4132,11 @@ bool TPrimanota_application::scollega(const bool set) bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key) { - if (app().has_module(FPAUT) && f.running_check(key)) - { TMask& cg_msk = f.mask(); - if (check_causale(cg_msk.get(F_CODCAUS)) && cg_msk.get_bool(F_COLFPPRO)) + if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS))) + return true; + if (cg_msk.get_bool(F_COLFPPRO)) { scollega(true); app().clean_fppro(); @@ -4151,81 +4150,103 @@ bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key) } message_box("Il movimento e' stato scollegato dalla fattura elettronica\nin ingresso, precedentemente associata."); } - } return true; } -bool TPro_msk::load_fppro_mask(TMask & msk) +bool TPrimanota_application::is_collegato(TMask_field& f) +{ + TMask& cg_msk = f.mask(); + const bool has_prokey = !cg_msk.get(F_PROKEY).empty(); + + f.set(has_prokey ? "X" : " "); + return has_prokey; +} + +bool TPro_msk::load_fppro_mask(TMask* msk, KEY k) { // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP + if (k != 32) + return false; if (!fp_db().sq_is_connect()) { message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata."); return false; } - const int forn = msk.get_int(F_CODCLIFORS); + const int forn = msk->get_int(F_CODCLIFORS); if (forn == 0) { - msk.set(F_ENABSEARCH, "X"); - abilita_piva(); + msk->set(F_ENABSEARCH, "X"); + abilita_piva(msk); //message_box("Inserire prima il fornitore"); //return false; } - const TString& codfisc = msk.get(F_COFIS); - const TString& stato_piva = msk.get(F_STATOPAIVS); - const TString& piva = msk.get(F_PIVAS); + const TString& codfisc = msk->get(F_COFIS); + const TString& stato_piva = msk->get(F_STATOPAIVS); + const TString& piva = msk->get(F_PIVAS); TString query; - TDate date; + TString date = ""; - if (msk.get_bool(F_ENABDATE)) - date = msk.get_date(F_DATESEARCH); - if(!msk.get_bool(F_ENABSEARCH)) - query = query_fppro(msk.get(F_CODCLIFORS), date); + if (msk->get_bool(F_ENABDATE)) + date = msk->get_date(F_DATESEARCH); + if(!msk->get_bool(F_ENABSEARCH)) + query = query_fppro(msk->get(F_CODCLIFORS), date); else query = query_fppro(stato_piva, piva, date); fp_db().sq_set_exec(query, false); - TSheet_field& sf = msk.sfield(F_SHEETFPPROS); - const bool show_all = msk.get_bool(F_SHOWALL); + TSheet_field& sf = msk->sfield(F_SHEETFPPROS); - sf.reset(); + sf.hide(); + if (sf.items() > 0) + sf.destroy(); while (fp_db().sq_next()) { - const long numreg = fp_db().sq_get_long("PZ_NUMREGCONT"); + TString numreg = fp_db().sq_get("PZ_NUMREGCONT"); + const bool show_all = msk->get_bool(F_SHOWALL); - if (show_all || numreg == 0L) - { + if (numreg != "0" && !show_all) + continue; + + TToken_string& row = sf.row(-1); TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';'); keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT")); - - const int r = sf.set_row_cell(F_SELFPPROS, ""); - - sf.set_row_cell(F_TIPODOCS, fp_db().sq_get("P7_TIPODOC"), r); - sf.set_row_cell(F_DATAORARICS, fp_db().sq_get_date("P1_DATAORARIC"), r); - sf.set_row_cell(F_DATAS, fp_db().sq_get_date("PZ_DATA"), r); - sf.set_row_cell(F_IMPTOTDOCS, fp_db().sq_get("PQ_IMPTOTDOC"), r); - sf.set_row_cell(F_RITENUTE, fppro_db().set_keys(keys).get_ritenute(), r); - sf.set_row_cell(F_NUMEROS, fp_db().sq_get("PZ_NUMERO"), r); - sf.set_row_cell(F_RAGXML, fp_db().sq_get("P2_ANADENOMIN"), r); - sf.set_row_cell(F_FISCIVAPAESES, fp_db().sq_get("P2_FISCIVAPAESE"), r); - sf.set_row_cell(F_FISCIVACODS, fp_db().sq_get("P2_FISCIVACOD"), r); - sf.set_row_cell(F_CODFISCALES, fp_db().sq_get("P2_CODFISCALE"), r); - sf.set_row_cell(F_TIPOPROTS, fp_db().sq_get("PZ_TIPOPROT"), r); - sf.set_row_cell(F_PROGRESSS, fp_db().sq_get("PZ_NUMPROT"), r); - sf.set_row_cell(F_KEYFPPROS, keys, r); - } + row.add("", 0); + row.add(fp_db().sq_get("P7_TIPODOC")); + row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC"))); + row.add(TDate(fp_db().sq_get_date("PZ_DATA"))); + row.add(fp_db().sq_get("PQ_IMPTOTDOC")); + row.add(fppro_db().set_keys(keys).get_ritenute()); + row.add(fp_db().sq_get("PZ_NUMERO")); + row.add(fp_db().sq_get("P2_ANADENOMIN")); + row.add(fp_db().sq_get("P2_FISCIVAPAESE")); + row.add(fp_db().sq_get("P2_FISCIVACOD")); + row.add(fp_db().sq_get("P2_CODFISCALE")); + row.add(fp_db().sq_get("PZ_TIPOPROT")); + row.add(fp_db().sq_get("PZ_NUMPROT")); + row.add(keys); } sf.force_update(); + sf.show(); return true; } -bool TPro_msk::riporta(TMask_field& f) +bool TPro_msk::fppro_handler(TMask_field& f, KEY k) { TMask& msk = f.mask(); + + const bool load = load_fppro_mask(&msk, k); + return load; +} + +bool TPro_msk::riporta_handler(TMask_field& f, KEY k) +{ + if (k != 32) + return true; + TMask& msk = f.mask(); //if (msk.curr_page() != 3) //return true; bool ok = false; @@ -4233,10 +4254,16 @@ bool TPro_msk::riporta(TMask_field& f) FOR_EACH_SHEET_ROW(sf, nr, row) { - if(row->get_bool(0)) + if(*row->get(0) == 'X') { - app().pro_mask()->set_doc(sf, nr); - _riporta = f.dlg() == DLG_OK; + //TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10)); + app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)), + row->get(cid2index(F_IMPTOTDOCS)), row->get(cid2index(F_RITENUTE)), "", row->get(cid2index(F_KEYFPPROS)), + msk.get(F_CODCLIFORS), row->get(cid2index(F_FISCIVACODS))); + if (f.dlg() == DLG_OK) + app()._pro_mask->_riporta = true; + else + app()._pro_mask->_riporta = false; ok = true; break; } @@ -4250,56 +4277,67 @@ bool TPro_msk::riporta(TMask_field& f) return true; } +bool TPro_msk::collega_handler(TMask_field& f, KEY k) +{ + return riporta_handler(f, k); +} + +bool TPro_msk::piva_handler(TMask_field& f, KEY k) +{ + TMask& msk = f.mask(); + bool ok = true; + + if(k == K_TAB && f.active() && f.focusdirty()) + { + ok = load_fppro_mask(&msk, K_SPACE); + } + return ok; +} + +bool TPro_msk::date_handler(TMask_field& f, KEY k) +{ + TMask& msk = f.mask(); + bool ok = true; + + if (k == K_TAB && f.active() && f.focusdirty()) + { + ok = load_fppro_mask(&msk, K_SPACE); + } + return ok; +} + void TPro_msk::fppro_selfatt() const { const TMask& mask = *this; TSheet_field& sf = mask.sfield(F_SHEETFPPROS); + sf.hide(); FOR_EACH_SHEET_ROW(sf, nr, row) - if (sf.get_bool_row_cell(nr, F_SELFPPROS)) - sf.set_row_cell(F_SELFPPROS, false, nr); + { + if (*row->get(0) == 'X') + row->add("", 0); + } sf.force_update(); + sf.show(); } bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { - TMask & m = o.mask(); - switch (o.dlg()) { - case DLG_CONFIG: - if (e == fe_button) - load_fppro_mask(m); - break; - case DLG_OK: - if (e == fe_button) - riporta(o); - break; - case DLG_LINK: - if (e == fe_button) - riporta(o); - break; - case F_PIVAS: - if (e == fe_modify) - load_fppro_mask(m); - break; - case F_DATESEARCH: - if (e == fe_modify) - load_fppro_mask(m); - break; case F_SELFPPROS: if (e == fe_modify) fppro_selfatt(); break; case F_SHOWALL: if (e == fe_modify) - load_fppro_mask(m); + load_fppro_mask(this, K_SPACE); break; case F_ENABSEARCH: if (e == fe_modify) { - abilita_piva(); - load_fppro_mask(m); + abilita_piva(this); + load_fppro_mask(this); } break; case F_ENABDATE: @@ -4307,7 +4345,7 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { field(F_DATESEARCH).show(o.mask().get_bool(F_ENABDATE)); if (!o.mask().get_bool(F_ENABDATE)) - load_fppro_mask(m); + load_fppro_mask(this); } break; default: @@ -4318,11 +4356,9 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TPro_msk::is_doc_split() { - FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj) + for(riga_iva_s const& riga : _righe_iva) { - TToken_string & riga = STRING_TOKEN(obj); - - if (riga.get(FPRI_ESIGIBILITA) == "S") + if (riga.esigibilita == 'S') return true; } return false; @@ -4359,71 +4395,53 @@ void TPro_msk::set_scadenze(const char* fpprokeys) } } -void TPro_msk::set_doc(TSheet_field & s, int nrow) - //long numero, TDate datadoc, real totdoc, real ritenute, const char* protfppro, const char* fpprokeys, long codforn, const char* piva) +void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva) { - _numero = s.get_long_row_cell(nrow, F_NUMEROS); - _str_numero = s.get_str_row_cell(nrow, F_NUMEROS); - _datadoc = s.get_date_row_cell(nrow, F_DATAS); - _totdoc = abs(s.get_real_row_cell(nrow, F_IMPTOTDOCS)); - _ritenute = s.get_real_row_cell(nrow, F_RITENUTE); - _protfppro.sset(""); - - const TString & fpprokeys = s.get_str_row_cell(nrow, F_KEYFPPROS); - + _numero = numero; + _datadoc = datadoc; + _totdoc = abs(totdoc); + _ritenute = ritenute; + _protfppro.sset(protfppro); _fpprokeys = fpprokeys; + _codforn = codforn; + _piva = piva; set_righeiva(fpprokeys); - set_scadenze(fpprokeys); - _codforn = s.get_long_row_cell(nrow, F_CODCLIFORS); - _piva = s.get_str_row_cell(nrow, F_FISCIVACODS); - + set_scadenze(fpprokeys); } real TPro_msk::get_tot_imp_riva() { - real tot; + real tot = ZERO; - FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj) + for(riga_iva_s const& riga : _righe_iva) { - TToken_string & riga = STRING_TOKEN(obj); - - tot += riga.get_real(FPRI_IMPONIBILE); + if (riga.imposta > ZERO) + tot += riga.imponibile; } return tot; } void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib) { - TToken_string riga; - - riga.add(imponibile, FPRI_IMPONIBILE); - riga.add(imposta, FPRI_IMPOSTA); - riga.add(aliquota, FPRI_ALIQUOTA); - riga.add(natura, FPRI_NATURA); - riga.add(esigib, FPRI_ESIGIBILITA); - _righe_iva.add(riga); + _righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura, esigib }); } void TPro_msk::add_scad(const TDate& date, const real& importo) { - TToken_string riga; - - riga.add(date, FPSC_DATA); - riga.add(importo, FPSC_IMPORTO); - _scadenze.add(riga); + _scadenze.insert(_scadenze.end(), { date, importo }); } -TString& TPro_msk::query_fppro(const TString& codforn, const TDate& date) +TString& TPro_msk::query_fppro(const TString& codforn, const TString& date) { return query_fppro(codforn, "", "", "", date, "", "", "", true, false); } -TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TDate& date) +TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TString& date) { return query_fppro("", stato_piva, piva, "", date, "", "", "", true, true); } -TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research) +TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research) { TString id_fornitore; TString keys; @@ -4447,15 +4465,14 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva id_fornitore << " (PZ_CLIFOR = '" << codforn << "') "; } - TString & query = query_string(); - - query << "WHERE "; + static TString query; + query.cut(0) << query_string() << "WHERE "; if (!id_fornitore.empty()) { query << id_fornitore << " "; - if (date.ok()) - query << " AND PZ_DATA = '" << date.date2ansi() << "' "; + if (!date.empty()) + query << " AND PZ_DATA = '" << TDate(date).date2ansi() << "' "; if (order) query << "\nORDER BY P1_DATAORARIC ASC"; query << ";"; @@ -4467,9 +4484,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva query << " AND " << where_str; query << ";"; } - else if (date.ok()) + else if (!date.empty()) { - query << " PZ_DATA = '" << date.date2ansi() << "' "; + query << " PZ_DATA = '" << TDate(date).date2ansi() << "' "; if (order) query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC"; query << ";"; @@ -4484,9 +4501,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva TString& TPro_msk::query_string() { - TString & query = get_tmp_string(512); + static TString query; - query << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " << + query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " << "PZ_NUMPROT, P2_ANADENOMIN, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" << "FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" << "JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" << @@ -4495,26 +4512,36 @@ TString& TPro_msk::query_string() return query; } -void TPro_msk::abilita_piva() +void TPro_msk::abilita_piva(TMask* msk) { - const bool on = get_bool(F_ENABSEARCH); - - enable(F_PIVAS, on); - enable(F_STATOPAIVS, on); - enable(F_COFIS, on); + if (msk->get_bool(F_ENABSEARCH)) + { + msk->enable(F_PIVAS); + msk->enable(F_STATOPAIVS); + } + else + { + msk->enable(F_PIVAS, false); + msk->enable(F_STATOPAIVS, false); + } } -TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn(0L), _numero(0L) +TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn("") { - enable(DLG_OK, app().has_module(F1AUT)); - set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR)); - set(F_COFIS, cg_msk.get(F_COFI)); - set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV)); - set(F_PIVAS, cg_msk.get(F_PIVA)); - set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF)); + TMask::set_handler(DLG_CONFIG, fppro_handler); + TMask::set_handler(DLG_OK, riporta_handler); + if (!app().has_module(F1AUT)) + field(DLG_OK).disable(); + TMask::set_handler(DLG_LINK, collega_handler); + TMask::set_handler(F_PIVAS, piva_handler); + TMask::set_handler(F_DATESEARCH, date_handler); + TMask::set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR)); + TMask::set(F_COFIS, cg_msk.get(F_COFI)); + TMask::set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV)); + TMask::set(F_PIVAS, cg_msk.get(F_PIVA)); + TMask::set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF)); set(F_DATESEARCH, TDate(TODAY)); - _righe_iva.destroy(); - _scadenze.destroy(); + _righe_iva.clear(); } bool& is_f1() @@ -4522,4 +4549,3 @@ bool& is_f1() static bool is_f1 = false; return is_f1; } - diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index d11920e2a..f44033988 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -27,78 +27,15 @@ #include #include "../f1/f1lib.h" +#include #define K_ELIMMAS 0 // Key per eliminazione massima -#define FPRI_IMPONIBILE 0 -#define FPRI_IMPOSTA 1 -#define FPRI_ALIQUOTA 2 -#define FPRI_NATURA 3 -#define FPRI_ESIGIBILITA 4 - -#define FPSC_DATA 0 -#define FPSC_IMPORTO 1 - +class TPro_msk; class TDati_mov_auto; enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3}; -class TPro_msk : public TAutomask -{ - long _numero; - TDate _datadoc; - real _totdoc; - real _ritenute; - TProtocollo _protfppro; - TString _fpprokeys; - TString _piva; - long _codforn; - TString_array _righe_iva; - TString_array _scadenze; - bool _riporta; - TString _str_numero; - - // Non permette la selezione multipla - void fppro_selfatt() const; - bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; -public: - bool da_riportare() const { return _riporta; } - bool is_doc_split() ; - - void set_righeiva(const char* fpprokeys); - void set_scadenze(const char* fpprokeys); - void set_doc(TSheet_field & s, int nrow); - - const long get_numdoc() const { return _numero; } - const TString & get_str_numdoc() const { return _str_numero; } - const TDate & get_datadoc() const { return _datadoc; } - const real & get_totdoc() const { return _totdoc; } - const real & get_ritenute() const { return _ritenute; } - const TString & get_fpprokeys() const { return _fpprokeys; } - const long get_codforn() const { return _codforn; } - const TString & get_piva() const { return _piva; } - const TString_array& get_righeiva() const { return _righe_iva; } - const TProtocollo& get_protocollo() const { return _protfppro; } - const TString_array& get_scadenze() const { return _scadenze; } - real get_tot_imp_riva() ; - - void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib); - void add_scad(const TDate& date, const real& importo); - - static TString& query_fppro(const TString& codforn, const TDate& date); - static TString& query_fppro(const TString& stato_piva, const TString& piva, const TDate& date); - static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false); - static TString& query_string(); - - void abilita_piva(); - - // Carica documenti FPPRO sulla maschera - bool riporta(TMask_field& f); - bool load_fppro_mask(TMask & msk); - - TPro_msk(TMask& cg_msk); -}; - class TPrimanota_application : public TRelation_application { TMovimentoPN* _rel; // Relazione principale @@ -153,7 +90,7 @@ class TPrimanota_application : public TRelation_application TAssoc_array _colori; // Colori delle righe bool _isf1; - TPro_msk * _pro_mask; + shared_ptr _pro_mask; bool _is_set_fpcheck; int _last_date; bool _f1_ini; @@ -244,19 +181,20 @@ class TPrimanota_application : public TRelation_application // Gestione F1 - void write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk); - bool write_scad_f1(const TMask& cg_msk, const TPro_msk & msk); - void write_clifo(TMask& cg_msk, const TPro_msk & msk); - void set_totale(TMask& cg_msk, TPro_msk & msk); - static void riporta_dati_f1(TMask& cg_msk, TPro_msk & msk); + static void write_righe_iva_f1(TMask& cg_msk, const shared_ptr& msk); + static bool write_scad_f1(const TMask& cg_msk, const shared_ptr& msk); + static void write_clifo(TMask& cg_msk, const shared_ptr& msk); + static void set_totale(TMask& cg_msk, const shared_ptr& msk); + static void riporta_dati_f1(TMask& cg_msk, const shared_ptr& msk); void insert_part_scad(TConfig& ini); // Handlers per aggancio FPPRO // Bottone per maschera FPPRO static bool fppro_mask(TMask_field& f, KEY key); static bool scollega_handler(TMask_field& f, KEY key); + static bool is_collegato(TMask_field& f); static void fppromask_set_handl(TMask* msk); - void load_list(TMask* msk, KEY k); - void f1_init(TMask& m, const bool fe_enabled, const bool f1_linked = false); + static void load_list(TMask* msk, KEY k); + static void f1_init_modify(TMask& m, const TRectype& mov); void reset_sheet_row(TSheet_field& s, int n); int crea_somma_spese(TImporto& imp); @@ -285,10 +223,9 @@ protected: // TApplication static bool scollega(bool set = false); // Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete) void clean_fppro(); - // Ha f1 ? - bool has_f1() const; - // controlla il db - bool has_f1_db(const TMask & m); + // setta variabili prima del controllo has_f1_db + void set_has_f1_db(TMask* m); + bool has_f1_db(TMask* m); // Controlli prima di write e rewrite int controlli_f1(const TMask& m); @@ -384,7 +321,7 @@ protected: real calcola_imp() const; void add_cgs_tot(TMask& m); - int set_cgs_row(int n, TImporto& importo, const TBill& conto, const char* desc, char tipo, + int set_cgs_row(int n, const TImporto& importo, const TBill& conto, const char* desc, char tipo, const char* cms = nullptr, const char* fas = nullptr); void set_cgs_imp(int n, const TImporto& importo); bool add_cgs_imp(int n, const TImporto& importo); @@ -463,18 +400,98 @@ public: TString_array& pag_rows() { return _pag_rows; } TImporto get_cgs_imp(int n) const; - TPro_msk * pro_mask() const { return _pro_mask; } TImporto imposte_split_pay() const; const TString& num_doc_rif() const { return _num_doc_rif_partite; } TPrimanota_application(); - virtual ~TPrimanota_application() { safe_delete(_pro_mask); } + virtual ~TPrimanota_application() { } +}; + +class TPro_msk : public TAutomask +{ +public: + struct riga_iva_s; + struct scadenza_s; +private: + TString _numero; + TDate _datadoc; + real _totdoc; + real _ritenute; + TProtocollo _protfppro; + TString _fpprokeys; + TString _piva; + TString _codforn; + vector _righe_iva; + vector _scadenze; + bool _riporta; + + // Handlers per aggancio FPPRO + // Bottone carica documenti in maschera FPPRO + static bool fppro_handler(TMask_field& f, KEY k); + // Bottone riporta doc FPPRO in testata Prima Nota + static bool riporta_handler(TMask_field& f, KEY k); + static bool collega_handler(TMask_field& f, KEY k); + static bool piva_handler(TMask_field& f, KEY k); + static bool date_handler(TMask_field& f, KEY k); + // Non permette la selezione multipla + void fppro_selfatt() const; + bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; +public: + struct riga_iva_s + { + real imponibile; + real imposta; + real aliquota; + TString4 natura; + char esigibilita; + }; + struct scadenza_s + { + TDate data; + real importo; + }; + + bool should_bring_back() const { return _riporta; } + bool is_doc_split(); + + void set_righeiva(const char* fpprokeys); + void set_scadenze(const char* fpprokeys); + void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva); + + TString get_numdoc() const { return _numero; } + TDate get_datadoc() const { return _datadoc; } + real get_totdoc() const { return _totdoc; } + real get_ritenute() const { return _ritenute; } + TString get_fpprokeys() const { return _fpprokeys; } + TString get_codforn() const { return _codforn; } + TString get_piva() const { return _piva; } + const vector& get_righeiva() const { return _righe_iva; } + TProtocollo& get_protocollo() { return _protfppro; } + vector& get_scadenze() { return _scadenze; } + real get_tot_imp_riva(); + + + void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib); + void add_scad(const TDate& date, const real& importo); + + + static TString& query_fppro(const TString& codforn, const TString& date); + static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date); + static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false); + static TString& query_string(); + + static void abilita_piva(TMask* msk); + + // Carica documenti FPPRO sulla maschera + static bool load_fppro_mask(TMask* msk, KEY k = 32); + + TPro_msk() = delete; + TPro_msk(TMask& cg_msk); }; bool& is_f1(); - - +TString& num_doc_rif(); #ifndef __EXTRA__ inline TPrimanota_application& app() diff --git a/src/cg/cg2104.cpp b/src/cg/cg2104.cpp index e2b265ea0..1db3a0a1b 100755 --- a/src/cg/cg2104.cpp +++ b/src/cg/cg2104.cpp @@ -329,7 +329,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key) TMask& m = f.mask(); TPrimanota_application& a = app(); const bool set_scad = a.is_fattura() && m.page_enabled(2); // E' attiva pagina 3 - if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare()))) + if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back()))) { if (set_scad && f.empty()) { @@ -356,7 +356,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key) } } - if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare()))) + if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back()))) a.set_scadenze(m); return ok; @@ -1227,7 +1227,8 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa // Aggiornamento contopartita const TImporto old_importo(controsez, old_pag.get_real(PAGSCA_IMPORTO)); TBill old_conto; old_conto.get(old_pag, true); - TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO)); + + const TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO)); if (old_importo != new_importo || old_conto != new_conto) { @@ -1297,7 +1298,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa const real new_ritenute(new_pag.get(PAGSCA_RITENUTE)); if (old_ritenute != new_ritenute) { - TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute); + const TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute); const int riga = type2pos(cgrowtype_ritfis); if (riga < 0) @@ -1318,7 +1319,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa const real new_ritsoc(new_pag.get(PAGSCA_RITSOC)); if (old_ritsoc != new_ritsoc) { - TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc); + const TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc); const int riga = type2pos(cgrowtype_ritsoc); if (riga < 0) diff --git a/src/cg/cg2300.cpp b/src/cg/cg2300.cpp index dab8ffdc3..f772a5f6c 100644 --- a/src/cg/cg2300.cpp +++ b/src/cg/cg2300.cpp @@ -8,6 +8,7 @@ #include "mov.h" #include #include "rmov.h" +#include #include "pconti.h" #define INI_ANNO "riep_anno" @@ -22,15 +23,18 @@ class TCompetenze_mask : public TAutomask int s_conto; real importo; }; - - TString_array _regs; - + std::vector _regs; + std::vector _conts; const char* get_ini(bool dataini) const; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; - + // Funzione becera di ordinamento del vettore _conts + void sort_conts(bool sort_by_imp = true); + static void swap_items(cont_contr_t* it, cont_contr_t* jt); + static bool is_minor_of(cont_contr_t* jt, cont_contr_t* it); + static TString get_descr(int gruppo, int conto, int s_conto); void fill_contc(); void fill(); @@ -46,44 +50,6 @@ const char* TCompetenze_mask::get_ini(bool dataini) const return ini_get_string(CONFIG_DITTA, "cg", INI_MESE, ""); } - -static bool __sort_by_imp = false; - -static int sort_sheet(TSheet_field & s, int r1, int r2) -{ - int ret = 0; - - if (__sort_by_imp) - { - const real i1 = s.get_real_row_cell(r1, F_TOTCONTC); - const real i2 = s.get_real_row_cell(r2, F_TOTCONTC); - - if (i1 > i2) - ret = 1; - else - if (i2 > i1) - ret = -1; - } - else - { - ret = s.get_int_row_cell(r1, F_GRPCONTC) - s.get_int_row_cell(r2, F_GRPCONTC); - if (ret == 0) - ret = s.get_int_row_cell(r1, F_NUMCONTC) - s.get_int_row_cell(r2, F_NUMCONTC); - if (ret == 0) - { - const long s1 = s.get_long_row_cell(r1, F_SOTCONTC); - const real s2 = s.get_long_row_cell(r2, F_SOTCONTC); - - if (s1 > s2) - ret = 1; - else - if (s2 > s1) - ret = -1; - } - } - return ret; -} - bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) @@ -110,16 +76,6 @@ bool TCompetenze_mask::on_field_event(TOperable_field& o, TField_event e, long j case F_ANNO: if (e == fe_init) set(F_ANNO, get_ini(true)); break; - case F_ORDIN: - if (e == fe_init || e == fe_modify) - { - TSheet_field& sf = sfield(F_CONTC); - - __sort_by_imp = o.get_bool(); - sf.sort(sort_sheet); - sf.force_update(); - } - break; case F_MESE: if (e == fe_init) set(F_MESE, get_ini(false)); @@ -139,66 +95,100 @@ TString TCompetenze_mask::get_descr(int gruppo, int conto, int s_conto) return pcont.get(PCN_DESCR); } +bool TCompetenze_mask::is_minor_of(cont_contr_t* jt, cont_contr_t* it) +{ + return jt->gruppo < it->gruppo + || (jt->gruppo == it->gruppo && jt->conto < it->conto) + || (jt->gruppo == it->gruppo && jt->conto == it->conto + && jt->s_conto < it->s_conto); +} + +void TCompetenze_mask::swap_items(cont_contr_t* it, cont_contr_t* jt) +{ + const cont_contr_t appo = *it; + *it = *jt; + *jt = appo; +} + +void TCompetenze_mask::sort_conts(bool sort_by_imp) +{ + // Sopra 100 rischia di essere leggermente lento? + if (1 < _conts.size() && _conts.size() < 100) + for (auto it = _conts.begin(); it != _conts.end(); ++it) + for (auto jt = (it+1); jt != _conts.end(); ++jt) + if (sort_by_imp && jt->importo > it->importo || !sort_by_imp && is_minor_of(&(*jt), &(*it))) + swap_items(&(*it), &(*jt)); +} + void TCompetenze_mask::fill_contc() { TSheet_field& sf = sfield(F_CONTC); - TAssoc_array conti; - real tot; + TLocalisamfile rmovs(LF_RMOV); + sf.hide(); sf.reset(); + _conts.clear(); // Per ogni registrazione - FOR_EACH_ARRAY_ITEM(_regs, i, obj) + for (int i = 0; i < (int)_regs.size(); ++i) { - const long numreg = atol(STRING_TOKEN(obj)); - const TMovimento_contabile mov(numreg); - const TCausale & caus = cached_causale(mov.get(MOV_CODCAUS)); - const int rows = mov.cg_rows(); - - // Per ogni riga della registrazione - for (int r = mov.is_IVA() ? 2 : 1; r <= rows; r++) + const int numreg = _regs[i]; + rmovs.zero(); + rmovs.put(RMV_NUMREG, numreg); + rmovs.put(RMV_NUMRIG, 0); + int riga = 0; + if (rmovs.read()) { - const TRectype & rmov = mov.cg(r); - const int gruppo = rmov.get_int(RMV_GRUPPO); - const int numcontc = rmov.get_int(RMV_CONTO); - const int s_conto = rmov.get_int(RMV_SOTTOCONTO); - const TString& tipocc = rmov.get(RMV_TIPOC); - const real importo = rmov.get_real(RMV_IMPORTO); - TString key; - - key.format("%03d|%03d|%06d", gruppo, numcontc, s_conto); - - if (tipocc.blank()) // Solo se il tipo di conto di contr. e' un conto, cioe' vuoto + // Per ogni riga della registrazione + for (; rmovs.get_int(RMV_NUMREG) == numreg; rmovs.next()) { - // Cerco se ho già la chiave - real * tot = (real *)conti.objptr(key); + const int gruppo = rmovs.get_int(RMV_GRUPPOC); + const int numcontc = rmovs.get_int(RMV_CONTOC); + const int s_conto = rmovs.get_int(RMV_SOTTOCONTOC); + const TString& tipocc = rmovs.get(RMV_TIPOCC); + const real importo(rmovs.get(RMV_IMPORTO)); - if (tot == nullptr) - conti.add(key, tot = new real); - *tot += importo; + if (tipocc.blank()) // Solo se il tipo di conto di contr. e' un conto, cioe' vuoto + { + // Cerco se ho già la chiave + auto it = _conts.begin(); + for (; it != _conts.end(); ++it) + { + if (it->gruppo == gruppo + && it->conto == numcontc + && it->s_conto == s_conto) + break; + } + + if (it != _conts.end()) + it->importo += importo; + else + _conts.insert(_conts.end(), { gruppo, numcontc, s_conto, importo }); + } } } } - - FOR_EACH_ASSOC_OBJECT(conti, i, k, o1) - { - TToken_string key = k; - const int gruppo = key.get_int(0); - const int conto = key.get_int(0); - const int s_conto = key.get_long(2); + + sort_conts(get(F_ORDIN) == "X"); + + real tot; tot = 0; + for (auto it = _conts.begin(); it != _conts.end(); ++it) + { + const int gruppo = it->gruppo; + const int conto = it->conto; + const int s_conto = it->s_conto; const TString& descr = get_descr(gruppo, conto, s_conto); - const real importo = *(real *)o1; - int r = sf.set_row_cell(F_GRPCONTC, gruppo); - sf.set_row_cell(F_NUMCONTC, conto, r); - sf.set_row_cell(F_SOTCONTC, s_conto, r); - - sf.set_row_cell(F_DESCRCON, descr, r); - sf.set_row_cell(F_TOTCONTC, importo, r); - tot += importo; + TToken_string& row = sf.row(-1); + row.add(gruppo); + row.add(conto); + row.add(s_conto); + row.add(descr); + row.add(it->importo); + tot += it->importo; } - sf.sort(sort_sheet); - sf.force_update(); + sf.force_update(); + sf.show(); set(F_TOT, tot); } @@ -208,42 +198,42 @@ void TCompetenze_mask::fill() const int anno = get_int(F_ANNO); const int mese = get_int(F_MESE); TSheet_field& sf = sfield(F_MOVS); - TRectype from(LF_MOV); - TRectype to(LF_MOV); - TDate data(1, mese, anno); - - from.put(MOV_DATAREG, data); - data.set_end_month(); - to.put(MOV_DATAREG, data); - - TCursor c(new TRelation(LF_MOV), "", 2, &from, &to); - const int items = c.items(); + TLocalisamfile movs(LF_MOV); + sf.hide(); sf.reset(); - _regs.destroy(); - for (c = 0L; c.pos() < items; ++c) + _regs.clear(); + movs.setkey(2); + + const TDate dataini(1, mese, anno); + TDate dataend(dataini); dataend.set_end_month(); + movs.put(MOV_DATAREG, dataini); + if (movs.read() != NOERR) { - const TRectype & mov = c.curr(); - const int month_liq = mov.get_int(MOV_MESELIQ); - const TDate datareg(mov.get(MOV_DATAREG)); - const TDate datacomp(mov.get(MOV_DATACOMP)); - - if (month_liq != 0) + for (; movs.next() == NOERR && movs.get_date(MOV_DATAREG) <= dataend; ) { - _regs.add(mov.get(MOV_NUMREG)); + const int month_liq = movs.get_int(MOV_MESELIQ); + const TDate datareg(movs.get(MOV_DATAREG)); + const TDate datacomp(movs.get(MOV_DATACOMP)); - int r = sf.set_row_cell(F_NUMREG, mov.get(MOV_NUMREG)); + if (month_liq != 0) + { + _regs.insert(_regs.end(), movs.get_int(MOV_NUMREG)); - sf.set_row_cell(F_DATAREG, mov.get_date(MOV_DATAREG), r); - sf.set_row_cell(F_DATADOC, mov.get_date(MOV_DATADOC), r); - sf.set_row_cell(F_CODCAUS, mov.get(MOV_CODCAUS), r); - sf.set_row_cell(F_MESELIQ, month_liq, r); - sf.set_row_cell(F_NUMDOC, mov.get(MOV_NUMDOC), r); - sf.set_row_cell(F_PROTIVA, mov.get(MOV_PROTIVA), r); - sf.set_row_cell(F_DESCR, mov.get(MOV_DESCR), r); + TToken_string& row = sf.row(-1); + row.add(movs.get(MOV_NUMREG)); + row.add(datareg); + row.add(movs.get(MOV_DATADOC)); + row.add(TCausale(movs.get(MOV_CODCAUS)).tipo_doc()); + row.add(month_liq); + row.add(movs.get(MOV_NUMDOC)); + row.add(movs.get(MOV_PROTIVA)); + row.add(movs.get(MOV_DESCR)); + } } } sf.force_update(); + sf.show(); fill_contc(); } diff --git a/src/cg/cg2300a.uml b/src/cg/cg2300a.uml index 76f127352..a0ca4e472 100644 --- a/src/cg/cg2300a.uml +++ b/src/cg/cg2300a.uml @@ -118,7 +118,7 @@ END NUMBER F_MESELIQ 2 BEGIN - PROMPT 1 5 "Mese Liq." + PROMPT 1 5 "Causale " FLAGS "D" END diff --git a/src/cg/cg3100.cpp b/src/cg/cg3100.cpp index a464d73d0..93cbb523d 100755 --- a/src/cg/cg3100.cpp +++ b/src/cg/cg3100.cpp @@ -68,8 +68,7 @@ class TListaMov_application : public TPrintapp int _ricser; bool _settata_prima_riga, _causale_gia_stampata,_mov_di_sola_iva; int _cur1,_cur2,_cur2b,_cur3,_cur4,_decidi,/*_tipod,*/_controllo_mov_errati; - int _numero_riga, _alleg, _scelta_stampa, _nr, _n; - tiporeg _tiporegistro; + int _numero_riga, _alleg, _tiporegistro, _scelta_stampa, _nr, _n; int _provvis; liste _tipo_lista; word _flags; @@ -482,11 +481,11 @@ bool TListaMov_application::filter_func_fatture (const TRelation* rel) const int ann_reg = mov.get_int(MOV_ANNOIVA); const TString4 cod_reg = mov.get(MOV_REG); - const tiporeg tipo_reg = cached_registro(cod_reg, ann_reg).tipo_registro(); + const int tipo_reg = tipo_registro(cod_reg, ann_reg); // Considera solo iva acquisti o vendite - if (tipo_reg != vendita && tipo_reg != acquisto) - return false; + if (tipo_reg != 1 && tipo_reg != 2) + return FALSE; if (app()._annoes > 0) //anno esercizio specificato nella maschera { @@ -537,10 +536,8 @@ bool TListaMov_application::filter_func (const TRelation * rel) { const TString& cod_reg = mov.get(MOV_REG); const int ann_reg = mov.get_int(MOV_ANNOIVA); - const tiporeg tipo_reg = cached_registro(cod_reg, ann_reg).tipo_registro(); - - // Considera solo iva acquisti o vendite - if (tipo_reg != vendita && tipo_reg != acquisto) + const int tipo_reg = tipo_registro(cod_reg, ann_reg); + if (tipo_reg == 1 || tipo_reg == 2) return false; } @@ -629,10 +626,9 @@ void TListaMov_application::stampa_errori_rmov() else set_row(_nr++, FR("@11gCodice C/F non presente in Anagrafica")); if (_registro.not_empty()) //se su mov e' indicato il codice registro { - const TRegistro & reg = cached_registro(_registro, _ae); - const tiporeg tipo = reg.tipo_registro(); - - if ((tipo == vendita && t != 'C') || (tipo == acquisto && t != 'F')) + TRegistro rg (_registro, _ae); + const int tiporeg = rg.tipo(); + if ((tiporeg == 1 && t != 'C') || (tiporeg == 2 && t != 'F')) set_row(_nr++, FR("@11gTipo C/F non compatibile con tipo registro")); } } @@ -719,14 +715,14 @@ void TListaMov_application::stampa_errori_iva(int* nr, const TRigaiva& riva) const int tipocr = riva._tipocr; if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9) - if (_tiporegistro != acquisto) + if (_tiporegistro != 2) set_row(++(*nr), FR("@11gCodice di indetraibilita' errato")); - if (_tiporegistro == vendita) + if (_tiporegistro == 1) if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9) set_row(++(*nr), FR("@11gTipo costo/ricavo non valido")); - if (_tiporegistro == acquisto) + if (_tiporegistro == 2) if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9) set_row(++(*nr), FR("@11gTipo costo/ricavo non valido")); } @@ -786,11 +782,11 @@ void TListaMov_application::set_page(int file, int count) TString16 reg = current_cursor()->curr(LF_MOV).get(MOV_REG); int anno = current_cursor()->curr(LF_MOV).get_int(MOV_ANNOIVA); char prov = current_cursor()->curr(LF_MOV).get_char(MOV_PROVVIS); - const tiporeg tipo = cached_registro(reg, anno).tipo_registro(); + int tipo = tipo_registro(reg, anno); + TEsercizi_contabili esc; - esc.date2esc(data); // qui verificare - if ( (tipo == vendita) || (tipo == acquisto) ) + if ( (tipo == 1) || (tipo == 2) ) { set_row (_n, FR("@103greg @3s"),FLD(LF_MOV,MOV_REG)); set_row (_n, FR("@111gpr @5n"),FLD(LF_MOV,MOV_PROTIVA)); @@ -864,8 +860,7 @@ bool TListaMov_application::preprocess_page(int file,int counter) _codcf = curmov.get_long(MOV_CODCF); _numero = curmov.get_long(MOV_NUMREG); _codval = curmov.get(MOV_CODVALI); - _tiporegistro = cached_registro(_registro, _anno).tipo_registro(); - + _tiporegistro = tipo_registro(_registro, _anno); _causale_gia_stampata = FALSE; TEsercizi_contabili esc; @@ -992,9 +987,11 @@ bool TListaMov_application::preprocess_page(int file,int counter) _descr_causale = caus.get(CAU_DESCR); _alleg_causale = caus.get_bool(CAU_ALLEG); _tipodocumento = caus.get(CAU_TIPODOC); - _tiporegistro = cached_registro(_registro, _anno).tipo_registro(); - if ((_tiporegistro != vendita) && (_tiporegistro != acquisto))//se si tratta di un movimento di sola prima nota - return true; + + _tiporegistro = tipo_registro (_registro, _anno); + + if ((_tiporegistro != 1)&&(_tiporegistro != 2))//se si tratta di un movimento di sola prima nota + return TRUE; } } else if (file == LF_RMOV) @@ -1041,10 +1038,10 @@ bool TListaMov_application::preprocess_page(int file,int counter) _numr = curmov.get_long(MOV_NUMREG); _tipo_elenco = curmov.get(MOV_TIPO); _codcf = curmov.get_long(MOV_CODCF); - const tiporeg tiporeg = cached_registro(codreg, anno).tipo_registro(); - const TString8 attreg = cached_registro(codreg, anno).attivita(); + const int tiporeg = tipo_registro (codreg, anno); + const TString8 attreg = AttivitaRegistro (codreg, anno); - if (tiporeg == vendita || tiporeg == acquisto)//se si tratta di un movimento iva + if (tiporeg == 1 || tiporeg == 2)//se si tratta di un movimento iva { _tipoatt = TipoAttivita(attreg, get_firm()); _tipo_elenco = curmov.get(MOV_TIPO); @@ -1873,18 +1870,18 @@ bool TListaMov_application::segnala_errori_iva() return true; } if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9) - if (_tiporegistro != acquisto) + if (_tiporegistro != 2) { rmoviva.readat(nrec); return true; } - if (_tiporegistro == vendita) + if (_tiporegistro == 1) if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9) { rmoviva.readat(nrec); return true; } - if (_tiporegistro == acquisto) + if (_tiporegistro == 2) if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9) { rmoviva.readat(nrec); diff --git a/src/cg/cg3300.cpp b/src/cg/cg3300.cpp index d57bc2739..36182580b 100755 --- a/src/cg/cg3300.cpp +++ b/src/cg/cg3300.cpp @@ -25,7 +25,6 @@ #include "cg3.h" #include "cg3300.h" -#include "cglib.h" #include "cg3300a.h" #include "cg3300b.h" @@ -470,19 +469,18 @@ void TStampa_allegati::ricalcola(int anno_dic) { pi.addstatus(1); - const tiporeg tipo = cached_registro(reg).tipo_registro(); - - if ((tipo != acquisto) && (tipo != vendita)) + const int tiporeg = reg.get_int("I0"); + if ((tiporeg != 2) && (tiporeg != 1)) continue; - if (tiporeg == vendita) + if (tiporeg == 1) { - if (cached_registro(reg).sospeso()) - continue; - vendite = true; + bool sosp = reg.get_bool ("B0"); + if (sosp) continue; + vendite = TRUE; } else - vendite = false; + vendite = FALSE; tipodoc = cau.get (CAU_TIPODOC); if (corrispettivo (tipodoc)) diff --git a/src/cg/cg3700.cpp b/src/cg/cg3700.cpp index 721fed667..7978e2593 100755 --- a/src/cg/cg3700.cpp +++ b/src/cg/cg3700.cpp @@ -84,6 +84,7 @@ class TLista_fatture : public TPrintapp protected: long select_firm_range(long from, long to); + int tiporeg(const TString& ); static bool mix_handler(TMask_field&, KEY); static bool date_handler(TMask_field&, KEY); static bool to_ditt_handler(TMask_field&, KEY); @@ -116,6 +117,12 @@ public: inline TLista_fatture& app() { return (TLista_fatture&) main_app(); } +int TLista_fatture::tiporeg(const TString& reg) +{ + TString8 s; s.format("%4d%-3s",_date_from.year(),(const char*)reg); + return atoi(cache().get("REG", s, "I0")); +} + bool TLista_fatture::filter_func1(const TRelation *r) { TLista_fatture& a = app(); @@ -137,8 +144,8 @@ bool TLista_fatture::filter_func1(const TRelation *r) if (riv.get(RMI_TIPODET).blank() || percind.is_zero()) return false; - const tiporeg tipo = cached_registro(rg).tipo_registro(); - if (tipo != acquisto) + const int tiporeg = a.tiporeg(rg); + if (tiporeg != 2) return false; } else // Tipo costo/ricavo @@ -436,9 +443,8 @@ bool TLista_fatture::preprocess_page(int file, int counter) if (_tipo == intra) { TString4 codiva = rec.get(RMI_CODIVA); - const tiporeg tipomov = cached_registro(mov.get(MOV_REG)).tipo_registro(); - - if (tipomov == acquisto && tipodet == 9) + const int tipomov = tiporeg(mov.get(MOV_REG)); + if (tipomov == 2 && tipodet == 9) codiva = "~A19"; // Speciale per acquisti indeducibili art. 19 const bool is_key = _intra_items.is_key(codiva); // Esiste l'elemento ? // Se si' allora prendi quello, altrimenti prendine uno nuovo @@ -463,10 +469,8 @@ bool TLista_fatture::preprocess_page(int file, int counter) _tot_iva += iva; _tp_imp += imp; _tp_iva += iva; - - const tiporeg tipomov = cached_registro(mov.get(MOV_REG)).tipo_registro(); - - if (_tipo == indetraibile && tipomov == acquisto && tipodet > 0) + const int tipomov = tiporeg(mov.get(MOV_REG)); + if (_tipo == indetraibile && tipomov == 2 && tipodet > 0) { TString4 codiva = rec.get(RMI_CODIVA); _Iva_item * iva_row = (_Iva_item *) _indetr.objptr(codiva); diff --git a/src/cg/cg4100.cpp b/src/cg/cg4100.cpp index f39d92366..7719a25b1 100755 --- a/src/cg/cg4100.cpp +++ b/src/cg/cg4100.cpp @@ -24,7 +24,7 @@ #include #include -#include "cglib.h" +#include "cglib02.h" struct therec { @@ -89,7 +89,7 @@ bool CG4100_App::sort_sal() sal.set_anno_es(year); sal.clear_saldi(year); long numreg = 0L; - tiposal tsal = saldo_normale; + tiposal tsal = normale; char provvis; TDate datareg; @@ -127,11 +127,20 @@ bool CG4100_App::sort_sal() mov.put(MOV_NUMREG, numreg); mov.read(); CHECK(mov.good(),"Archivi movimenti e righe inconsistenti"); - const TString& codcaus = mov.get(MOV_CODCAUS); - tsal = saldo_normale; // Tipo saldo normale per default - if(codcaus.full()) - tsal = cached_causale(codcaus, year).tipo_saldo(); + // Tipo saldo normale per default + tsal = normale; + const TString& codcaus = mov.get(MOV_CODCAUS); + const TRectype& causale = cache().get(LF_CAUSALI, codcaus); + if (!causale.empty()) + { + const char ac = causale.get_char(CAU_MOVAP); + if (ac == 'A') + tsal = apertura; else + if (ac == 'C') + tsal = chiusura; + } + scaricato = mov.get_bool(MOV_SCARCON); provvis = mov.get_char(MOV_PROVVIS); datareg = mov.get_date(MOV_DATAREG); diff --git a/src/cg/cg4300.cpp b/src/cg/cg4300.cpp index f3980cc42..79b104bf5 100755 --- a/src/cg/cg4300.cpp +++ b/src/cg/cg4300.cpp @@ -208,6 +208,7 @@ bool TLiquidazione_app::user_create() _lam = new TTable("LAM"); _pla = new TTable("%PLA"); _reg = new TTable("REG"); + _iva = new TTable("%IVA"); _del = new TTable("%DEL"); _mov = &_cur->file(LF_MOV); @@ -224,6 +225,7 @@ bool TLiquidazione_app::user_create() _pum_r = &(_pum->curr()); _pam_r = &(_pam->curr()); _pom_r = &(_pom->curr()); + _iva_r = &(_iva->curr()); _del_r = &(_del->curr()); _lam_r = &(_lam->curr()); _pla_r = &(_pla->curr()); diff --git a/src/cg/cg4300.h b/src/cg/cg4300.h index 642eee98b..a9b1f7207 100755 --- a/src/cg/cg4300.h +++ b/src/cg/cg4300.h @@ -338,6 +338,7 @@ class TLiquidazione_app : public TPrint_application TTable* _pla; TTable* _ppa; TTable* _reg; + TTable* _iva; TTable* _del; // a reference rectype per file/table @@ -345,6 +346,7 @@ class TLiquidazione_app : public TPrint_application TRectype* _rmoviva_r; TRectype* _pcon_1_r; TRectype* _pcon_2_r; + TRectype* _iva_r; TRectype* _pim_r; TRectype* _pis_r; TRectype* _prm_r; @@ -620,7 +622,7 @@ public: bool look_pla(const char* a, bool create = false); bool look_ppa(int m, const char* a, int t, bool create = false); bool look_del(int month, int type, bool create = false); -// bool look_iva(const char* cod); + bool look_iva(const char* cod); bool look_reg(const char* reg); const TRectype & get_lia(long ditta = 0l, bool create = false, int anno = 0); const int put_lia(const TRectype & lia, bool re = true); diff --git a/src/cg/cg4301.cpp b/src/cg/cg4301.cpp index 8dbb5ec89..828a1984e 100755 --- a/src/cg/cg4301.cpp +++ b/src/cg/cg4301.cpp @@ -338,7 +338,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) TString8 cattiv(codatt); cattiv << tipoatt; - const bool waspla = look_pla(cattiv, has_single_activity); + const bool waspla = look_pla(cattiv); // perchè sta cosa ) , has_single_activity); if (!waspla) break; // Non calcolare attività inesistenti 29-11-2012 @@ -1450,7 +1450,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & real nin_iva = ZERO; // imposta non incassati const TString4 codiva = _rmoviva->get(RMI_CODIVA); - const TCodiceIVA& civa = cached_codIVA(codiva); + TCodiceIVA civa(codiva); #ifdef DBG BREAK_DBG; @@ -1466,16 +1466,17 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & continue; } - const TString4 tipoiva = civa.tipo(); - const TString4 tipoes_v = civa.IVA11_vendite(); - const TString4 tipoes_a = civa.IVA11_acquisti(); - const int tipoagr = civa.tipo_IVA_agricola(); // 2/9/2015 was S4 - const int tipoag = civa.tipo_agenzie_viaggio(); - const int tipopla = civa.tipo_plafond(); - int isrimbinfr = civa.codice_rimborso_infrannuale(); // vale per calcolo rimborso se ES o NI - const real perciva = civa.moltiplicatore_percentuale(); - int ivarimb = !civa.escluso_dal_rimborso(); // non escluso calcolo rimb. per al. media - const bool den_prorata = civa.tipo_IVA_agricola(); // denominatore prorata nel caso di calcolo pro rata con numeratore e denominatore + look_iva(codiva); // da eliminare esso per evitare un problema di non lettura _iva ve eliminato + const TString4 tipoiva = _iva->get("S1"); + const TString4 tipoes_v = _iva->get("S2"); + const TString4 tipoes_a = _iva->get("S9"); + const int tipoagr = _iva->get_int("I4"); // 2/9/2015 was S4 + const int tipoag = _iva->get_int("S5"); + const int tipopla = _iva->get_int("S3"); + int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI + const real perciva = _iva->get_real("R0") / CENTO; + int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media + const bool den_prorata = _iva->get_bool("B7"); // denominatore prorata nel caso di calcolo pro rata con numeratore e denominatore const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR); const int tipocr = atoi(tipocr_s); @@ -1558,7 +1559,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & sezfat = tipomov == vendita ? 'D' : 'A'; - if (is_detr_diff == 1 || civa.iva_non_soggetta()) + if (is_detr_diff == 1 || civa.tipo() == "NS") continue; if (bIsMovDiff && tm == tm_fattura) { @@ -2220,10 +2221,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & if (_pcon_1_r->get_int(PCN_INDBIL) == 4) if (_cur->is_first_match(-AGR_PCON2)) // Esiste il sottoconto ? { - const TCodiceIVA & civa = cached_codIVA(_pcon_2_r->get(PCN_IVACOMP)); - - if (civa.ok()) - ivacomp = civa.codice(); // Ecco il codice IVA di compensazione + if (look_iva(_pcon_2_r->get(PCN_IVACOMP))) + ivacomp = _iva->get("CODTAB"); // Ecco il codice IVA di compensazione } look_pia(month, codatt, codiva, ivacomp, true); // Crea il record in tabella se non esiste real pia_imp = _pia->get_real("R0") + agr_imp; // Aggiorna... @@ -2728,10 +2727,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & if (_pim->get_bool("B4")) { // ricalcola l'imposta a partire dal codice IVA - const TCodiceIVA & civa = cached_codIVA(*_pim_codiva); - const real old_iva = _pim->get_real("R1"); - real new_iva = _pim->get_real("R0") * civa.moltiplicatore_percentuale(); + look_iva(*_pim_codiva); + real old_iva = _pim->get_real("R1"); + real perc = _iva->get_real("R0"); + real new_iva = _pim->get_real("R0") * perc / CENTO; round_al_centesimo(new_iva); if (new_iva != old_iva) @@ -2759,9 +2759,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & if (_pia->get_bool("B0")) { // calcola l'imposta a partire dal codice IVA di compensazione - const TCodiceIVA & civa = cached_codIVA(*_pia_codcom); - real iva = _pia->get_real("R0") * civa.moltiplicatore_percentuale(); - + look_iva(*_pia_codcom); + real perc = _iva->get_real("R0"); + + real iva = _pia->get_real("R0") * perc / CENTO; round_al_centesimo(iva); agr_detIA += iva; _pia->put("R1",iva); @@ -2993,14 +2994,12 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt) if (is_split_payment(_mov->curr())) imposta = ZERO; - - const TCodiceIVA & civa = cached_codIVA(_rmoviva->get(RMI_CODIVA)); - const TString4 codiva = civa.codice(); - const TString4 tipoiva = civa.tipo(); - const real ali = civa.percentuale(); - const TString4 tipoes_v = civa.IVA11_vendite(); - const TString4 tipoes_a = civa.IVA11_acquisti(); - const int tipoagr = civa.tipo_IVA_agricola(); // 2/9/2015 was S4 + const TString4 codiva = _iva->get("CODTAB"); + const TString4 tipoiva = _iva->get("S1"); + const real ali = _iva->get_real("R0"); + const TString4 tipoes_v = _iva->get("S2"); + const TString4 tipoes_a = _iva->get("S9"); + const int tipoagr = _iva->get_int("I4"); // 2/9/2015 was S4 const TRectype& rcs = _cur->curr(LF_CAUSALI); const bool autofattura = rcs.get_bool("AUTOFATT"); const bool valintra = rcs.get_bool("VALINTRA"); @@ -3380,17 +3379,14 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt) // Must consider current activity too... codiva = *_pim_codiva; reg = *_pim_codreg; - - const TCodiceIVA & civa = cached_codIVA(codiva); - - look_reg(reg); // posiziona la tabella registri e quella IVA - tiva = civa.tipo(); // tipo IVA - tpla = civa.tipo_plafond(); // tipo gestione plafond - tagr = civa.tipo_IVA_agricola(); // tipo gestione regime agricolo 2/9/2015 was S4 - tvia = civa.tipo_agenzie_viaggio(); // tipo gestione ag. viaggio - v11 = civa.IVA11_vendite(); // n.ro riga vendite per mod. IVA11 - a11 = civa.IVA11_acquisti(); // n.ro riga acquisti per mod. IVA11 - aliq = civa.percentuale(); // aliquota + look_iva(codiva); look_reg(reg); // posiziona la tabella registri e quella IVA + tiva = _iva->get("S1"); // tipo IVA + tpla = _iva->get("S3"); // tipo gestione plafond + tagr = _iva->get_int("I4"); // tipo gestione regime agricolo 2/9/2015 was S4 + tvia = _iva->get("S5"); // tipo gestione ag. viaggio + v11 = _iva->get("S2"); // n.ro riga vendite per mod. IVA11 + a11 = _iva->get("S9"); // n.ro riga acquisti per mod. IVA11 + aliq = _iva->get_real("R0"); // aliquota treg = (tiporeg)_reg->get_long("I0"); const bool is_vendita = treg == vendita; const bool is_acquisto = treg == acquisto; @@ -3488,7 +3484,7 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt) _CorrItem& ca = (_CorrItem&) corr_ann[codiva]; ca._totale += lor; if (!is_present) - ca._aliquota = civa.percentuale(); // Se e' nuovo setta l'aliquota + ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota } tt = _pim->get("S0"); @@ -4545,10 +4541,8 @@ void TLiquidazione_app::recalc_annual(const char* att, bool & first) const int tipocr = atoi(*_pim_tipocr); codiva = *_pim_codiva; reg = *_pim_codreg; - const TCodiceIVA & civa = cached_codIVA(codiva); - - look_reg(reg); - tiva = civa.tipo(); + look_iva(codiva); look_reg(reg); + tiva = _iva->get("S1"); const TRegistro & reg = cached_registro(_reg->curr()); const tipo_sospensione simp = reg.sospensione(); @@ -4579,7 +4573,7 @@ void TLiquidazione_app::recalc_annual(const char* att, bool & first) _CorrItem& ca = (_CorrItem&)corr_ann[codiva]; ca._totale += _pim->get_real("R3"); if (!is_key) // se non c'e' lo aggiunge - ca._aliquota = civa.moltiplicatore_percentuale(); // Se è nuovo setta l'aliquota + ca._aliquota = _iva->get_real("R0") / CENTO; // Se è nuovo setta l'aliquota } if (tipoatt == 1) volaff1 += imp_ifs; diff --git a/src/cg/cg4302.cpp b/src/cg/cg4302.cpp index 1e45fa0c8..1d947d1d3 100755 --- a/src/cg/cg4302.cpp +++ b/src/cg/cg4302.cpp @@ -554,7 +554,8 @@ bool TLiquidazione_app::look_pla(const char* a, bool create) (*_pla_codatt) = buf; const TString16 s = _pla_r->get("CODTAB"); - bool ok = _pla->read() == NOERR; + const int err = _pla->read(); + bool ok = err == NOERR; if (!ok && create) { _pla->zero(); @@ -583,7 +584,6 @@ bool TLiquidazione_app::look_reg(const char* reg) return rt; } -/* bool TLiquidazione_app::look_iva(const char* cod) { bool rt = true; @@ -604,7 +604,6 @@ bool TLiquidazione_app::look_iva(const char* cod) return rt; } -*/ bool TLiquidazione_app::look_ppa(int month, const char* codatt, int type, bool create) { @@ -983,10 +982,8 @@ real TLiquidazione_app::aliquota_agvia() { real r; const TString& codagv = ini_get_string(CONFIG_STUDIO, "cg", "CodAgv"); - const TCodiceIVA & civa = cached_codIVA(codagv); - - if (civa.ok()) // Controlla se è vuoto! CM600475 - r = civa.percentuale(); + if (codagv.full() && look_iva(codagv)) // Controlla se è vuoto! CM600475 + r = _iva->get_real("R0"); return r; } diff --git a/src/cg/cg4303.cpp b/src/cg/cg4303.cpp index 0fb74019b..d521bc851 100755 --- a/src/cg/cg4303.cpp +++ b/src/cg/cg4303.cpp @@ -95,13 +95,10 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) vaf += imponibile; _pam->put("R1", vaf); _pam->rewrite(); - // Aggiorna il totale IVA periodica CD1_1 - const TCodiceIVA & civa = cached_codIVA(ci->_codiva); - - if (month == 13 && civa.ok()) + if (month == 13 && look_iva(ci->_codiva)) { - if (civa.tipo_comunicazione_attive().full()) // Solo CD1_1 ha senso coi corrispettivi... + if (_iva->get("S10").not_empty()) // Solo CD1_1 ha senso coi corrispettivi... { _pum->curr().add("R14", imponibile); // CD1_1 _pum->rewrite(); @@ -145,11 +142,12 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) int tipocr = atoi(*_pim_tipocr); int mese = atoi(*_pim_mese); int tipodet = atoi(*_pim_tipodet); - const TCodiceIVA & civa = cached_codIVA(*_pim_codiva); + look_iva(*_pim_codiva); // base di riparto solo se non esente, non soggetto, non imponibile - TString16 tipoiva(civa.tipo()); + TString16 tipoiva(_iva->get("S1")); TString16 reg = *_pim_codreg; + /* * caso particolare SENSU Vladimiro (1995) #MI3001 * questi vengono pero' conteggiati nel totale @@ -163,15 +161,18 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) if (tipocr == 1 && (mese == m) && att == (const char*)(*_pim_codatt)) { - if (civa.iva_da_ventilare()) + if (tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES") { real lurd = _pim->get_real("R0"); lurd += _pim->get_real("R1"); - real perc = civa.percentuale(); - TString other = civa.iva_a_cui_ventilare(); - - if (other.full()) - perc = cached_codIVA(other).percentuale(); // ventila a un altro codice + real perc = _iva->get_real("R0"); + TString other = _iva->get("S6"); + if (!other.empty()) + { + // ventila a un altro codice + look_iva(other); + perc = _iva->get_real("R0"); + } add_ventilation(perc / CENTO, lurd, *_pim_codiva, other); } } @@ -340,11 +341,9 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) _pam->rewrite(); // Aggiorna il totale IVA periodica CD1_1 - const TCodiceIVA & civa = cached_codIVA(vv->_codiva); - - if (month == 13 && civa.ok()) + if (month == 13 && look_iva(vv->_codiva)) { - if (civa.get("S10").full()) // Solo CD1_1 ha senso coi corrispettivi + if (_iva->get("S10").not_empty()) // Solo CD1_1 ha senso coi corrispettivi { _pum->curr().add("R14", imponibile); // CD1_1 _pum->rewrite(); @@ -365,10 +364,9 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) // viene amorosamente messo a quanto il codice IVA prevede if (!was) { - const TCodiceIVA & civa = cached_codIVA((vv->_codiva)); - + look_iva(vv->_codiva); _pim->put("I1", (long)vendita); - if (!civa.escluso_dal_rimborso()) + if (!_iva->get_bool("B4")) _pim->put("B3", "X"); } _pim->rewrite(); @@ -535,8 +533,8 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, if (!_pim->get_bool("B3")) continue; // Se il tipo di codice e' NS non va considerato nella sommatoria del tot. acquisti - const TCodiceIVA & civa = cached_codIVA(codiva); - const bool non_sogg = civa.iva_non_soggetta(); + look_iva(codiva); + const bool non_sogg = _iva->get("S1") == "NS"; if (!is_mens) // Trimestrali { @@ -567,7 +565,7 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, ca._totale += _pim->get_real("R3"); if (!is_key) // se non c'e' lo aggiunge { - ca._aliquota = civa.moltiplicatore_percentuale(); // Se e' nuovo setta l'aliquota + ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota corr_ann.add(codiva,ca); } } diff --git a/src/cg/cg4304.cpp b/src/cg/cg4304.cpp index fe6386e0d..802b36f0a 100755 --- a/src/cg/cg4304.cpp +++ b/src/cg/cg4304.cpp @@ -286,7 +286,7 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt) continue; look_reg(*_pim_codreg); - const TCodiceIVA & civa = cached_codIVA(*_pim_codiva); + look_iva(*_pim_codiva); int tipocr = atoi(*_pim_tipocr); int tipodet = atoi(*_pim_tipodet); @@ -295,7 +295,7 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt) real imponibile = _pim->get_real("R0"); real imposta = _pim->get_real("R1"); tiporeg tipomov = (tiporeg)_reg->get_long("I0"); - TString4 tipoiva = civa.tipo(); + TString4 tipoiva = _iva->get("S1"); if (_year != *_pim_anno || (month == 13 && mese < 13)) continue; @@ -564,19 +564,28 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool continue; TString4 codiva = codtab.mid(16,4); codiva.trim(); - const TCodiceIVA & civa = cached_codIVA(codiva); - - if (!civa.ok()) + if (!look_iva(codiva)) continue; tiporeg tipomov = (tiporeg)_reg->get_int("I0"); bool corrisp = _reg->get_bool("B0"); - const TString4 tipoiva = civa.tipo(); + const TString4 tipoiva = _iva->get("S1"); const TString4 other = tab->get("S4"); TToken_string s1(tab->get("S1"), '!'); // Imponibile/iva fatture in ritardo real rit_imp(s1.get(0)); real rit_iva(s1.get(1)); + /* Perchè _pim invece di tab ? 17-10-2012 + diffimp = _pim->get_real("R26"); + diffiva = _pim->get_real("R27"); + diffincimp = _pim->get_real("R28"); + diffinciva = _pim->get_real("R29"); + + diffimp_acq = _pim->get_real("R30"); + diffiva_acq = _pim->get_real("R31"); + diffincimp_acq = _pim->get_real("R32"); + diffinciva_acq = _pim->get_real("R33"); */ + diffimp = tab->get_real("R26"); diffiva = tab->get_real("R27"); diffincimp = tab->get_real("R28"); @@ -594,10 +603,10 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool issosp |= (sosp_imp != nessuna_sospensione); // Setta il flag di presenza registri in sospensione (qualsiasi tipo: sospensione_normale, vol_affari, liquidazione) // ACHTUNG! Corrispettivi da ventileer possono ventilare ad un altro codiva; in tal caso si scrive quello if (corrisp && other.full()) + { + look_iva(other); codiva = other; - - const TCodiceIVA & civa1 = cached_codIVA(codiva); // codice IVA aggiornato per eventuale ventilazione - + } // se e' corrispettivo da ventilare non scrivo un cannolo ripieno visto che e' stato ventilato if (tipomov == vendita && tipoiva == "VE" && !describe_pis) continue; @@ -704,7 +713,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool ca._totale_vf += tab->get_real(tipoiva == "VE" ? "R2" : "R3"); if (!is_key) // se non c'e' lo aggiunge { - ca._aliquota = civa.moltiplicatore_percentuale(); // Se e' nuovo setta l'aliquota + ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota corr_ann.add(codiva,ca); } // vedi corrispettivi veri e falsi @@ -1795,9 +1804,8 @@ void TLiquidazione_app::set_pim(_DescrItem& d) rw++; else { - const TCodiceIVA & civa = cached_codIVA(d._s1); - - d._s2 = civa.get("S0"); + look_iva(d._s1); + d._s2 = _iva->get("S0"); if (d._s2.len() > 19) d._s2.cut(19); } @@ -2926,9 +2934,8 @@ void TLiquidazione_app::set_ventila(_DescrItem& d) for(i = 0; i < d._arr.items(); i++) { _vDesc& vd = (_vDesc&)d._arr[i]; - const TCodiceIVA & civa = cached_codIVA(vd._codiva); - - s0 = civa.descrizione(); s0.cut(23); + look_iva(vd._codiva); + s0 = _iva->get("S0"); s0.cut(23); set_row(row+i,"@8g%5s@17g%-23s@41g%r@68g%r@89g%r", (const char*)vd._codiva, @@ -3058,15 +3065,13 @@ void TLiquidazione_app::set_regagr(_DescrItem& d) _DescrItem& di = (_DescrItem&) agr_array[i]; if (di._flags != PROGAGR) continue; - - const TCodiceIVA & civa = cached_codIVA(di._s0); - - des = civa.descrizione(); des.cut(25); - al = civa.percentuale(); + look_iva(di._s0); + des = _iva->get("S0"); des.cut(25); + al = _iva->get_real("R0"); set_row(r,"%4s %-25s@48g%s %%", (const char*) di._s0, (const char*) des, al.string("#@,@@")); set_row(r,"@56g%r@75g%4s",&di._r0, (const char*)di._s1); - const TCodiceIVA & civa1 = cached_codIVA(di._s1); - al = civa1.percentuale(); + look_iva(di._s1); + al = _iva->get_real("R0"); set_row(r++,"@92g%s %%@100g%r", al.string("#@,@@"), &di._r1); t1 += di._r0; t2 += di._r1; diff --git a/src/cg/cg7600.cpp b/src/cg/cg7600.cpp index 9b287bfe9..6ee35f88c 100644 --- a/src/cg/cg7600.cpp +++ b/src/cg/cg7600.cpp @@ -160,16 +160,6 @@ void TQuadro_VE_recordset::load() add_value(STRING_TOKEN(imposta.objptr(aliquota)), iva); } } - else - { - const int tipocr = atoi(codtab.mid(15, 1)); // tipo costo_ricavo - - if (tipocr == 4) - { - if (int_tipo_iva11_ven == acq_ind_pass_int || int_tipo_iva11_ven == cess_amm) - add_value("VE40.1", imp); - } - } break; case acq_simp: break; @@ -195,12 +185,12 @@ void TQuadro_VE_recordset::load() break; case acq_ind_pass_int: // passaggi interni if (vendite) - add_value("VE40.1", imp); + add_value("VE40.1", iva); break; case acq_ind_art_19: // indetr. art. 19 break; case cess_amm: // cessioni amministrative - add_value("VE40.1", imp); + add_value("VE40.1", iva); break; case vend_rimborso: // vendite valide per rimborso break; @@ -261,28 +251,24 @@ void TQuadro_VE_recordset::load() } } - /* TISAM_recordset & exp = get_recordset(REP_PAART17); for (exp.move_first(); !exp.eof(); exp.move_next()) { - TString8 cod(exp.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string()); - const TCodiceIVA & codiva = cached_codIVA(cod); - const TString & aliquota = codiva.aliquota(); - const TRectype & mov = cache().get(LF_MOV, exp.get(FIELD_NAME(LF_RMOVIVA, RMI_NUMREG)).as_int()); + TString8 cod(exp.get(FIELD_NAME(LF_RMOVIVA, RMI_CODIVA)).as_string()); + const TCodiceIVA & codiva = cached_codIVA(cod); + const TString & aliquota = codiva.aliquota(); - if (aliquota.full()) - { - const real imp = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real(); - real iva = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPOSTA)).as_real(); - - if (codiva.is_agricola()) - sub_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp); - else - sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp); - } - } - */ + if (aliquota.full()) + { + const real imp = exp.get(FIELD_NAME(LF_RMOVIVA, RMI_IMPONIBILE)).as_real(); + + if (codiva.is_agricola()) + sub_value(STRING_TOKEN(imponibile_agricolo.objptr(aliquota)), imp); + else + sub_value(STRING_TOKEN(imponibile.objptr(aliquota)), imp); + } + } TISAM_recordset & reg = get_recordset(REP_REGOLARIZ); @@ -319,7 +305,6 @@ void TQuadro_VE_recordset::load() } } - query = "USE LIM\n FROM CODTAB=="; query << year() << "13\nTO CODTAB==" << year() << "13"; diff --git a/src/cg/cg7700.cpp b/src/cg/cg7700.cpp index 7d63d1d26..23519d24a 100644 --- a/src/cg/cg7700.cpp +++ b/src/cg/cg7700.cpp @@ -286,9 +286,9 @@ void TQuadro_VF_recordset::load() } if (non_soggetto) { - if (int_tipo_iva11_acq == 15) + if (tipo_iva11_acq == "15A" || int_tipo_iva11_acq == 15) { - if (tipo_iva11_acq == "15B") + if (tipo_iva11_acq == "15A") add_value("VF17.2", imp); add_value("VF17.1", imp); } diff --git a/src/cg/modf24/cg5500.cpp b/src/cg/modf24/cg5500.cpp new file mode 100755 index 000000000..58498067f --- /dev/null +++ b/src/cg/modf24/cg5500.cpp @@ -0,0 +1,2069 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cglib03.h" +#include "cg5500.h" +#include "cg5500a.h" + +static void round_imposta(real& d) +{ + TIva_round ir; + ir.round(d); +} + +const char* Visliq_app::itoname(int m) +{ + const char* mn; + if (m == 13) + return TR("Annuale"); + + if (_freqviva == "M") + return itom(m); + + switch(m) + { + case 3: + mn = TR("1 Trimestre"); + break; + case 6: + mn = TR("2 Trimestre"); + break; + case 9: + mn = TR("3 Trimestre"); + break; + case 12: + mn = TR("4 Trimestre"); + break; + } + + return mn; +} + +void Visliq_app::set_freqviva() +{ + if (look_lia()) + _freqviva = _lia->get("S7"); + else + { + TString key; + + key.format("%ld", get_firm()); + + const TRectype & ditta = cache().get(LF_NDITTE, key); + + _freqviva = ditta.get("FREQVIVA"); + } +} + +bool Visliq_app::create() +{ + _firm = get_firm(); + TDate oggi(TODAY); + _year = oggi.year(); + open_files(LF_TABCOM, LF_TAB, LF_NDITTE, 0); + + _nditte = new TRelation(LF_NDITTE); + _f24 = new TLocalisamfile(LF_RIGHEF24); + _ditte = new TArray_sheet(-1, -1, -4, -4, TR("Selezione Ditte"), + HR("Cod.@5|Ragione Sociale@50|Vers.")); + _from_one = FALSE; + _del = new TTable("%DEL"); + _lia = new TTable("%LIA"); + _lim = new TTable("LIM"); + _lam = new TTable("LAM"); + _del_r = &(_del->curr()); + _lim_r = &(_lim->curr()); + _lam_r = &(_lam->curr()); + _del_ditta = new TRecfield(*_del_r,"CODTAB",0,4); + _del_anno = new TRecfield(*_del_r,"CODTAB",5,8); + _del_mese = new TRecfield(*_del_r,"CODTAB",9,10); + _del_tipo = new TRecfield(*_del_r,"CODTAB",11,11); + _lim_anno = new TRecfield(*_lim_r,"CODTAB",0,3); + _lim_mese = new TRecfield(*_lim_r,"CODTAB",4,6); + _lam_anno = new TRecfield(*_lam_r,"CODTAB",0,3); + _lam_mese = new TRecfield(*_lam_r,"CODTAB",4,6); + _has_f24 = main_app().has_module(GVAUT); + + begin_wait(); + build_nomiditte(); + build_ditte_sheet(); + end_wait(); + + return TSkeleton_application::create(); +} + +bool Visliq_app::destroy() +{ + delete _lim_mese; + delete _lim_anno; + delete _lam_mese; + delete _lam_anno; + delete _del_tipo; + delete _del_mese; + delete _del_ditta; + delete _lim; + delete _lam; + delete _del; + delete _f24; + delete _ditte; + delete _nditte; + + return TApplication::destroy(); +} + +bool Visliq_app::ch_year_handler(TMask_field& f, KEY key) +{ + if (key == K_TAB && f.focusdirty()) + { + TWait_cursor hourglass; + app().set_year(f.get()); + app().build_nomiditte(); + app().build_ditte_sheet(); + app().reset_fields(); + } + return TRUE; +} + + +void Visliq_app::build_ditte_sheet() +{ + // build sheet + _ditte->destroy(); + long prima = -1; + + for (int i = 0; i < _nomiditte.items(); i++) + { + TToken_string* d = new TToken_string(_nomiditte.row(i)); + const long pos = _ditte->add(d); + const char vers = d->get_char(2); + const bool selectable = vers != '?'; + _ditte->enable_row(pos, selectable); + if (selectable && prima < 0) + _ditte->select(prima = pos); + } +} + +void Visliq_app::reset_fields() +{ + _mask->field(F_CODDITTA).set(""); + _mask->field(F_RAGSOC).set(""); +} + +bool Visliq_app::select_butt(TMask& m) +{ + if (_ditte->run() == K_ENTER) + { + TToken_string& row = _ditte->row(_ditte->selected()); + m.field(F_CODDITTA).set(row.get(0)); + m.field(F_RAGSOC).set(row.get(1)); + set_freqviva(row.get(2)); + set_mask_freq(m); + return TRUE; + } + return FALSE; +} + +void Visliq_app::build_nomiditte() +{ + _nomiditte.destroy(); + // ricostruire _nomiditte e rifare build_ditte_sheet + TRectype & ditta = _nditte->lfile().curr(); + TCursor cur(_nditte); + const TRecnotype items = cur.items(); + + cur.freeze(); + for (cur = 0L; cur.pos() < items; ++cur) + { + // check no archivi + bool good = prefix().exist(ditta.get_long("CODDITTA")); + + if (good) + { + // check no parametri liquidazione + TString16 cod; + + cod.format("%05ld%d", ditta.get_long("CODDITTA"), _year); + + const TRectype & lia = cache().get("%LIA", cod); + TToken_string* d = new TToken_string(64); + + // add record + d->add(ditta.get("CODDITTA")); + d->add(ditta.get("RAGSOC")); + + const TString & fr = lia.get("S7"); + + d->add(fr.empty() ? "??" : fr); + _nomiditte.add(d); + } + + } +} + +void Visliq_app::set_mask_freq(TMask& m) +{ + if (_freqviva == "M") + { + m.show(F_MONTHS); + m.hide(F_TRIMS); + } + else + { + m.hide(F_MONTHS); + m.show(F_TRIMS); + } +} + + +bool Visliq_app::sheet_action(TSheet_field& s, int r, KEY k) +{ + if (k == K_ENTER) + app()._sh_dirty = TRUE; + // non si possono cancellare o aggiungere righe + return (k != K_DEL && k != K_INS); +} + +bool Visliq_app::vers_action(TSheet_field& s, int r, KEY k) +{ + if (k == K_ENTER) + app()._sv_dirty = TRUE; + // non si possono cancellare o aggiungere righe + return (k != K_DEL && k != K_INS); +} + +const char* Visliq_app::link_handler(TMask& m, + int n, const char* txt, bool doubleclick) +{ + // con click visualizza, con double click modifica + TString st(txt); + bool iscred = FALSE; + static int group; + int firstfoc = 0; + + if (group != 0) m.hide(group); + + if (st.find(TR("Iva chiesta a rimborso")) >= 0 || st.find(TR("Rimborsi")) >= 0) + { group = -1; firstfoc = F_RIMBORSO; } + else if (st.find(TR("debito")) >= 0 || st.find(TR("credito")) >= 0) + { group = -2; firstfoc = F_RETTIFICA; } + else if (st.find(TR("acconto")) >= 0) + { group = -3; firstfoc = F_ACCONTO; } + else if (st.find(TR("Versamenti")) >= 0) + { group = -4; firstfoc = F_DELDATE; } + else if (st.find(TR("Descrizione")) >= 0) + { group = -5; firstfoc = F_DESCR3; } + else if (st.find(TR("Variazioni d'imposta")) >= 0) + { group = -6; firstfoc = F_VARIMP; } + else if (st.find(TR("Imposta non versata")) >= 0) + { group = -7; firstfoc = F_IMPNONVER; } + if (st.find(TR("Crediti")) >= 0) + { group = -8; firstfoc = F_CREDSPEC; } + + m.show(group); + if (app()._is_annual && (group != -3 || app()._freqviva == "M")) + m.disable(group); + else + { + m.enable(group); + if (doubleclick && firstfoc > 0) + m.field(firstfoc).set_focus(); + } + + return NULL; +} + + +void Visliq_app::main_loop() +{ + vis_liq(); +} + +// handlers +bool Visliq_app::set_ditta(TMask_field& f, KEY k) +{ + bool found = TRUE; + + if (k == K_F9) + return app().select_butt(f.mask()); + + if (k == K_TAB && f.focusdirty()) + { + found = FALSE; + TString ditta = f.get(); + TArray_sheet* sh = app().get_ditte_sheet(); + for (int i = 0; i < sh->items(); i++) + { + TToken_string& row = sh->row(i); + if (ditta == row.get(0)) + { + if (sh->row_enabled(i)) + { + f.mask().field(F_CODDITTA).set(row.get(0)); + f.mask().field(F_RAGSOC).set(row.get(1)); + app().set_freqviva(row.get(2)); + app().set_mask_freq(f.mask()); + found = TRUE; + } + else + { + f.warning_box(FR("Non sono definiti i parametri liquidazione per la ditta %ld"), + atol(ditta)); + f.reset(); + } + break; + } + } + } + if (!found) f.reset(); + return found; +} + +bool Visliq_app::set_ragsoc(TMask_field& f, KEY k) +{ + bool found = TRUE; + + if (k == K_F9) + return app().select_butt(f.mask()); + + if (k == K_TAB && f.focusdirty()) + { + found = FALSE; + TString ditta = f.get(); + TArray_sheet* sh = app().get_ditte_sheet(); + for (int i = 0; i < sh->items(); i++) + { + TToken_string& row = sh->row(i); + TString ts(row.get(1)); + if (ts.find(ditta) != -1) + { + if (sh->row_enabled(i)) + { + f.mask().field(F_CODDITTA).set(row.get(0)); + f.mask().field(F_RAGSOC).set(row.get(1)); + app().set_freqviva(row.get(2)); + app().set_mask_freq(f.mask()); + found = TRUE; + break; + } + } + } + } + if (!found) f.reset(); + return found; +} + + +bool Visliq_app::sel_mese_sh1 (TMask_field& f, KEY k) +{ + if (k != K_SPACE) return TRUE; + + TMask& m = *(app().get_main_mask()); + TSheet_field& sh = m.sfield(F_VISLIQ1); + TSheet_field& sv = m.sfield(F_VISLIQ2); + int sel = sh.selected(); + int month = sh.selected()+1; + TToken_string& tt = sh.row(sh.selected()); + if (sh.items() == 4) month *= 3; + + bool ok = FALSE; + + //if (m.dirty() || sh.sheet_mask().dirty()) + if (m.field(F_CREDPREC).dirty() || app()._sh_dirty || app()._sv_dirty) + { + KEY k = yesnocancel_box(TR("Registrazione modifiche effettuate?")); + if (k == K_YES) + app().write_general(m); + else if (k == K_NO) + app().read_general(m); + ok = (k == K_YES || k == K_NO); + } + else ok = TRUE; + + TMask& sm = sh.sheet_mask(); + if (ok) + { + if (sm.is_running()) sm.stop_run(K_ENTER); + app().vis_one(month); + const bool new_age_2000 = (app()._year >= 2000) && (app()._lia->get("S9") == "NV"); + if (new_age_2000) + app().read_general(m); + } + + app().set_liq_rows(sh); + + if (sm.is_running()) + { + // TBC controllare se sono i dati giusti in tt + sm.field(102).set(tt.get(1)); + sm.field(103).set(tt.get(2)); + sm.field(104).set(tt.get(3)); + sm.field(105).set(tt.get(4)); + sm.field(106).set(tt.get(5)); + } + + sh.row(sel) = tt; + + sh.force_update(sel); + const int res = app().look_ver(month,1); + TLocalisamfile & f24 = *app()._f24; + + if (res > 0) + { + TToken_string& tv = sv.row(sel == (sh.items() - 1) ? sel -1 : sel); + + if (res == 1) + { + tv.add(app().del()->get("D0"),1); + tv.add(app().del()->get("S7"),2); + tv.add(app().del()->get("S8"),3); + tv.add(app().del()->get("S9"),4); + tv.add(app().del()->get("R0"),5); + } + else + { + tv.add(f24.get(F24_DATAVERS),1); + tv.add(f24.get(F24_ABI),2); + tv.add(f24.get(F24_CAB),3); + tv.add("",4); + tv.add(f24.get(F24_IMPORTODEB),5); + } + sv.force_update(sel == (sh.items() - 1) ? sel -1 : sel); + } + return true; +} + + +bool Visliq_app::sel_mese_sh2 (TMask_field& f, KEY k) +{ + if (k != K_SPACE) return TRUE; + + TMask& m = *(app().get_main_mask()); + TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ2); + int sel = sh.selected(); + int month = sh.selected()+1; + if (sh.items() < 12) + month *= 3; + + // click su acconto + if (month > 12) return TRUE; + + bool ok = FALSE; + //if (m.dirty()) + if (m.field(F_CREDPREC).dirty() || app()._sh_dirty || app()._sv_dirty) + { + KEY k = yesnocancel_box(TR("Registrazione modifiche effettuate?")); + if (k == K_YES) + app().write_general(m); + else if (k == K_NO) + app().read_general(m); + ok = k == K_YES || k == K_NO; + } + else ok = TRUE; + + TMask& sv = sh.sheet_mask(); + if (ok) + { + if (sv.is_running()) sv.stop_run(K_ENTER); + app().vis_one(month); + const bool new_age_2000 = (app()._year >= 2000) && (app()._lia->get("S9") == "NV"); + if (new_age_2000) + app().read_general(m); + } + + app().set_vers_rows(sh); + + const int res = app().look_ver(month, 1); + + if (res > 0) + { + TToken_string& tv = sh.row(sel); + if (res == 1) + { + tv.add(app().del()->get("D0"),1); + tv.add(app().del()->get("S7"),2); + tv.add(app().del()->get("S8"),3); + tv.add(app().del()->get("S9"),4); + tv.add(app().del()->get("R0"),5); + } + else + { + TLocalisamfile & f24 = *app()._f24; + + tv.add(f24.get(F24_DATAVERS),1); + tv.add(f24.get(F24_ABI),2); + tv.add(f24.get(F24_CAB),3); + tv.add("",4); + tv.add(f24.get(F24_IMPORTODEB),5); + } + sh.force_update(sel); + } + + return true; +} + + +void Visliq_app::vis_liq() +{ + const long ditta = get_firm(); // Memorizza ditta corrente da ripristinare alla fine + set_freqviva(); + + TMask m("cg5500a"); + _mask = &m; + + m.set_handler(F_CODDITTA, set_ditta); + m.set_handler(F_RAGSOC, set_ragsoc); + m.set_handler(F_YEAR, ch_year_handler); + + set_mask_freq(m); + _year = m.get_int(F_YEAR); + + KEY k; + while ((k = m.run()) == K_ENTER) + { + if (m.get(F_CODDITTA).empty() || m.get(F_RAGSOC).empty()) + { + beep(); + continue; + } + + const long dtt = m.get_long(F_CODDITTA); + set_firm(dtt); + + TIva_round ir; + ir.set_default_iva_mode(_year, FALSE); + + const int month = m.get_int(_freqviva == "M" ? F_MONTHS : F_TRIMS); + _is_annual = (month == 13); + if (month == 0) + vis_all(); + else + vis_one(month); + _mask = &m; + } + + set_firm(ditta); +} + + +bool Visliq_app::vis_all() +{ + if (!look_lia()) + return FALSE; + + // mask diverse per trimestrale e annuale + _mask = new TMask(_freqviva == "M" ? "cg5500b" : "cg5500c"); + + TSheet_field& sh = _mask->sfield(F_VISLIQ1); + TSheet_field& sv = _mask->sfield(F_VISLIQ2); + _liq_sheet = &sh; + _vers_sheet = &sv; + + // disabilita aggiunta/eliminazione righe + sh.set_notify(sheet_action); + // qui occorre modificare le deleghe + sv.set_notify(vers_action); + + sh.sheet_mask().set_handler(100,sel_mese_sh1); + sv.sheet_mask().set_handler(100,sel_mese_sh2); + + const bool new_age_2000 = (_year >= 2000) && (_lia->get("S9") == "NV"); + const bool new_print_2000 = _year >= 2000; + TMask& shm = sh.sheet_mask(); + + for (int id = 103; shm.id2pos(id) > 0; id++) + { + TMask_field& f = shm.field(id); + if ((f.in_group(11) && new_print_2000) || (f.in_group(12) && !new_print_2000)) + { + f.hide(); + sh.delete_column(id); + } + if (id == 108 || id == 110) + sh.enable_column(id, new_age_2000); + } + + // fill the mask in + read_general(*_mask); + + for (bool stop = FALSE; !stop;) + { + KEY k = _mask->run(); + + switch(k) + { + case K_ESC: + case K_QUIT: + if (_mask->dirty()) + { + KEY k = yesnocancel_box(TR("Registrazione modifiche effettuate?")); + + if (k == K_YES) + write_general(*_mask); + else + read_general(*_mask); + + if (k == K_YES || k == K_NO) + stop = TRUE; + break; + } + else stop = TRUE; + break; + case K_SAVE: + // write values + if (_mask->dirty()) + write_general(*_mask); + break; + } + } + + delete _mask; + _mask = NULL; + + _vers_sheet = NULL; + _liq_sheet = NULL; + + return TRUE; +} + + +bool Visliq_app::vis_one(int m) +{ + begin_wait(); + TMask msk("cg5500d"); + + bool recorded = TRUE; + TString nomem(TR("Liquidazione IVA ")); + + nomem << itoname(m); + nomem << " " << _year; + + msk.show(F_PERIODOM, _freqviva == "M"); + msk.show(F_PERIODOT, _freqviva != "M"); + msk.set(_freqviva == "M" ? F_PERIODOM : F_PERIODOT, m); + + // ricalcolo liquidazione + TFilename f; + f.temp("prliq"); + + TToken_string body(36); + body.add(_year); + body.add(m); + body.add(get_firm()); + body.add("V"); // visualizzazione: no ff alla fine, zeri stampati + body.add(""); + body.add(f); + body.add('X'); + + TMessage msg("cg4 -2 -S", "RCL", body); + msg.send(); + + TBrowsefile_field& brw = (TBrowsefile_field&)msk.field(F_VISFLQ); + brw.set_link_handler(link_handler); + brw.enable_link(TR("Modifica: "), 'r'); + + TExternal_app liq("cg4 -2"); + + end_wait(); + TProgind* pp = new TProgind(10,TR("Estrazione liquidazione: prego attendere"),FALSE,FALSE); + liq.run(); + if (liq.exitcode()) + { + beep(); + return FALSE; + } + + look_lim(m); + look_lia(); + + real rimborso = _lim->get_real("R1"); + real rettifica = _lim->get_real("R5"); + + if (_lim->get_bool("B2")) + nomem << TR(" (diritto al rimborso infraannuale)"); + + real acconto(0.0); + + if (m == 12) + { + const int res = look_ver(12, 7); + + if (res == 1) + acconto = _del->get_real("R0"); + else + if (res == 2) + acconto = _f24->get_real(F24_IMPORTODEB); + } + else + if (m == 13) + acconto = _lim->get_real("R11"); + + + msk.field(F_YEAR).set(nomem); + msk.set(F_RIMBORSO, rimborso); + + // Ottima procedura di 16 righe, di cui 14 inutili! + if (rettifica.sign() < 0) + { + real rabs = abs(rettifica); + msk.field(F_RETTIFICA).set(rabs.string()); + msk.field(F_DEBCRE).set("C"); + } + else if (rettifica.sign() > 0) + { + msk.field(F_RETTIFICA).set(rettifica.string()); + msk.field(F_DEBCRE).set("D"); + } + else + { + msk.field(F_RETTIFICA).set(""); + msk.field(F_DEBCRE).set(""); + } + + TString desc1 = _lim->get("S0"), desc2 = _lim->get("S1"), desc3 = _lim->get("S2"); + msk.field(F_DESCR1).set(desc1); + msk.field(F_DESCR2).set(desc2); + msk.field(F_DESCR3).set(desc3); + msk.set(F_ACCONTO, acconto); + + real varimp = _lim->get("R17"); + real impnonver= _lim->get("R18"); + real credspec = _lim->get("R19"); + + msk.set(F_VARIMP, varimp >= ZERO ? varimp : -varimp); + msk.set(F_VARIMP_DC, varimp >= ZERO ? "D" : "C"); + + msk.set(F_IMPNONVER, impnonver); + msk.set(F_CREDSPEC, credspec); + + begin_wait(); + brw.set_text(f, TR("CALCOLO LIQUIDAZIONE D'IMPOSTA")); + brw.goto_pos(brw.lines()-16l, 9); + delete pp; + + TViswin & vsw = brw.vis_win(); + bool is_delega = FALSE; + + real vers; TDate date; TString abi(5), cab(5), con(3); + + const int res = look_ver(m, 1); + + is_delega = res > 0; + + if (is_delega) + { + if (res == 1) + { + vers = _del->get_real("R0"); + date = _del->get_date("D0"); + abi = _del->get("S7"); + cab = _del->get("S8"); + con = _del->get("S9"); + } + else + { + TLocalisamfile & f24 = *_f24; + + vers = f24.get_real(F24_IMPORTODEB); + date = f24.get_date(F24_DATAVERS); + abi = f24.get(F24_ABI); + cab = f24.get(F24_CAB); + con.cut(0); + } + } + + msk.field(F_DELDATE).set(date.string()); + msk.field(F_DELIMP).set(vers.string()); + msk.field(F_DELABI).set(abi); + msk.field(F_DELCAB).set(cab); + msk.field(F_DELCON).set(con); + + end_wait(); + + bool l_mod = FALSE; + bool d_mod = FALSE; + + _from_one = TRUE; + + for(;;) + { + KEY k = msk.run(); + + if (k == K_ESC) break; + + real n_acconto (msk.get(F_ACCONTO)); + real n_rimborso (msk.get(F_RIMBORSO)); + real n_rettifica(msk.get(F_RETTIFICA)); + real n_delimp(msk.get(F_DELIMP)); + TString n_desc1 (msk.get(F_DESCR1)); + TString n_desc2 (msk.get(F_DESCR2)); + TString n_desc3 (msk.get(F_DESCR3)); + real n_vers (msk.get(F_DELIMP)); + TDate n_date (msk.get(F_DELDATE)); + TString n_abi (msk.get(F_DELABI)); + TString n_cab (msk.get(F_DELCAB)); + TString n_con (msk.get(F_DELCON)); + real n_varimp(msk.get(F_VARIMP)); + real n_impnonver(msk.get(F_IMPNONVER)); + real n_credspec(msk.get(F_CREDSPEC)); + + if (msk.field(F_DEBCRE).get()[0] == 'C') + n_rettifica = -n_rettifica; + + if (msk.get(F_VARIMP_DC)[0] == 'C') + n_varimp = -n_varimp; + + if (msk.field(F_RETTIFICA).dirty() || msk.field(F_DEBCRE).dirty()) + { + rettifica = n_rettifica; + l_mod = TRUE; + } + if (msk.field(F_ACCONTO).dirty()) + { + acconto = n_acconto; + l_mod = TRUE; + } + if (msk.field(F_RIMBORSO).dirty()) + { + bool ok = TRUE; + if (!n_rimborso.is_zero()) + { + const bool old_rim = !rimborso.is_zero(); + // check diritto (se non ce n'era gia' uno prima) + if (!_lim->get_bool("B2") && !old_rim) + ok = yesno_box(FR("Non risulta diritto al rimborso per il mese %d. Si desidera " + "confermare ugualmente?"), m); + } + if (ok) + { + rimborso = n_rimborso; + l_mod = TRUE; + } + else + { + msk.field(F_RIMBORSO).set(rimborso.string()); + msk.field(F_RIMBORSO).set_dirty(FALSE); + } + } + if (msk.field(F_DESCR1).dirty()) + { + desc1 = n_desc1; + l_mod = TRUE; + } + if (msk.field(F_DESCR2).dirty()) + { + desc2 = n_desc2; + l_mod = TRUE; + } + if (msk.field(F_DESCR3).dirty()) + { + desc3 = n_desc3; + l_mod = TRUE; + } + if (msk.field(F_DELDATE).dirty()) + { + date = n_date; + d_mod = TRUE; + } + if (msk.field(F_DELIMP).dirty()) + { + real itt = _lim->get_real("R10"); + vers = n_vers; + d_mod = TRUE; + } + if (msk.field(F_DELABI).dirty()) + { + abi = n_abi; + d_mod = TRUE; + } + if (msk.field(F_DELCAB).dirty()) + { + cab = n_cab; + d_mod = TRUE; + } + if (msk.field(F_DELCON).dirty()) + { + con = n_con; + d_mod = TRUE; + } + if (msk.field(F_VARIMP).dirty() || msk.field(F_VARIMP_DC).dirty()) + { + varimp = n_varimp; + l_mod = TRUE; + } + if (msk.field(F_IMPNONVER).dirty()) + { + impnonver = n_impnonver; + l_mod = TRUE; + } + + if (msk.field(F_CREDSPEC).dirty()) + { + credspec = n_credspec; + l_mod = TRUE; + } + + if (recorded) recorded = !(d_mod || l_mod); + + if (k == K_INS || k == K_SAVE) + { + recalc_liq_data(&vsw, rimborso, rettifica, vers, acconto, varimp, impnonver, credspec, + desc1, desc2, desc3, date, abi, cab, con); + } + if (k == K_SAVE) + { + { write_liq(); recalc_next_liq(m, _liq_sheet, _vers_sheet); } + if (d_mod) { write_del(); } + l_mod = d_mod = FALSE; + recorded = TRUE; + } + if (k == K_QUIT) + { + if (!recorded) + { + KEY kk = yesnocancel_box(TR("Modifiche non registrate: salvare?")); + if (kk == K_YES) + { + if (l_mod) { write_liq(); recalc_next_liq(m, _liq_sheet, _vers_sheet); } + if (d_mod) { write_del(); } + l_mod = d_mod = FALSE; + recorded = TRUE; + } + if (kk == K_YES || kk == K_NO) + break; + } + else break; + } + } + + remove(f); + + return recorded; +} + + +real Visliq_app::credito_utilizzato(int year, int month) const +{ + real credito; + + TTable lim("LIM"); + TString16 cod; + for (int m = 1; m <= month; m++) + { + cod.format("%04d%02d", year, m); + lim.put("CODTAB", cod); + if (lim.read() == NOERR) + { + if (m < month) + credito += lim.get_real("R15"); // Credito utilizzato IVA + if (m < 13) + credito += lim.get_real("R16"); // Credito utilizzato F24 + } + } + + return credito; +} + +HIDDEN void replace_number(TViswin* vsw, long rig, real num, int tab) +{ + TString16 str; + if (num.is_zero()) + str.spaces(15); + else + { + const TCurrency c(num); + str = c.string(TRUE); + str.right_just(15); + } + vsw->replace(rig, str, tab); +} + +real Visliq_app::min_vers(int anno, int month) +{ + TInteressi_IVA_table ver; + real min; + if (month > 12) + { + if (ver.read(_year, 12) == NOERR) + min = ver.get(I_ANNUALE); + } + else + { + if (ver.read(_year, month) == NOERR) + min = ver.get(I_PERIODICO); + } + return min; +} + +void Visliq_app::recalc_liq_data(TViswin* vsw, real& rimb, real& rett, real& vers, + real& acc, real& varimp, real& impnonver, real & credspec, + TString& d1, TString& d2, TString& d3, TDate& date, + TString& abi, TString& cab, TString& con) +{ + // ricalcola tutto, scrive nei lim, NON salva e riaggiusta + // la paginata della liquidazione + // Descrizione Da ricalcolare + // ------------------------------------------------------------------------------- + real iva_ven = _lam->get_real("R0"); // IVA acquisti no + real iva_acq = _lam->get_real("R1"); // IVA vendite no + real cre_pre = _lam->get_real("R2"); // credito precedente no (solo dopo) + real deb_pre = _lam->get_real("R3"); // debito precedente no (solo dopo) + real ris = _lim->get_real("R0"); // risultato si + real rmb = _lim->get_real("R1"); // rimborso si + real rtt = _lim->get_real("R5"); // rettifica si + real udt = _lim->get_real("R6"); // ult. detrazioni no + real cgp = _lim->get_real("R7"); // conguaglio prorata no + real vrs = _lim->get_real("R8"); // versamenti no + real vri = _lim->get_real("R9"); // versamenti integrativi no + real itt = _lim->get_real("R10"); // tasso interesse no + real act = _lim->get_real("R11"); // acconto si + real crd = _lim->get_real("R12"); // totale a credito si + real dbt = _lim->get_real("R13"); // totale a debito si + real itr = _lim->get_real("R14"); // interesse totale si + real cui = _lim->get_real("R15"); // Credito utilizzato iva si + real var = _lim->get_real("R17"); // Variazioni d'imposta no + real inv = _lim->get_real("R18"); // Imposta non versata no + real crs = _lim->get_real("R19"); // Crediti speciali no + // ------------------------------------------------------------------------------- + const int year = atoi(_lim->get("CODTAB").mid(0, 4)); + const int month = atoi(_lim->get("CODTAB").mid(4, 2)); + const bool after2000 = _year >= 2000; // CM000222 + + if (month == 13 || after2000) + { + // molto codice duplicato, ma ne val la pena (vedi sopra) + round_imposta(vrs); + round_imposta(vers); + round_imposta(rmb); + round_imposta(rimb); + round_imposta(rtt); + round_imposta(rett); + round_imposta(act); + round_imposta(acc); + round_imposta(var); + round_imposta(varimp); + round_imposta(inv); + round_imposta(impnonver); + round_imposta(crs); + round_imposta(credspec); + } + + // calcola vecchio risultato: se e' diverso da R0 ci sono cazzi strani + // e invalidiamo B0 cosi' impara + real risul = iva_ven - iva_acq - udt + rmb + cgp - vri + rtt - act - cre_pre + deb_pre + + var + inv - cui - crs; + + if (risul != ris) + { +#ifdef DBG + yesnofatal_box("Porca vacca: Risultato non coincidente!"); +#endif + _lim->put("B0", "X"); + } + + + // calcola nuovi dati + real riscr = iva_acq + udt + acc + cre_pre + credspec; + real risdb = iva_ven + rimb + deb_pre + impnonver; + + if (rett.sign() < 0) riscr -= rett; + else risdb += rett; + if (cgp.sign() < 0) riscr -= cgp; + else riscr += cgp; + if (varimp.sign() < 0) riscr -= varimp; + else risdb += varimp; + + real credito_utilizzato_iva = ZERO; + const bool new_age_2000 = (_year >= 2000) && look_lia() && (_lia->get("S9") == "NV"); + if (new_age_2000) + { + real credito_utilizzabile_inizio_anno = _lia->get_real("R0") - _lia->get_real("R15"); + if (credito_utilizzabile_inizio_anno < ZERO) + credito_utilizzabile_inizio_anno = ZERO; + + risul = risdb - riscr; + if (risul > ZERO && credito_utilizzabile_inizio_anno > ZERO) + { + real credito_utilizzabile = credito_utilizzabile_inizio_anno; + + credito_utilizzabile -= credito_utilizzato(year, month); + if (credito_utilizzabile < ZERO) credito_utilizzabile = ZERO; + if (month < 13) + credito_utilizzato_iva = min(risul, credito_utilizzabile); + else + credito_utilizzato_iva = credito_utilizzabile; + round_imposta(credito_utilizzato_iva); + riscr += credito_utilizzato_iva; + } + } + + risul = risdb - riscr; + + real intr(0.0); + + if (!itt.is_zero() && risul.sign() > 0) + { + // calcola interesse + intr = risul * itt / real(100.0); + intr.ceil(); + if (after2000) + round_imposta(intr); + } + + // riaggiusta LIM + _lim->put("R0", risul); + _lim->put("R1", rimb); + _lim->put("R5", rett); + _lim->put("R8", vers); + _lim->put("R11", acc); + _lim->put("R12", riscr); + _lim->put("R13", risdb); + _lim->put("R14", intr); + _lim->put("R15", credito_utilizzato_iva); + _lim->put("R17", varimp); + _lim->put("R18", impnonver); + _lim->put("R19", credspec); + + _lim->put("S0", d1); + _lim->put("S1", d2); + _lim->put("S2", d3); + + // i dati dei versamenti si schiaffano in LIM: + // D0 la data, S4/5/6 le tre cazzate ABI CAB CON + _lim->put("D0", date); + _lim->put("S4", abi); + _lim->put("S5", cab); + _lim->put("S6", con); + + // determina righe da cambiare + // una sburlata di search ...... + int x = 0; + long lvers = -1l; + long line = vsw->search(TR("CALCOLO LIQUIDAZIONE D'IMPOSTA"), x); + int wasdebt = ris.sign(); + long lrisd = vsw->search(TR("RISULTATO"), x, line, TRUE); // RISULTATO a debito + long lrisc = vsw->search(TR("RISULTATO"), x, lrisd+1, TRUE); // credito + long lrettc = vsw->search(TR("Rettifiche IVA a credito"),x,line,TRUE); + long lrettd = vsw->search(TR("Rettifiche IVA a debito"), x,line,TRUE); + long lacct = vsw->search(TR("Versamento acconto dicembre"),x,line,TRUE); + long lintr = vsw->search(TR("Interesse"),x,line,TRUE); + long livdv = vsw->search(TR("IVA DOVUTA"),x,line,TRUE); + long lrivr = vsw->search(TR("Versamenti effettuati"),x,line,TRUE); + long lvari = vsw->search(TR("Variazioni d'imposta"),x,line,TRUE); + long limnv = vsw->search(TR("Imposta non versata"),x,line,TRUE); + long lcicd = vsw->search(TR("Credito IVA compensabile detratto"),x,line,TRUE); + long iadoc = vsw->search(TR("IVA a debito o a credito per il periodo"),x,line,TRUE); + long lrimb = vsw->search(iadoc > 0 ? TR("Rimborsi") : TR("Iva chiesta a rimborso"),x,line,TRUE); + + if (wasdebt != 0) + lvers = vsw->search(wasdebt < 0 ? TR("CREDITO ATTUALE") : TR("IVA DA VERSARE"), + x, line, TRUE); + if (lvers == -1l) + lvers = vsw->search(TR("IVA A DEBITO DA NON VERSARE"), x, line, TRUE); + if (lvers == -1l) + lvers = lrisc+1l; + + // ... seguita da una sburlata di replace + replace_number(vsw, lrimb, rimb, 75); + + replace_number(vsw, lrisd, risdb, 75); + replace_number(vsw, lrisc, riscr, 58); + replace_number(vsw, lacct, acc, 58); + + if (rett.sign() > 0) + { + replace_number(vsw, lrettd, rett, 75); + vsw->replace(lrettc, " ", 58); + } + else if (rett.sign() < 0) + { + real rabs = abs(rett); + replace_number(vsw, lrettd, rabs, 58); + vsw->replace(lrettd, " ", 75); + } + else + { + vsw->replace(lrettc, " ", 58); + vsw->replace(lrettd, " ", 75); + } + + if (iadoc > 0) // New Age 2000 + { + int tab1 = 75, tab2 = 58; + real v = iva_ven + rett - iva_acq; + if (v < ZERO) + { + v = -v; tab1 = 58; tab2 = 75; + } + if (v.is_zero()) + vsw->replace(iadoc, " ", tab1); + else + replace_number(vsw, iadoc, v, tab1); + + vsw->replace(iadoc, " ", tab2); + + iadoc = vsw->search(TR("IVA dovuta o a credito per il periodo"),x,line,TRUE); + v = risul + credspec; + if (v < ZERO) + { + v = -v; tab1 = 58; tab2 = 75; + } + if (v.is_zero()) + vsw->replace(iadoc, " ", tab1); + else + replace_number(vsw, iadoc, v, tab1); + + vsw->replace(iadoc, " ", tab2); + + TString256 ln; + long lcrs = vsw->search(TR("Crediti speciali"),x,line,TRUE); + + if (credspec.is_zero()) + vsw->replace(lcrs, " ", 58); + else + replace_number(vsw, lcrs, credspec, 58); + + const bool print_intr = _freqviva == "T" && intr != 0.0; + const char* desc_inter = TR("Interessi dovuti per liquidazioni trimestrali"); + lintr = vsw->search(desc_inter, x, line, TRUE); + + if (print_intr) + { + if (lintr == -1) + { + lintr = iadoc + 2; + TString desc; + desc.format("%s %s%%", desc_inter, itt.stringa(6,2)); + vsw->replace(lintr, desc, 11); + } + replace_number(vsw, lintr, intr, 75); + risul += intr; + } + else + if (lintr > 0) + { + ln.spaces(90); + vsw->replace(lintr, ln, 11); + } + + long idv = vsw->search(TR("IMPORTO DA"), x, iadoc, TRUE); + if (idv < 0) + idv = iadoc+6; + + if (risul > ZERO) + { + ln = TR("IMPORTO DA "); + if (risul < min_vers(_year, month) && month < 13) + ln << TR("NON "); + ln << TR("VERSARE "); + replace_number(vsw, idv, risul, 75); + } + else + ln.spaces(90); + vsw->replace(idv, ln, 23); + } + else + { + // non scrive e si sciroppa la viswin + TString256 ln; + ln.spaces(); ln.cut(136); + if (risul.sign() < 0) // Significa che in questo momento il risultato e' a credito + { + TCurrency rabs(-risul); + TString16 str = rabs.string(TRUE); str.right_just(15); + + ln.overwrite(TR("CREDITO ATTUALE"), 23); + ln.overwrite(str, 58); + if (lintr > 0) // Quindi niente riga "Interessi " ... + { + vsw->replace(lintr," ",23); + vsw->replace(lintr," ",33); + vsw->replace(lintr," ",41); + vsw->replace(lintr," ",75); + } + if (livdv > 0) // ...ed "IVA DOVUTA" + { + vsw->replace(livdv," ",23); + vsw->replace(livdv," ",75); + } + } + else if (risul.sign() >= 0) // ... altrimenti siamo a debito, in tal caso si hanno gli interessi (solo trimestrali of course) + { + const bool print_intr = _freqviva == "T" && intr != 0.0; + if (print_intr) + { + if (lintr == -1) + { + lintr = lrisc + 2; + vsw->replace(lintr, TR("Interesse"), 23); + vsw->replace(lintr, itt.stringa(6,2), 33); + vsw->replace(lintr, "%", 43); + } + if (livdv == -1) + { + livdv = lrisc + 1; + vsw->replace(livdv, TR("IVA DOVUTA"), 23); + } + if (lintr > 0) + replace_number(vsw, lintr, intr, 75); + if (livdv > 0) + { + replace_number(vsw, livdv, risul, 75); + risul += intr; + } + } + ln.overwrite(TR("IVA DA VERSARE"), 23); + + TCurrency rabs(risul); + TString16 str = rabs.string(TRUE); str.right_just(15); + ln.overwrite(str, 75); + } + vsw->replace(lvers, ln, 0); + } + + if (lrivr >= 0) + { + if (vers.is_zero()) + vsw->replace(lrivr, " ", 58); + else + replace_number(vsw, lrivr, vers, 58); + } + + if (lvari >= 0) + { + int tab1 = 75, tab2 = 58; + real v = varimp; + if (v < 0) + { + v = -v; + tab1 = 58; + tab2 = 75; + } + if (!v.is_zero()) + replace_number(vsw, lvari, v, tab1); + else + vsw->replace(lvari, " ", tab1); + vsw->replace(lvari, " ", tab2); + } + if (limnv >= 0) + { + if (!impnonver.is_zero()) + replace_number(vsw, limnv, impnonver, 75); + else + vsw->replace(limnv, " ", 75); + } + if (lcicd >= 0) + { + if (credito_utilizzato_iva.is_zero()) + vsw->replace(lcicd, " ", 58); + else + replace_number(vsw, lcicd, credito_utilizzato_iva, 58); + } + + vsw->refresh(); +} + +void Visliq_app::recalc_next_liq(int start_month, TSheet_field* sl, TSheet_field* sv) +{ + // riaggiusta le liquidazioni successive da li' in poi finche' ce n'e' + // rimette a posto i valori nelle tokenstrunz dello sheet + // soltanto nello start_month i valori di LIM sono stati cambiati + + int step = _freqviva == "M" ? 1 : 3; + real rstart = _lim->get("R0"); + + for (int i = start_month; i < 13; i += step) + { + int row = (i/step) - 1; + + if (i > start_month) + { + if (!look_lim(i)) + break; + + // ricalcola LIM e LAM + real cred = _lam->get_real("R2"); + real debt = _lam->get_real("R3"); + real risl = _lim->get_real("R0"); + real vers = _lim->get_real("R8"); + real risc = _lim->get_real("R12"); + real risd = _lim->get_real("R13"); + real intt = _lim->get_real("R10"); + real crf24 = _lim->get_real("R16"); + + // toglie vecchio credito e debito + risl += cred; + risl -= debt; + risc -= cred; + risd -= debt; + + // aggiunge nuovo credito o debito + real min = min_vers(_year, i); + if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < min)) + risl += rstart; + + real newcred(0.0); + real newdebt(0.0); + if (rstart.sign() < 0) + { + newcred = -rstart; + risc -= rstart; + } + if (rstart.sign() > 0 && rstart < min) + { + newdebt = rstart; + risd += rstart; + } + + _lam->put("R2", newcred); + _lam->put("R3", newdebt); + _lim->put("R0", risl); + _lim->put("R12", risc); + _lim->put("R13", risd); + if (intt.sign() > 0) // interessi + { + real intr = risl * intt / real(100.0); + if (_year >= 2000) + round_imposta(intr); + _lim->put("R14",intr); + } + _lim->put("R16", crf24); + + _lim->rewrite(); + _lam->rewrite(); + + rstart = risl; + } + + if (sl != NULL) + { + TToken_string& t = sl->row(row); + t.add(itoname(i),0); + + int sr0 = (_lim->get_real("R0")).sign(); + int sr5 = (_lim->get_real("R5")).sign(); + + real r0abs = abs(_lim->get_real("R0")); + real r5abs = abs(_lim->get_real("R5")); + t.add(r0abs.string(),1); + t.add(sr0 == 0 ? "" : (sr0 > 0 ? "D" : "C"), 2); + t.add((_lim->get_real("R1")).string(),3); + t.add(r5abs.string(),4); + + t.add(sr5 == 0 ? "" : (sr5 > 0 ? "D" : "C"),5); + + for (int kk = 3; kk < 6 ; kk++) + sl->enable_cell(row, kk); + sl->enable_cell(row, 7); + sl->enable_cell(row, 9); + + sl->force_update(row); + } + } + + // se non si fa questa non scrive una delega, + // bensi' una bovazza (escremento bovino) + look_lim(start_month); +} + +void Visliq_app::write_liq() +{ + // piccola, ma simpatica + // naturalmente era much bigger + _lim->rewrite(); +} + +void Visliq_app::write_del() +{ + bool wasdel = FALSE; + + int month = atoi(*_lim_mese); + TString abi(_lim->get("S4")); + TString cab(_lim->get("S5")); + TString con(_lim->get("S6")); + TDate date(_lim->get("D0")); + real vers(_lim->get_real("R8")); + real intr(_lim->get_real("R10")); + int res = look_ver(month,1); + TLocalisamfile & f24 = *_f24; + + wasdel = res > 0; + + if (vers.is_zero() && wasdel) + { + if (res == 1) + { + _del->remove(); + _del->rewrite(); // ??? + } + else + f24.remove(); + return; + } + + if (!wasdel) + res = look_ver(month,1, true); // Crea delega + + real inter(0.0); + + if (!intr.is_zero()) + { + // riapplica il tasso di interesse + // se trimestrale e' stato scorporato rispetto + // all'eventuale input utente + inter = vers*real(100.0)/(real(100.0)+intr); + inter = vers - inter; + inter.ceil(); + if (_year >= 2000) + round_imposta(inter); + } + + if (res == 1) + { + _del->put("R0",vers); + _del->put("R1",inter); + _del->put("D0",date); + _del->put("S7",abi); + _del->put("S8",cab); + _del->put("S9",con); + int ctri = _freqviva == "M" ? 6000 + month : 6031 + (month/3); + _del->put("S6", ctri); + _del->rewrite(); + } + else + { + vers = f24.get_real(F24_IMPORTODEB); + date = f24.get_date(F24_DATAVERS); + abi = f24.get(F24_ABI); + cab = f24.get(F24_CAB); + con.cut(0); + f24.rewrite(); + } +} + + +void Visliq_app::read_general(TMask& m) +{ + TString abi(5); + TString cab(5); + TString cnc(5); + const int step = _freqviva == "M" ? 1 : 3; + const bool new_age_2000 = (_year >= 2000) && (_lia->get("S9") == "NV"); + + TSheet_field& sh = m.sfield(F_VISLIQ1); + TSheet_field& sv = m.sfield(F_VISLIQ2); + TMask_field & crprec = m.field(F_CREDPREC); + + if (new_age_2000) + crprec.set_prompt(TR("Credito compensabile inizio anno ")); + else + crprec.set_prompt(TR("Credito inizio anno ")); + real cr_res = _lia->get_real("R0"); + crprec.set(cr_res.string()); + if (new_age_2000) + cr_res -= _lia->get_real("R15"); + + + // set sheet + for (int i = step; i < 13; i+=step) + { + int row = (i/step) - 1; + + if (!is_month_ok(i)) + continue; + + if (!look_lim(i)) + { + if (sh.items() < row) + sh.row(row) = *(new TToken_string("||||||")); + else + sh.row(row) = "||||||"; + + sh.disable_cell(row, -1); + continue; + } + + TToken_string* tt = NULL; + if (sh.items() < row) + tt = new TToken_string(80); + else + tt = &(sh.row(row)); + + real r0abs = abs(_lim->get_real("R0")); + real r5abs = abs(_lim->get_real("R5")); + tt->add(itoname(i),0); + tt->add(r0abs.string(),1); + + int sr0 = (_lim->get_real("R0")).sign(); + int sr5 = (_lim->get_real("R5")).sign(); + + tt->add(sr0 == 0 ? "" : (sr0 > 0 ? "D" : "C"),2); + tt->add(_lim->get_real("R1").string(),3); + tt->add(r5abs.string(),4); + tt->add(sr5 == 0 ? "" : (sr5 > 0 ? "D" : "C"),5); + + const real criva = _lim->get_real("R15"); + tt->add(criva.string(), 6); + const real crf24 = _lim->get_real("R16"); + tt->add(crf24.string(),7); + if (new_age_2000) + { + if (cr_res > ZERO) + { + cr_res -= crf24; + cr_res -= criva; + } + if (cr_res < ZERO) + cr_res = ZERO; + tt->add(cr_res.string(), 8); + } + else + tt->add("", 8); + tt->add(_lim->get("S3"), 9); + + sh.row(row) = (*tt); + } + + // calcola versamenti + real versamenti[13]; + TDate date[13]; + TToken_string banche[13]; + + for (_del->first(); !_del->eof(); _del->next()) + { + if (atol(*_del_ditta) != get_firm() || + atoi(*_del_anno) != _year) + continue; + + // uso solo deleghe normali (tipo == 1) e acconti (tipo == 7) + int tipod = atoi(*_del_tipo); + if (tipod != 1 && tipod != 7) + continue; + + // somma versamenti nel mese adeguato + int m = atoi(*_del_mese); + + if (m >= 12) + m = tipod == 7 ? 12 : 13; + // supercauto + if (m <= 0) continue; + + versamenti[m-1] += _del->get_real("R0"); + date[m-1] = _del->get_date("D0"); + banche[m-1].add(_del->get("S7"),0); + banche[m-1].add(_del->get("S8"),1); + banche[m-1].add(_del->get("S9"),2); + } + + // Sheet versamenti + TString nomemese; + sv.destroy(); + for (i = 1; i <= 13; i++) + { + if (!is_month_ok(i) && i != 13) + continue; + + TToken_string tt; + nomemese = itoname(i == 13 ? 12 : i); + + if (nomemese == "4 Trimestre") + nomemese = "4 Tr."; + + if (i == 12) nomemese << TR(" acconto"); + if (i == 13) nomemese << TR(" saldo"); + + tt.add(nomemese,0); // mese + tt.add(date[i-1].string(),1); // data vers. + tt.add(banche[i-1].get(0),2); // azienda + tt.add(banche[i-1].get(1),3); // dipendenza + tt.add(banche[i-1].get(2),4); // concessionaria + tt.add(versamenti[i-1].string(),5);// versamenti + + sv.row(-1) = tt; + if (i == 12) + sv.enable_cell(sv.items() - 1, -1, FALSE); + } + + // sh.enable_column(0, FALSE); + // sv.enable_column(0, FALSE); + + sh.force_update(); + sv.force_update(); + + // save initial rows + _vers_rows = sv.rows_array(); + _liq_rows = sh.rows_array(); + + m.field(F_CREDPREC).set_dirty(FALSE); + m.field(F_VISLIQ1).set_dirty(_sh_dirty=FALSE); + m.field(F_VISLIQ2).set_dirty(_sv_dirty=FALSE); +} + +void Visliq_app::write_general(TMask& m) +{ + TSheet_field& sh = (TSheet_field&)m.field(F_VISLIQ1); + TSheet_field& sv = (TSheet_field&)m.field(F_VISLIQ2); + const bool new_age_2000 = (_year >= 2000) && (_lia->get("S9") == "NV"); + + if (m.field(F_CREDPREC).dirty()) + { + const real r = m.get(F_CREDPREC); + _lia->put("R0",r); + _lia->rewrite(); + } + + // credito iniziale + real rstart = _lia->get_real("R0"); + real cr_res; + if (!new_age_2000) + { + if (!rstart.is_zero()) + rstart = -rstart; + } + else + cr_res = rstart - _lia->get_real("R15"); + + // indicatore ricalcolo crediti e debiti OK + int step = _freqviva == "M" ? 1 : 3; + bool carry = TRUE; + bool was_lim; + TMask& shm = sh.sheet_mask(); + TMask& svm = sv.sheet_mask(); + + for (int i = step; i < 13; i += step) + { + // this is a true bordel + const int row = (i/step) - 1; + + bool lfrommask = sh.selected() == row && (shm.is_running() || _from_one); + bool vfrommask = sv.selected() == (i == 12 ? row + 1 : row) && svm.is_running(); + + TToken_string& tt_lo = (TToken_string&)_liq_rows[row]; + TToken_string& tt_ln = sh.row(row); + + // risolve menata del dettaglio si'/no + if (lfrommask) + { + for (int i = 1; i <= 9; i++) + tt_ln.add(shm.get(101+i),i); + } + + // saltare una riga se dicembre (riga 11 == acconto) + TToken_string& tt_vo = (TToken_string&)_vers_rows[i == 12 ? row + 1 : row]; + TToken_string& tt_vn = sv.row(i == 12 ? row + 1 : row); + + if (vfrommask) + { + for (int i = 1; i <= 5; i++) + tt_vn.add(svm.get(101+i),i); + } + + // traduci contenuto righe in real pila + real orett(tt_lo.get(4)); + real nrett(tt_ln.get(4)); + real orimb(tt_lo.get(3)); + real nrimb(tt_ln.get(3)); + real overs(tt_vo.get(5)); + real nvers(tt_vn.get(5)); + real crf24(tt_ln.get(7)); + TDate odate(tt_vo.get(1)); + TDate ndate(tt_vn.get(1)); + TString odbcr(tt_lo.get(5)); + TString ndbcr(tt_ln.get(5)); + TString oabi (tt_vo.get(2)); + TString nabi (tt_vn.get(2)); + TString ocab (tt_vo.get(3)); + TString ncab (tt_vn.get(3)); + TString ocon (tt_vo.get(4)); + TString ncon (tt_vn.get(4)); + TString descr(tt_ln.get(9)); + + if (odbcr == "C") orett = -orett; + if (ndbcr == "C") nrett = -nrett; + + // acconto (si considerera' solo a dicembre) + TToken_string& vo = (TToken_string&)_vers_rows[_freqviva == "M" ? 11 : 3]; + TToken_string& vn = sv.row(_freqviva == "M" ? 11 : 3); + real oacct (vo.get(5)); + real nacct (vn.get(5)); + TDate aodate(vo.get(1)); + TDate andate(vn.get(1)); + TString aoabi (vo.get(2)); + TString anabi (vn.get(2)); + TString aocab (vo.get(3)); + TString ancab (vn.get(3)); + TString aocon (vo.get(4)); + TString ancon (vn.get(4)); + + was_lim = look_lim(i); + if (!was_lim) + carry = FALSE; // blocca riporto crediti e debiti + + // ricalcola crediti e debiti se non ci sono + // liquidazioni non calcolate in mezzo + if (carry) + { + bool rt_mod = FALSE, rm_mod = FALSE, vr_mod = FALSE; + + real risl = _lim->get_real("R0"); + real vers = _lim->get_real("R8"); + real risc = _lim->get_real("R12"); + real risd = _lim->get_real("R13"); + + // ricalcola acconto se occorre + // e crea/aggiorna la delega + if (i == 12) + { + bool ac_mod = FALSE; + if (oacct != nacct) + { + risc -= oacct; + risc += nacct; + risl += oacct; + risl -= nacct; + _lim->put("R11", nacct); + ac_mod = TRUE; + } + if (ndate != odate || anabi != aoabi || ancab != aocab || ancon != aocon) + ac_mod = TRUE; + // write delega acconto + if (ac_mod) + { + const int res = look_ver(12,7,true); + + if (res == 1) + { + _del->put("R0",nacct); + _del->zero("R1"); + _del->put("S7",anabi); + _del->put("S8",ancab); + _del->put("S9",ancon); + _del->put("S6","6013"); + _del->rewrite(); + } + else + if (res == 2) + { + TLocalisamfile & f24 = *_f24; + + f24.put(F24_IMPORTODEB, nacct); + f24.put(F24_ABI,anabi); + f24.put(F24_CAB,ancab); + f24.rewrite(); + } + + } + } + + // ricalcola versamenti se occorre + // e crea/aggiorna le deleghe + if (nvers != overs) + { + vr_mod = TRUE; + } + if (vr_mod || ndate != odate || nabi != oabi || + ncab != ocab || ncon != ocon) + { + _lim->put("R8", nvers); + _lim->put("D0", ndate); + _lim->put("S4", nabi); + _lim->put("S5", ncab); + _lim->put("S6", ncon); + write_del(); + vr_mod = TRUE; + } + + // se modificate rettifiche + // sistemare + if (nrett != orett && !_from_one) + { + // toglie vecchie + risl -= orett; + if (orett.sign() < 0) + risc += orett; + else + risd -= orett; + // aggiunge nuove + risl += nrett; + if (orett.sign() < 0) + risc -= nrett; + else + risd += nrett; + + // scrivi + _lim->put("R5",nrett); + tt_lo.add(nrett.string(), 4); + tt_lo.add(nrett.sign() > 0 ? "D" : (nrett.is_zero() ? "" : "C"), 5); + + // elimina descrixioni se nuove rett. sono 0 + if (nrett.is_zero()) + { + _lim->put("S0",""); + _lim->put("S1",""); + } + } + + // controlla se qualcosa e' modificato e scrivi + // il valore; check compatibilita' versamenti e rimborsi + + // rileggi dati + real cred = _lam->get_real("R2"); + real debt = _lam->get_real("R3"); + real intt = _lim->get_real("R10"); + + // toglie vecchio credito e debito + risl += cred; + risl -= debt; + risc -= cred; + risd -= debt; + + // aggiunge nuovo credito o debito + real min = min_vers(_year, i); + if (rstart.sign() < 0 || (rstart.sign() > 0 && rstart < min)) + risl += rstart; + + real newcred(0.0); + real newdebt(0.0); + if (rstart.sign() < 0) + { + newcred = -rstart; + risc -= rstart; + } + if (rstart.sign() > 0 && rstart < min) + { + newdebt = rstart; + risd += rstart; + } + + // se modificato rimborso sistemare + if (nrimb != orimb && !_from_one) + { + // check compatibilita' + bool ok = TRUE; + + if (!nrimb.is_zero()) + { + if (risc <= risd) + ok = yesno_box(FR("Il risultato IVA non evidenzia crediti nel mese %d. Si conferma " + " il rimborso?"), i); + if (!_lim->get_bool("B2") && ok) + ok = yesno_box(FR("Non risulta diritto al rimborso per il mese %d. Si conferma" + " il rimborso?"), i); + } + + if (ok) + { + // togli vecchio + risd -= orimb; + risl -= orimb; + // aggiungi nuovo + risd += nrimb; + risl += nrimb; + // scrivi + _lim->put("R1", nrimb); + tt_lo.add(nrimb.string(), 3); + } + } + _lam->put("R2", newcred); + _lam->put("R3", newdebt); + _lim->put("R0", risl); + _lim->put("R12", risc); + _lim->put("R13", risd); + + if (intt.sign() > 0) // interessi + { + real intr = risl * intt / real(100.0); + if (_year >= 2000) + round_imposta(intr); + _lim->put("R14",intr); + } + + _lim->put("R16", crf24); + if (new_age_2000) + { + const real criva(tt_ln.get(6)); + if (cr_res > ZERO) + { + cr_res -= crf24; + cr_res -= criva; + } + if (cr_res < ZERO) + cr_res = ZERO; + } + _lim->put("S3", descr); + + _lim->rewrite(); + _lam->rewrite(); + + rstart = risl; + } + else + { + // salva i valori modificati senza fare controlli + // e rimetti a lui i suoi debiti mettendo B0 a FALSE + if (was_lim) + { + if (orett != nrett) + _lim->put("R5", nrett); + if (orimb != nrimb) + _lim->put("R1", nrimb); + _lim->put("R16", crf24); + _lim->put("S3", descr); + _lim->put("B0", ""); + _lim->rewrite(); + } + } + + // Rimetti a posto righe sheet se serve + if (was_lim) + { + int sr0 = (_lim->get_real("R0")).sign(); + int sr5 = (_lim->get_real("R5")).sign(); + + real r0abs = abs(_lim->get_real("R0")); + real r5abs = abs(_lim->get_real("R5")); + + tt_ln.add(r0abs.string(),1); + tt_ln.add(sr0 == 0 ? "" : (sr0 > 0 ? "D" : "C"), 2); + tt_ln.add((_lim->get_real("R1")).string(),3); + tt_ln.add(r5abs.string(),4); + tt_ln.add(sr5 == 0 ? "" : (sr5 > 0 ? "D" : "C"),5); + tt_ln.add(cr_res.string(),8); + + // sh.force_update(row); + } + _from_one = FALSE; + } // for mese liq. (riga sheet) + + sh.force_update(); + if (shm.is_running()) + sh.force_update(sh.selected()); + // Rileggi array righe vecchie + set_vers_rows(sv); + set_liq_rows(sh); + + // m.dirty() deve ritornare FALSE + m.field(F_CREDPREC).set_dirty(FALSE); + m.field(F_VISLIQ1).set_dirty(_sh_dirty=FALSE); + m.field(F_VISLIQ2).set_dirty(_sv_dirty=FALSE); +} + + + +int cg5500(int argc, char* argv[]) +{ + Visliq_app app; + app.run(argc, argv, TR("Visualizzazione Liquidazione")); + return 0; +} diff --git a/src/cg/modf24/cg5500.h b/src/cg/modf24/cg5500.h new file mode 100755 index 000000000..573c48ee2 --- /dev/null +++ b/src/cg/modf24/cg5500.h @@ -0,0 +1,129 @@ +#include +#include +#include +#include + +// IVA a debito da riportare al mese successivo + +class TSheet_field; +class TViswin; + +class Visliq_app : public TSkeleton_application +{ + TString _freqviva; + int _year; + long _firm; + + TRelation* _nditte; + TLocalisamfile * _f24; + TArray_sheet* _ditte; + TString_array _nomiditte; + + TTable* _lim; + TTable* _lam; + TTable* _lia; + TTable* _del; + + TRectype* _lim_r; + TRectype* _lam_r; + TRectype* _del_r; + TRecfield* _del_ditta; + TRecfield* _del_anno; + TRecfield* _del_mese; + TRecfield* _del_tipo; + TRecfield* _lim_anno; + TRecfield* _lim_mese; + TRecfield* _lam_anno; + TRecfield* _lam_mese; + bool _has_f24; + + + TSheet_field* _vers_sheet, *_liq_sheet; + TArray _vers_rows, _liq_rows; + TMask* _mask; + bool _from_one; + bool _is_annual; + bool _sh_dirty, _sv_dirty; + + const char* itoname(int m); + + bool is_trim(int x); + bool is_month_ok(int x, int month = -1); + +protected: + + virtual void main_loop(); + virtual bool create(); + virtual bool destroy(); + + // handlers + static bool set_ditta(TMask_field&, KEY); + static bool set_ragsoc(TMask_field&, KEY); + static bool sel_mese_sh1 (TMask_field&, KEY); + static bool sel_mese_sh2 (TMask_field&, KEY); + static bool ch_year_handler(TMask_field& f, KEY key); + + static const char* link_handler(TMask&, int, const char*, bool doubleclick); + + static bool sheet_action(TSheet_field& s, int r, KEY k); + static bool vers_action(TSheet_field& s, int r, KEY k); + +public: + virtual bool firm_change_enabled() const { return FALSE; } + + static Visliq_app& app() { return (Visliq_app&)main_app(); } + TArray_sheet* get_ditte_sheet() { return _ditte; } + + void build_ditte_sheet(); + void build_nomiditte(); + + bool look_lia(long ditta = 0l, int year = 0); + bool look_lim(int m); + bool look_del(int month, int type, bool create = false); + bool look_f24(int month, int type, bool create = false); + int look_ver(int month, int type, bool create = false); + + + void read_general(TMask& m); + void write_general(TMask& m); + void write_liq(); + void write_del(); + + void set_freqviva(); + void set_freqviva(const char* f) { _freqviva = f; } + void set_mask_freq(TMask&); + void set_year(const char* y) { _year = atoi(y); } + void set_year(int y) { _year = y; } + void reset_fields(); + + void set_liq_rows (TSheet_field& s) { _liq_rows = s.rows_array(); } + void set_vers_rows(TSheet_field& s) { _vers_rows = s.rows_array(); } + + // 2 palle + TMask* get_main_mask() { return _mask; } + bool select_butt(TMask& m); + TTable* del() { return _del; } + + real Visliq_app::min_vers(int anno, int month); + // riaggiusta la liquidazione del mese dato + void recalc_liq_data(TViswin* v, real& rimb, real& rett, real& vers, real& acc, + real& varimp, real& impnonver, real& credspec, + TString& d1, TString& d2, TString& d3, TDate& date, + TString& abi, TString& cab, TString& con); + + // Calcolo del credito utilizzato IVA ed F24 + real credito_utilizzato(int year, int month) const; + + // riaggiusta le liquidazioni successive se serve + void recalc_next_liq(int start_month, TSheet_field* sl, TSheet_field* sv); + + // workhorses + void vis_liq(); + bool vis_all(); + bool vis_one(int); + + Visliq_app() : _vers_sheet(NULL), _liq_sheet(NULL) {} + virtual ~Visliq_app() {} +}; + +inline Visliq_app& app() { return (Visliq_app&) main_app(); } diff --git a/src/cg/modf24/cg5501.cpp b/src/cg/modf24/cg5501.cpp new file mode 100755 index 000000000..654051ba8 --- /dev/null +++ b/src/cg/modf24/cg5501.cpp @@ -0,0 +1,137 @@ +#include "cg5500.h" +#include +#include + +bool Visliq_app::look_lim(int m) +{ + bool ok = FALSE; + + _lim_r->zero(); + _lam_r->zero(); + (*_lim_anno) = _year; + (*_lim_mese) = format("%02d",m); + + if (_lim->read() == NOERR) + { + (*_lam_anno) = _year; + (*_lam_mese) = format("%02d",m); + _lam->read(); + } + else + { + _lim_r->zero(); + (*_lim_anno) = _year; + (*_lim_mese) = format("%02d",m); + } + + return _lim->good() && _lam->good(); +} + +bool Visliq_app::look_del(int month, int type, bool create) +{ + _del->zero(); + (*_del_ditta) = format("%05ld", get_firm()); + (*_del_anno) = _year; + (*_del_mese) = format("%02d", month); + (*_del_tipo) = format("%1d", type); + + TString16 ctab = _del->get("CODTAB"); + _del->read(); + + bool ok = _del->good(); + + if (!ok && create) + { + _del->zero(); + _del->put("CODTAB",ctab); + _del->write(); + } + return ok; +} + +bool Visliq_app::look_f24(int month, int type, bool create) +{ + TLocalisamfile & f24 = *_f24; + const bool mensile = _freqviva == "M"; + + int codtrib = mensile ? 6000 + month : 6031 + (month / 3); + + if (type == 7) + codtrib = mensile ? 6013 : 6035; + + f24.setkey(4); + f24.put(F24_TIPOINTEST, "D"); + f24.put(F24_INTEST, get_firm()); + f24.put(F24_DATASCAD, _year); + f24.put(F24_TRIBUTO, codtrib); + const bool found = f24.read(_isgteq) == NOERR && codtrib == f24.get_int(F24_TRIBUTO); + if (create && !found) + { + long progr = 0L; + TDate scad( type == 7 ? 27 : 16, (mensile || type == 7) ? month : ((month + 2) / 3) * 3), _year); + + while (scad.wday() > 5) + ++scad; + if (month < 13 && type != 7) + scad.addmonth(mensile ? 1 : 2); + if (f24.last() == NOERR) + progr = f24.get_long(F24_PROGR); + progr++; + f24.zero(); + f24.put(F24_PROGR, progr); + + f24.put(F24_TRIBUTO, codtrib); + f24.put(F24_TIPOINTEST, "D"); + f24.put(F24_INTEST, get_firm()); + if (month >= 13) + { + if (type == 7) + f24.put(F24_DESCR, "Acconto IVA"); + else + f24.put(F24_DESCR,"IVA annuale"); + } + else + f24.put(F24_DESCR, format("IVA mese di %s %s", itom(month), (const char *)_year)); + f24.put(F24_DATASCAD, scad); + f24.put(F24_ANNO, _year); + } + return found; +} + +int Visliq_app::look_ver(int month, int type, bool create) +{ + if (look_del(month, type, create)) + return 1; + else + if (app()._has_f24 && look_f24(month, type, create)) + return 2; + return -1; +} + +bool Visliq_app::look_lia(long ditta, int year) +{ + if (year == 0) year = _year; + if (ditta == 0l) ditta = get_firm(); + TString16 y; y << format("%05ld", ditta); y << year; + + _lia->zero(); + _lia->put("CODTAB", y); + _lia->read(); + + return _lia->good(); +} + + +bool Visliq_app::is_trim(int x) + // TRUE se il mese passato e' un trimestre +{ return x == 3 || x == 6 || x == 9 || x == 12; } + +bool Visliq_app::is_month_ok(int x, int month) + // TRUE se il mese passato e' compatibile con il regime + // di liquidazione e (opz) non e' maggiore di quello scelto +{ + if (month == -1) month = x; + return _freqviva == "M" ? + ( x > 0 && x <= month) : + ( x <= month && is_trim(x)); +} diff --git a/src/cm/cm1100.cpp b/src/cm/cm1100.cpp index e44b97df4..1ceafa2b6 100755 --- a/src/cm/cm1100.cpp +++ b/src/cm/cm1100.cpp @@ -10,7 +10,7 @@ #include #include "..\cg\cgsaldac.h" -#include "..\cg\cglib.h" +#include "..\cg\cg2103.h" #include "..\ve\velib.h" #include "cm1100a.h" diff --git a/src/crpa/crpa0.cpp b/src/crpa/crpa0.cpp index 623adbdb0..c40cda5b5 100755 --- a/src/crpa/crpa0.cpp +++ b/src/crpa/crpa0.cpp @@ -11,7 +11,7 @@ #include "../ce/collces.h" #include "../ve/velib.h" -#include "../cg/cglib.h" +#include "../cg/cg2103.h" #include "../ca/movana.h" #include "../ca/rmovana.h" diff --git a/src/db/db0500.cpp b/src/db/db0500.cpp index bfbdfd8a2..6104e7033 100755 --- a/src/db/db0500.cpp +++ b/src/db/db0500.cpp @@ -972,7 +972,7 @@ private: protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - bool test_row(int nrow); + bool test_row(const TToken_string& row); void load_um(); static void sheetrighe_get(TSheet_field &fld_righe, int item); @@ -1071,13 +1071,12 @@ void TDistinta_mask::load_um() } -bool TDistinta_mask::test_row(int nrow) +bool TDistinta_mask::test_row(const TToken_string& row) { - TSheet_field& sheet = sfield(F_SHEET); const TCodice_articolo father = get(F_CODICE); - TCodice_articolo code = sheet.get_str_row_cell(nrow, F_CODART); - bool ok = code != father; + TCodice_articolo code; row.get(1, code); + bool ok = code != father; if (ok && _tree.find_node(father) > 0) { TToken_string path; _tree.curr_id(path); @@ -1089,9 +1088,12 @@ bool TDistinta_mask::test_row(int nrow) "in quanto la distinta risulterebbe ciclica."), (const char*)code); // Se e' una lavorazione - if ((get(F_TIPO) == "L") && - !(sheet.get_str_row_cell(nrow, F_TIPOCOMP) == "L" && _tree.is_lav(code))) - return error_box(FR("Il codice '%s' non e' una lavorazione"), (const char*)code); + if (get(F_TIPO)[0] == 'L') + { + ok = row[0] == 'L' && _tree.is_lav(code); + if (!ok) + error_box(FR("Il codice '%s' non e' una lavorazione"), (const char*)code); + } return ok; } @@ -1168,47 +1170,41 @@ bool TDistinta_mask::on_unitsheet_event(TOperable_field& o, TField_event e, long bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long jolly) { const short id = o.dlg(); - switch (id) { case F_SHEET: - if (e == se_notify_add || e == se_notify_modify || e == fe_close) + if (e == se_notify_add || e == se_notify_modify || e == fe_close) { - - + TSheet_field& sheet = (TSheet_field&)o; + const int nrig = int(jolly); + TToken_string& row = sheet.row(nrig); switch(e) { case se_notify_add: - { - TSheet_field& sheet = (TSheet_field&)o; - const int nrig = int(jolly); - - sheet.set_row_cell(F_TIPOCOMP, "A", nrig); // Forza il listbox ad articolo - sheet.set_row_cell(F_EXPR, 1, nrig); // Forza la quantita' ad 1 - sheet.set_row_cell(F_SORT0, nrig + 1, nrig); // Inizializza numero riga - sheet.select(nrig); - sheet.force_update(nrig); - } + row.add("A", F_TIPOCOMP-FIRST_FIELD); // Forza il listbox ad articolo + row.add("", F_EXPR-FIRST_FIELD); // Forza la quantita' ad 1 + row.add(nrig+1, F_SORT0-FIRST_FIELD); // Inizializza numero riga + sheet.select(nrig); break; case se_notify_modify: - return test_row(int(jolly)); - break; + return test_row(row); case fe_close: { - TSheet_field& sheet = (TSheet_field&)o; - const int nrig = int(jolly); TString80 code; - + TString80 code1; for (int n = sheet.items()-1; n >= 0; n--) { - code = sheet.get_str_row_cell(n, F_CODART); - if (code.full()) + const TToken_string& row = sheet.row(n); + row.get(F_CODART-FIRST_FIELD, code); + if (!code.blank()) { - if (!test_row(nrig)) + if (!test_row(row)) return false; for (int m = n - 1; m >= 0; m--) { - if (code == sheet.get_str_row_cell(m, F_CODART)) + const TToken_string& row = sheet.row(m); + row.get(F_CODART-FIRST_FIELD, code1); + if (code == code1) { int k = noyesall_box("Il codice %s e' ripetuto alla riga %d,\ncontinuare ugualmente ?", (const char *) code, n + 1); if (k == K_NO) @@ -1223,7 +1219,7 @@ bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long sheet.destroy(n); } } - if (((TSheet_field&)o).items() == 0) + if (sheet.items() == 0) message_box(TR("E' necessario inserire almeno una riga nella distinta")); break; default: diff --git a/src/db/db0500b.uml b/src/db/db0500b.uml index 2b02867c7..093d820b2 100755 --- a/src/db/db0500b.uml +++ b/src/db/db0500b.uml @@ -246,13 +246,13 @@ LIST F_TIPOCOMP 1 12 BEGIN PROMPT 2 1 "Tipo " ITEM "A|Articolo" - MESSAGE SHOW,11@|HIDE,12@|HIDE,13@|HIDE,14@|ENABLE,F_UMEXPR|ENABLE,11@|CLEAR,12@|CLEAR,13@|CLEAR,14@ + MESSAGE SHOW,11@|HIDE,12@|HIDE,13@|HIDE,14@|ENABLE,F_UMEXPR|ENABLE,11@|DISABLE,12@|DISABLE,13@|DISABLE,14@ ITEM "L|Lavorazione" - MESSAGE HIDE,11@|SHOW,12@|HIDE,13@|HIDE,14@|CLEAR,F_UMEXPR|CLEAR,11@|ENABLE,12@|CLEAR,13@|CLEAR,14@ + MESSAGE HIDE,11@|SHOW,12@|HIDE,13@|HIDE,14@|DISABLE,F_UMEXPR|DISABLE,11@|ENABLE,12@|DISABLE,13@|DISABLE,14@ ITEM "D|Distinta" - MESSAGE HIDE,11@|HIDE,12@|SHOW,13@|HIDE,14@|ENABLE,F_UMEXPR|CLEAR,11@|CLEAR,12@|ENABLE,13@|CLEAR,14@ + MESSAGE HIDE,11@|HIDE,12@|SHOW,13@|HIDE,14@|ENABLE,F_UMEXPR|DISABLE,11@|DISABLE,12@|ENABLE,13@|DISABLE,14@ ITEM "V|Variabile" - MESSAGE HIDE,11@|HIDE,12@|HIDE,13@|SHOW,14@|CLEAR,F_UMEXPR|CLEAR,11@|CLEAR,12@|CLEAR,13@|ENABLE,14@ + MESSAGE HIDE,11@|HIDE,12@|HIDE,13@|SHOW,14@|CLEAR,F_UMEXPR|DISABLE,11@|DISABLE,12@|DISABLE,13@|ENABLE,14@ FIELD TIPO END @@ -282,8 +282,8 @@ BEGIN OUTPUT F_CODLAV CODTAB OUTPUT F_DESLAV S0 CHECKTYPE REQUIRED - FIELD CODCOMP - FLAGS "UHD" + FIELD CODCOMP + FLAGS "UHD" GROUP 12 END @@ -297,7 +297,7 @@ BEGIN OUTPUT F_CODDIS CODDIST OUTPUT F_DESDIS DESCR CHECKTYPE REQUIRED - FIELD CODCOMP + FIELD CODCOMP FLAGS "UHD" GROUP 13 END diff --git a/src/db/db1100.cpp b/src/db/db1100.cpp index 30c8a5dfc..31cf11395 100755 --- a/src/db/db1100.cpp +++ b/src/db/db1100.cpp @@ -11,7 +11,7 @@ #include #include -#include "../cg/cglib.h" +#include "../cg/cglib01.h" #include "../mg/mglib.h" #include "../ve/velib.h" #include "dblib.h" diff --git a/src/db/db1300.cpp b/src/db/db1300.cpp index 2f9214c51..64dc7af85 100755 --- a/src/db/db1300.cpp +++ b/src/db/db1300.cpp @@ -454,7 +454,7 @@ int TImplosion_mask::find_roots(const char* articolo, TAssoc_array& roots) const TAssoc_array ass[2]; int c = 0; // Array dei children = 0; fathers = 1 - ass[c].add(articolo); + ass[c].add(articolo, NULL); const char* cap = FR("Livello %d - Articoli %ld"); TString caption; caption.format(cap, 0, 0L); @@ -478,7 +478,7 @@ int TImplosion_mask::find_roots(const char* articolo, TAssoc_array& roots) const for (cur = 0L; cur.pos() < cur.items(); ++cur) { const TString& father = cur.curr().get("CODDIST"); - ass[!c].add(father); + ass[!c].add(father, NULL); } cur.freeze(FALSE); } @@ -559,7 +559,7 @@ void TImplosion_mask::implode_slow() key << row->get(); key.rtrim(); } - _xmas.add(key); + _xmas.add(key, NULL); } } @@ -623,7 +623,7 @@ void TImplosion_mask::implode_medium() key = articolo; if (livello.not_empty()) key << '|' << livello; - _xmas.add(key); + _xmas.add(key, NULL); TAssoc_array roots; const long items = find_roots(articolo, roots); diff --git a/src/db/dbtblav.h b/src/db/dbtblav.h index c4c769a92..59ecc28ad 100755 --- a/src/db/dbtblav.h +++ b/src/db/dbtblav.h @@ -1,25 +1,25 @@ -#define F_CODICE 201 -#define F_DESCR 202 -#define F_COSUNIT 203 -#define F_UNMIS 204 -#define F_STAMPA 205 -#define F_UMDESC 206 -#define F_CODICEART 207 -#define F_SEARCHART 208 -#define F_SHEET 209 -#define F_NUMPERS 210 -#define F_PRODUTTIV 211 -#define F_UNTEMPO 212 -#define F_DESUNTEMPO 213 -#define F_UNMIS2 214 -#define F_LINEESTD 215 -#define F_PERCMIN 216 -#define F_PRODNRIL 217 +#define F_CODICE 101 +#define F_DESCR 102 +#define F_COSUNIT 103 +#define F_UNMIS 104 +#define F_STAMPA 105 +#define F_UMDESC 106 +#define F_CODICEART 107 +#define F_SEARCHART 108 +#define F_SHEET 109 +#define F_NUMPERS 110 +#define F_PRODUTTIV 111 +#define F_UNTEMPO 112 +#define F_DESUNTEMPO 113 +#define F_UNMIS2 114 +#define F_LINEESTD 115 +#define F_PERCMIN 116 +#define F_PRODNRIL 117 -#define F_CODLIN 101 -#define F_DESCRLIN 102 -#define F_CODIMP 103 -#define F_LNUMPERS 104 -#define F_LPRODUTTIV 105 +#define F_CODLIN 101 +#define F_DESCRLIN 102 +#define F_CODIMP 103 +#define F_LNUMPERS 104 +#define F_LPRODUTTIV 105 #define F_DESCRIMP 120 diff --git a/src/ef/ef0100.cpp b/src/ef/ef0100.cpp index 563425b55..3e70dde8d 100755 --- a/src/ef/ef0100.cpp +++ b/src/ef/ef0100.cpp @@ -524,23 +524,6 @@ bool TEffetti_mask::on_field_event(TOperable_field& o, TField_event e, long joll if (e == fe_modify) sfield(F_SHEET_RIGHE).set_focusdirty(); break; - case F_IBAN_STATO: - if (mode() == MODE_MOD && e == fe_init) - { - TRelation * rel = app().get_relation(); - - if (rel != nullptr) - { - TRectype & rec = rel->lfile().curr(); - - if (rec.get(EFF_IBAN).empty()) - { - set(F_CODABI, rec.get(EFF_CODABI)); - set(F_CODCAB, rec.get(EFF_CODCAB)); - return true; - } - } - } case F_SHEET_RIGHE: return on_sheet_event(o, e, jolly); default: diff --git a/src/f1/f1lib.cpp b/src/f1/f1lib.cpp index 2147194f3..bea30c9ba 100644 --- a/src/f1/f1lib.cpp +++ b/src/f1/f1lib.cpp @@ -20,14 +20,20 @@ TFppro& fppro_db() return *fppro; } -bool TFppro::sql_inj(TToken_string& keys) +bool TFppro::sql_inj(const TString& str) +{ + TString appo; appo << str; + appo.upper(); + return appo.contains("--") || appo.contains("SELECT") || appo.contains("DELETE") || appo.contains("DROP"); +} + +bool TFppro::sql_inj(const keys_s& keys) { TToken_string str("", ';'); - - str.add(keys.get(0)); - str.add(keys.get(1)); - str.add(keys.get(2)); - return str.contains("--") || str.contains("SELECT") || str.contains("DELETE") || str.contains("DROP"); + str.add(keys.prginvio); + str.add(keys.headerfatt); + str.add(keys.bodyfatt); + return sql_inj(str); } bool TFppro::check_reg(TToken_string& keys, int numreg) @@ -38,74 +44,68 @@ bool TFppro::check_reg(TToken_string& keys, int numreg) bool TFppro::guess_the_doc(const TLocalisamfile& mov) { // Prendo il fornitore del mov per controllare la p.iva - TCli_for forn = cached_clifor('F', mov.get_long(MOV_CODCF)); - - const TString4 statopiva(forn.get(CLI_STATOPAIV)); - + TLocalisamfile clifo(LF_CLIFO); + clifo.put(CLI_TIPOCF, "F"); + const TString& codforn = mov.get(MOV_CODCF); + clifo.put(CLI_CODCF, codforn); + clifo.read(); + TString cli_statopiva, cli_piva; + cli_statopiva << clifo.get(CLI_STATOPAIV); + cli_piva << clifo.get(CLI_PAIV); const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC); TString numdoc = mov.get(MOV_NUMDOCEXT); - if (numdoc.empty()) numdoc = mov.get(MOV_NUMDOC); // Controllo datadoc - numdoc - totdoc - p.iva - TString query; - - query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" << - "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << - "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << - "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << - "WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" << - "(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n"; - if (statopiva.full()) - query << "' AND \n" << "P2_FISCIVAPAESE = '" << statopiva; - query << "' AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV); - if (forn.gruppo_IVA()) - query << "' AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI); // cazzo; - query << "PQ_IMPTOTDOC = " << tot; + query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" << + "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << + "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << + "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" << + "WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" << + "(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') AND \n" << + (cli_statopiva.full() ? TString("P2_FISCIVAPAESE = '") << cli_statopiva << "' AND " : "") << + "P2_FISCIVACOD = '" << cli_piva << "' AND \n" << "PQ_IMPTOTDOC = " << tot; if (_db->sq_set_exec(query) && _db->sq_items() == 1) { - _keys = _db->sq_get("KEYPRGINVIO"); - _keys.add(_db->sq_get("KEYHEADERFATT")); - _keys.add(_db->sq_get("KEYBODYFATT")); + _keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") }; return true; } + return false; } -const char* TFppro::get_keys_fppro() +const char* TFppro::get_keys_fppro() const { - TString& keys = get_tmp_string(64); - - keys.cut(0) << _keys.get(0) << ";" << _keys.get(1) << ";" << _keys.get(2); - return keys; + static TString keys; + keys.cut(0) << _keys.prginvio << ";" << _keys.headerfatt << ";" << _keys.bodyfatt; + return (const char*)keys; } -long TFppro::get_numreg() +int TFppro::get_numreg() { if (!_is_set) { if (set_query()) - return _db->sq_get_long("PZ_NUMREGCONT"); + return _db->sq_get_int("PZ_NUMREGCONT"); return -1; } - return _db->sq_get_long("PZ_NUMREGCONT"); + return _db->sq_get_int("PZ_NUMREGCONT"); } -long TFppro::get_numreg(TToken_string& keys) +int TFppro::get_numreg(TToken_string& keys) { set_keys(keys); return get_numreg(); } -long TFppro::get_codforn() +TString TFppro::get_codforn() const { TString query; - query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get_long("PZ_CLIFOR"); + return _db->sq_get("PZ_CLIFOR"); } TDate TFppro::get_datareg() @@ -127,13 +127,12 @@ TDate TFppro::get_datareg(TToken_string& keys) return TDate(); } -real TFppro::get_ritenute() +real TFppro::get_ritenute() const { - real imp; + real imp = ZERO; TString query; - query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << - "WHERE P7_KEYPRGINVIO = '" << _keys.get(0) << "' AND P7_KEYHEADERFATT = '" << _keys.get(1) << "' AND P7_KEYBODYFATT = '" << _keys.get(2) << "'"; + "WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; _db->sq_set_exec(query, false); for(bool ok = _db->sq_next(); ok; ok = _db->sq_next()) imp += _db->sq_get_real("IMPORTO"); @@ -141,69 +140,66 @@ real TFppro::get_ritenute() } TFppro& TFppro::set_keys(TToken_string& keys) +{ + if (keys.items() == 3) + { + const keys_s k = { keys.get(0), keys.get(1), keys.get(2) }; + return set_keys(k); + } + _is_set = false; + _keys_setted = false; + return *this; +} + +TFppro& TFppro::set_keys(const keys_s& keys) { if (sql_inj(keys)) { TString msg; msg << "Database error: Possibile SQL INJECTION:\n" << keys; -; + //throw std::exception(msg); error_box(msg); _last_error.cut(0) << msg; } + else if (!keys.prginvio.empty() && !keys.headerfatt.empty() && !keys.bodyfatt.empty()) + { + _keys = keys; + _keys_setted = true; + } else { - TString prginvio = keys.get(0); - TString headerfatt = keys.get(1); - TString bodyfatt = keys.get(2); - - if (prginvio.full() && headerfatt.full() && bodyfatt.full()) - { - _keys = keys; - _keys_setted = true; - } - else - { - _last_error = "Chiavi settate non valide:\n"; - _last_error << keys; - _keys_setted = false; - } + _last_error.cut(0) << "Chiavi settate non valide:\n" << keys; + _keys_setted = false; } _is_set = false; return *this; } -bool TFppro::associa_mov(const long numreg) +bool TFppro::associa_mov(const int numreg) const { - TRectype & mov = (TRectype &) cache().get(LF_MOV, numreg); - bool ok = mov.full(); - - if (ok) + bool ok; + TLocalisamfile mov(LF_MOV); + mov.put(MOV_NUMREG, numreg); + if ((ok = mov.read() == NOERR)) { - TString query; - query << "UPDATE FPPRO00F \nSET " << - "PZ_TIPOCF = 'F', PZ_CLIFOR = '" << mov.get(MOV_CODCF) << "', PZ_NUMREGCONT = '" << - mov.get(MOV_NUMREG) << "', PZ_DATAREGCONT = '" << mov.get_date(MOV_DATAREG).date2ansi() << "'\n" << - fppro_db().where_str() << ";"; - ok = _db->sq_set_exec(query) && _db->sq_commit(); - - if (ok) // Scrivo sul movimento il riferimento al fppro + mov.put(MOV_KEYFPPRO, get_keys_fppro()); + if ((ok = mov.rewrite() == NOERR)) // Scrivo sul movimento il riferimento al fppro { - mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc()); - mov.put(MOV_DATADOCSDI, fppro_db().get_numdoc()); - mov.put(MOV_KEYFPPRO, get_keys_fppro()); - ok = mov.rewrite() == NOERR; - } - else // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro - { - mov.zero(MOV_IDDOCSDI); - mov.zero(MOV_DATADOCSDI); - mov.zero(MOV_KEYFPPRO); - mov.rewrite(); + TString query; + query << "UPDATE FPPRO00F \nSET " << + "PZ_TIPOCF = 'F', PZ_CLIFOR = '" << mov.get(MOV_CODCF) << "', PZ_NUMREGCONT = '" << + mov.get(MOV_NUMREG) << "', PZ_DATAREGCONT = '" << mov.get_date(MOV_DATAREG).date2ansi() << "'\n" << + fppro_db().where_str() << ";"; + if (!((ok = _db->sq_set_exec(query) && _db->sq_commit()))) // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro + { + mov.put(MOV_KEYFPPRO, ""); + mov.rewrite(); + } } } return ok; } -const TString & TFppro::get_tipoprot() +const char* TFppro::get_tipoprot() const { TString query; @@ -212,98 +208,80 @@ const TString & TFppro::get_tipoprot() return _db->sq_get("TIPOPROT"); } -const TString & TFppro::get_numprot() +const char* TFppro::get_numprot() const { TString query; - + static TString num; query << "SELECT PZ_NUMPROT AS NUMPROT FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - - return _db->sq_get("NUMPROT"); + return num.cut(0) = _db->sq_get("NUMPROT"); } -const TString & TFppro::get_annoprot() +const char* TFppro::get_annoprot() const { TString query; - + static TString anno; query << "SELECT PZ_ANNOPROT AS ANNOPROT FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get("ANNOPROT"); + return anno.cut(0) = _db->sq_get("ANNOPROT"); } -const TString & TFppro::get_dataoraric() +const char* TFppro::get_dataoraric() const { TString query; - TString & data = get_tmp_string(16); - - query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str(); + static TString data; + query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - data << _db->sq_get_date("DATAORARIC").date2ansi(); - return data; + return data.cut(0) << _db->sq_get_date("DATAORARIC").date2ansi(); } -const TString & TFppro::get_tipodoc() +const char* TFppro::get_tipodoc() const { TString query; - + static TString tipodoc; query << "SELECT PZ_TIPODOC AS TIPODOC FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get("TIPODOC"); + return tipodoc.cut(0) << _db->sq_get("TIPODOC"); } -const TString & TFppro::get_numdoc() +const char* TFppro::get_numdoc() const { TString query; - + static TString numdoc; query << "SELECT PZ_NUMERO AS NUMDOC FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get("NUMDOC"); + return numdoc.cut(0) << _db->sq_get("NUMDOC"); } TDate TFppro::get_data_first_doc() const { TString query; - query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" << "\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a"; _db->sq_set_exec(query); return _db->sq_get_date("DATA"); } -TDate TFppro::get_data_doc() +TDate TFppro::get_dataorarioric() const { TString query; - - query << "SELECT PZ_DATA FROM FPPRO00F\r\n" << where_str(); - _db->sq_set_exec(query); - return _db->sq_get_date("PZ_DATA"); -} - - -TDate TFppro::get_dataorarioric() -{ - TString query; - query << "SELECT P1_DATAORARIC \nFROM PAA0100F \n" << - "WHERE P1_KEYPRGINVIO = '" << _keys.get(0) << "' AND P1_KEYHEADERFATT = '" << _keys.get(1) << "' AND P1_KEYBODYFATT = '" << _keys.get(2) << "'"; + "WHERE P1_KEYPRGINVIO = '" << _keys.prginvio << "' AND P1_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P1_KEYBODYFATT = '" << _keys.bodyfatt << "'"; _db->sq_set_exec(query); return _db->sq_get_date("P1_DATAORARIC"); } -long TFppro::get_numregcont() +int TFppro::get_numregcont() const { TString query; - query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get_long("PZ_NUMREGCONT"); + return _db->sq_get_int("PZ_NUMREGCONT"); } TString TFppro::get_last_error(bool clear) { - TString & l = get_tmp_string(128); - - l = _last_error; + TString l(_last_error); if(clear) _last_error.cut(0); return l; @@ -319,14 +297,14 @@ bool TFppro::set_query() return _is_set = false; } -const char* TFppro::where_str() +const char* TFppro::where_str() const { static TString str; - str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.get(0) << "' AND PZ_KEYHEADERFATT = '" << _keys.get(1) << "' AND PZ_KEYBODYFATT = '" << _keys.get(2) << "'"; + str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'"; return str; } -TFppro::TFppro() : _keys("", ';'), _keys_setted(false), _is_set(false) +TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _keys_setted(false), _is_set(false) { _db = new SSimple_query(); const bool ok = set_connection(*_db); @@ -344,14 +322,13 @@ prot_s TProtocollo::get_prot() return prot; } -const TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres) const +TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres) { - TString & protocollo = get_tmp_string(128); + static TString protocollo; TString tipo(tipoprot); - if (tipo.empty()) tipo << "no_prot"; - protocollo << year << "-" << tipo << "/" << progres; + protocollo.cut(0) << year << "-" << tipo << "/" << progres; return protocollo; } @@ -371,7 +348,7 @@ void TProtocollo::sset(const char* prot) _progres = p.get(); } -const TString& TProtocollo::get_prot() const +TString& TProtocollo::get_prot() const { return prot_in(_year, _tipoprot, _progres); } @@ -386,21 +363,29 @@ const char* get_ini_codcaus() return ini_get_string(FILE_CONFIG, FILE_SECTION, F1_CAUS); } -const char* get_codcaus(const char * tipodoc, long codcf) +const char* get_codcaus(const char * tipodoc, const long codcf) { - TCli_for f = cached_clifor('F', codcf); + TLocalisamfile cfven(LF_CFVEN); + cfven.put(CFV_TIPOCF, "F"); + cfven.put(CFV_CODCF, codcf); + const char* codcaus = ""; + const char* codcausnc = ""; const bool nc = TString(tipodoc) == "TD04"; + if (cfven.read() == NOERR) + { + codcaus = cfven.get(CFV_CODCAUS); + codcausnc = cfven.get(CFV_CODCAUSNC); + } + if (nc) { - const TString & codcaus = f.vendite().get(CFV_CODCAUSNC); - if (codcaus.full()) - return codcaus; + if (!TString(codcausnc).empty()) + return codcausnc; } else { - const TString & codcaus = f.vendite().get(CFV_CODCAUS); - if (codcaus.full()) + if (!TString(codcaus).empty()) return codcaus; } return get_ini_codcaus(); @@ -411,12 +396,12 @@ bool get_endatareg() return ini_get_bool(FILE_CONFIG, FILE_SECTION, "endatareg"); } -const TString & get_datainireg() +TString get_datainireg() { return ini_get_string(FILE_CONFIG, FILE_SECTION, "datainireg"); } -const TString & get_dataendreg() +TString get_dataendreg() { return ini_get_string(FILE_CONFIG, FILE_SECTION, "dataendreg"); } @@ -459,42 +444,74 @@ bool check_causale(const TString& cod_caus, bool acq) bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq) { - const TCausale& c = cached_causale(cod_caus); + const TCausale& caus = cached_causale(cod_caus); if(tipo_doc == "FA" || tipo_doc == "BD" || tipo_doc == "AF" || tipo_doc == "FF") - return c.tipo_doc() == tipo_doc; + return caus.tipo_doc() == tipo_doc; if (tipo_doc == "NC" || tipo_doc == "ND") { bool nota; bool nota_iva = false; - - if ((nota = c.tipo_doc() == tipo_doc)) + if ((nota = caus.tipo_doc() == tipo_doc)) { if (acq) - nota_iva = c.reg().tipo() == iva_acquisti; + nota_iva = caus.reg().tipo() == iva_acquisti; else - nota_iva = c.reg().tipo() == iva_vendite; + nota_iva = caus.reg().tipo() == iva_vendite; } return nota && nota_iva; } + return false; } -bool check_caus_has_rit(const TString& cod_caus, int year) +bool check_caus_has_rit(const TString& cod_caus, bool rit) { - const TCausale & c = cached_causale(cod_caus, year); - - return c.causale_770().full(); + TLocalisamfile causali(LF_CAUSALI); + causali.put(CAU_CODCAUS, cod_caus); + causali.read(); + return *causali.get(CAU_M770) != '\0'; } void run_cont_ini(bool liq) { - TString cmd; - - cmd.cut(0) << "cg2 -0 -i" << TFilename().temp("cg2CONTAB", "ini") << " -f1" << (liq ? " -liq" : " ") << " /u" << user(); - - TExternal_app app(cmd); - - app.run(); + static TString run_string; +#ifdef DBG + run_string.cut(0) << "cg2 -0 -i" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq? " -liq" : " ") << " /u" << user(); +#else + run_string.cut(0) << "cg2 -0 -i" << TFilename().tempdir() << "\\" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq ? " -liq" : " ") << " /u" << user(); +#endif + TExternal_app(run_string).run(); } + +void TF1_log::log(int severity, const char* msg) +{ + if (_log == nullptr) + { + _log = new TLog_report("Stato contabilizzazione:"); + // Tento l'eliminazione del file + std::remove("f1_cg.log"); + } + + static TString txt; + txt.cut(0) << msg; + _log->log(severity, txt); + // Scrivo anche su file + std::filebuf fb; + fb.open("f1_cg.log", std::ios::out | std::ios::app); + std::ostream os(&fb); + os << txt << std::endl; + fb.close(); +} + +bool TF1_log::show_log() +{ + if (_log) + { + _log->preview(); + delete _log; + _log = nullptr; + } + return true; +} \ No newline at end of file diff --git a/src/f1/f1lib.h b/src/f1/f1lib.h index 7234d5445..7f28f60d9 100644 --- a/src/f1/f1lib.h +++ b/src/f1/f1lib.h @@ -7,8 +7,8 @@ #define FILE_CONFIG CONFIG_DITTA #define FILE_SECTION "f1" -#define F1_INIREGCONT "cgreg" #define F1_CAUS "caus" +#define F1_INIREGCONT "cg2CONTAB" #define LOG_MSG 0 #define LOG_WARN 1 #define LOG_ERR 2 @@ -39,48 +39,63 @@ typedef struct _prot_s */ class TFppro : public TObject { - TToken_string _keys; + struct keys_s + { + TString prginvio; + TString headerfatt; + TString bodyfatt; + + operator const char*() const + { + static TToken_string a("", ';'); + a.add(prginvio); + a.add(headerfatt); + a.add(bodyfatt); + return a; + } + } _keys; + SSimple_query* _db; bool _keys_setted; bool _is_set; // Query is setted TString _fppro_query; TString _last_error; - bool sql_inj(TToken_string& keys); + static bool sql_inj(const TString& str); + static bool sql_inj(const keys_s& keys); public: - const char* where_str(); + const char* where_str() const; bool check_reg(TToken_string& keys, int numreg); // Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e` bool guess_the_doc(const TLocalisamfile& mov); // Getters - const char* get_keys_fppro(); - long get_numreg(); - long get_numreg(TToken_string& keys); - long get_codforn(); + const char* get_keys_fppro() const; + int get_numreg(); + int get_numreg(TToken_string& keys); + TString get_codforn() const; TDate get_datareg(); TDate get_datareg(TToken_string& keys); - real get_ritenute(); + real get_ritenute() const; TDate get_data_first_doc() const; - TDate get_dataorarioric(); - long get_numregcont(); - + TDate get_dataorarioric() const; + int get_numregcont() const; TString get_last_error(bool clear = true); // Setters bool set_query(); TFppro& set_keys(TToken_string& keys); + TFppro& set_keys(const keys_s& keys); - bool associa_mov(long numreg); - const TString & get_tipoprot(); - const TString & get_numprot(); - const TString & get_annoprot(); - const TString & get_dataoraric(); - const TString & get_tipodoc(); - const TString & get_numdoc(); - TDate get_data_doc(); + bool associa_mov(int numreg) const; + const char* get_tipoprot() const; + const char* get_numprot() const; + const char* get_annoprot() const; + const char* get_dataoraric() const; + const char* get_tipodoc() const; + const char* get_numdoc() const; - TFppro(); + TFppro(); TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } }; @@ -96,30 +111,37 @@ public: void set(const TProtocollo& prot); void sset(const char* prot); - const TString& get_prot() const; + TString& get_prot() const; prot_s get_prot(); int get_year() const { return _year; } - const TString& get_tipoprot() const { return _tipoprot; } - const TString& get_progres() const { return _progres; } - const TString& prot_in(int year, const char* tipoprot, const char* progres) const; + TString& get_tipoprot() { return _tipoprot; } + TString& get_progres() { return _progres; } + + + static TString& prot_in(int year, const char* tipoprot, const char* progres); + + operator const char*() const { return static_cast(get_prot()); } + }; -class TF1_log : public TLog_report +class TF1_log : TObject { + TLog_report* _log; public: - TF1_log() : TLog_report("Stato contabilizzazione:") {} - bool show_log() { export_text("f1_cg.log", 0, false); return preview(); } + TF1_log() : _log(nullptr){} + void log(int severity, const char* msg); + bool show_log(); }; TFppro& fppro_db(); const char* get_ini_codcaus(); -const char* get_codcaus(const char * tipodoc, long codcf); +const char* get_codcaus(const char * tipodoc, const long codcf); bool get_endatareg(); -const TString & get_datainireg(); -const TString & get_dataendreg(); -bool get_periodprec(); +TString get_datainireg(); +TString get_dataendreg(); +bool get_periodprec(); void set_ini_codcaus(const TString& codcaus); void set_endatareg(bool enable); @@ -131,7 +153,7 @@ void set_periodprec(bool flag); bool check_causale(const TString& cod_caus, bool acq = true); // Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto) bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true); -bool check_caus_has_rit(const TString& cod_caus, int year = 0); +bool check_caus_has_rit(const TString& cod_caus, bool rit); void run_cont_ini(bool liq); #endif // _F1LIB_H_ diff --git a/src/f9/f9lib02.cpp b/src/f9/f9lib02.cpp index 9c0640655..0914762af 100644 --- a/src/f9/f9lib02.cpp +++ b/src/f9/f9lib02.cpp @@ -593,9 +593,7 @@ bool TF9Prospetto_integr::operator()(const char* numreg_acq, const char* numreg_ _items = _prosp_rs->items(); if (_items == 0) { - FILE* log; - - fopen_s(&log, "TF9Prospetto_integr_error.txt", "a"); + FILE* log = fopen("TF9Prospetto_integr_error.txt", "a"); if (!_prosp_rs->last_exec()) { if (log != nullptr) diff --git a/src/gfm/median.c b/src/gfm/median.c index 9fbd519fb..6cf7d88ed 100755 --- a/src/gfm/median.c +++ b/src/gfm/median.c @@ -73,7 +73,7 @@ int n; tmpa[i] = pSrc[i]; /* sort pointers */ - qsort((void *)tmpa,n,sizeof(DEC *), (int (__cdecl *)(void)) _SortInc); + qsort((void *)tmpa,n,sizeof(DEC *), _SortInc); if (n%2) _MacDCopy(pDst, tmpa[(n-1)/2]); diff --git a/src/gv/gvlib.cpp b/src/gv/gvlib.cpp index 318f39cf3..8eceda97c 100755 --- a/src/gv/gvlib.cpp +++ b/src/gv/gvlib.cpp @@ -5,6 +5,7 @@ #include "../cg/cglib.h" + /////////////////////////////////////////////////////////// // TRigheF24_set /////////////////////////////////////////////////////////// diff --git a/src/ha/ha1300.cpp b/src/ha/ha1300.cpp index 7e1c67a38..97d52d481 100755 --- a/src/ha/ha1300.cpp +++ b/src/ha/ha1300.cpp @@ -5,7 +5,7 @@ #include #include "../cg/cg2101.h" -#include "../cg/cglib.h" +#include "../cg/cg2103.h" #include "../cg/cgsaldac.h" #include "../mg/movmag.h" #include "../mg/rmovmag.h" diff --git a/src/ha/hacnv300.cpp b/src/ha/hacnv300.cpp index 934a24f47..eed031101 100755 --- a/src/ha/hacnv300.cpp +++ b/src/ha/hacnv300.cpp @@ -12,7 +12,7 @@ #include #include "../cg/cglib01.h" -#include "../cg/cglib.h" +#include "../cg/cg2103.h" #include "../cg/cgsaldac.h" #include "../cg/cgpagame.h" diff --git a/src/ic/ic0100f.rep b/src/ic/ic0100f.rep index d671d9cd9..d9aa99419 100644 --- a/src/ic/ic0100f.rep +++ b/src/ic/ic0100f.rep @@ -395,9 +395,7 @@ THEN #F1.203 +! - USE IVADIFF KEY 4 SELECT (BETWEEN(DATAREGP;#DAL;#AL))(TIPOIVA==#TIPOIVA)(TIPODIFF==#TIPODIFF)((CHIUSA=#CHIUSA)||(#CHIUSA="T")) -FROM DATAREG=#DAL -TO DATAREG=#AL + USE IVADIFF SELECT (BETWEEN(DATAREG,#DAL,#AL))(TIPOIVA==#TIPOIVA)(TIPODIFF==#TIPODIFF)((CHIUSA=#CHIUSA)||(#CHIUSA="T")) JOIN MOV INTO NUMREG==NUMREG JOIN CLIFO TO MOV INTO TIPOCF==TIPO CODCF==CODCF \ No newline at end of file diff --git a/src/ic/ic0200.cpp b/src/ic/ic0200.cpp index ce81e5f86..d6719f489 100644 --- a/src/ic/ic0200.cpp +++ b/src/ic/ic0200.cpp @@ -20,7 +20,7 @@ public: void TICpag_print::main_loop() { - TMask m("ic0200a"); + TMask m("ic0100a"); while (m.run() == K_ENTER) { TICpag_report r("ic0200p"); diff --git a/src/ic/ic0200p.rep b/src/ic/ic0200p.rep index 649ed8684..e911580c4 100644 --- a/src/ic/ic0200p.rep +++ b/src/ic/ic0200p.rep @@ -1,71 +1,71 @@ - + -