diff --git a/build/AgaLib.vcxproj b/build/AgaLib.vcxproj index 7ed602a3b..9c4891e8e 100644 --- a/build/AgaLib.vcxproj +++ b/build/AgaLib.vcxproj @@ -881,6 +881,10 @@ {9c91bacf-9a70-4973-b8cc-fa3d2af9867c} + + + + diff --git a/build/AgaLib.vcxproj.filters b/build/AgaLib.vcxproj.filters index 958661ae8..bc007fcc3 100644 --- a/build/AgaLib.vcxproj.filters +++ b/build/AgaLib.vcxproj.filters @@ -14,6 +14,9 @@ {ad187331-43fa-476b-9ee2-7e0cab5cde0e} + + {3ac37126-3475-4122-be0b-b16a7b877069} + @@ -797,4 +800,12 @@ Libraries + + + Alx + + + Alx + + \ No newline at end of file diff --git a/build/PATCHDEF.EXE b/build/PATCHDEF.EXE index b4cf135fd..e0c1f8fef 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 9972592ae..de1b415ac 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 0a766454c..bdf1e6ba5 100644 Binary files a/build/fastrip.exe and b/build/fastrip.exe differ diff --git a/cd/Setup.exe b/cd/Setup.exe index 07d92d59f..19edbbe06 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 decb7c941..88609c5bb 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,11 +13,9 @@ #include "ba1100.h" #include "ba1103.h" -#include #include -#include +#include #include -#include #include #include @@ -35,69 +33,16 @@ #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); @@ -105,7 +50,7 @@ HIDDEN bool browse_file_handler(TMask_field& f, KEY k) } f.set_focus(); } - + return true; } @@ -117,51 +62,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); @@ -180,7 +125,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); @@ -199,10 +144,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); @@ -228,7 +173,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); @@ -236,25 +181,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); @@ -292,7 +237,7 @@ void TManutenzione_app::print() } } } - + TString_array list; items = list_files("recdesc/d???.des", list); if (items > 0) @@ -311,18 +256,17 @@ void TManutenzione_app::print() } } } - else + else do_print(p, *_rec); p.close(); } bool TManutenzione_app::create() // initvar e arrmask { - _firm = get_firm(); - - TString sw(argc()>2 ? argv(2) : ""); + 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) @@ -330,7 +274,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(); @@ -356,14 +300,15 @@ 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) @@ -385,8 +330,26 @@ bool TManutenzione_app::destroy() return TApplication::destroy(); } -void TManutenzione_app::open_log() -{ +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() +{ _print_log = false; if (_log == NULL) { @@ -396,7 +359,7 @@ void TManutenzione_app::open_log() } void TManutenzione_app::write_log(const char* line, const int severity) -{ +{ if (_log != NULL) { _log->log(severity, line); @@ -417,30 +380,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(); @@ -449,30 +412,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); } @@ -480,32 +443,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() @@ -518,7 +481,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"; @@ -526,12 +489,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]; @@ -541,16 +504,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; @@ -573,24 +536,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) { @@ -612,7 +575,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; @@ -622,16 +585,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(); @@ -668,11 +631,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(); @@ -689,7 +652,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); @@ -698,7 +661,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()); @@ -732,8 +695,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); } @@ -770,19 +733,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); @@ -790,7 +753,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(); @@ -807,10 +770,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) @@ -829,13 +792,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); @@ -864,29 +827,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; @@ -894,7 +857,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.. @@ -904,7 +867,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) @@ -917,10 +880,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); @@ -941,7 +904,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()) @@ -975,7 +938,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); @@ -1000,7 +963,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()) @@ -1011,7 +974,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()); @@ -1025,10 +988,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] = '%'; @@ -1042,7 +1005,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 @@ -1069,7 +1032,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(); @@ -1077,10 +1040,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()); @@ -1090,7 +1053,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) @@ -1104,11 +1067,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: @@ -1116,7 +1079,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); @@ -1134,12 +1097,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); @@ -1148,7 +1111,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 @@ -1183,7 +1146,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... { @@ -1216,19 +1179,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); @@ -1236,16 +1199,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); @@ -1258,48 +1221,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> 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); } @@ -1405,34 +1368,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(); } @@ -1440,14 +1403,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 } @@ -1465,7 +1428,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()); @@ -1489,29 +1452,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(); - break; - case K_F7: - update(); + case K_ESC: + done = true; close_history(); 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 { @@ -1529,9 +1492,8 @@ 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 ff79ff996..ffa804122 100755 --- a/src/ba/ba1100.h +++ b/src/ba/ba1100.h @@ -1,6 +1,10 @@ #ifndef __BA1100_H #define __BA1100_H +#ifndef __APPLICAT_H +#include +#endif + #ifndef __CONFIG_H #include #endif @@ -17,6 +21,14 @@ class TMask_field; #endif +#ifndef __PRINTER_H +#include +#endif + +#ifndef __REPUTILS_H +#include +#endif + #include "ba1100a.h" /////////////////////////////////////////////////////////// @@ -25,71 +37,129 @@ 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 f413898ce..d70b78334 100755 --- a/src/ba/ba1101.cpp +++ b/src/ba/ba1101.cpp @@ -275,9 +275,17 @@ 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); + + 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); 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 eefaf7f45..2d29027f8 100755 --- a/src/ba/ba1600.cpp +++ b/src/ba/ba1600.cpp @@ -859,7 +859,6 @@ 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) @@ -1445,8 +1444,10 @@ 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, m.get_int(S_PATCHLEVEL))) + if (fm.zip_module(module, agg, patch)) { #ifdef __FCONV__ // creazione XXfconv.ini (esporta le info di conversione ) @@ -1458,6 +1459,42 @@ 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 faffa4b7b..ab54b52bc 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_log(); + bool show_export_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_log() +bool TMSSQLExport_app::show_export_log() { if (_log) { @@ -1089,7 +1089,7 @@ void TMSSQLExport_app::main_loop() } message_box("Migrazione effettuata correttamente!"); } while (loop); - show_log(); + show_export_log(); } else message_box("Fallita connessione"); diff --git a/src/ba/ba3400.cpp b/src/ba/ba3400.cpp index 14a4dd375..62cccd6b1 100755 --- a/src/ba/ba3400.cpp +++ b/src/ba/ba3400.cpp @@ -52,26 +52,24 @@ bool TTestrel_application::user_destroy() // Testmask /////////////////////////////////////////////////////////// -class TTest_application : public TApplication +class TTest_application : public TSkeleton_application { const char* _maskname; protected: - bool create() { return menu(0); } - bool destroy() { return TRUE; } - bool menu(MENU_TAG); + void main_loop(); public: TTest_application(const char* name) : _maskname(name) {} }; -bool TTest_application::menu(MENU_TAG) +void TTest_application::main_loop() { if (*_maskname) { TMask m(_maskname); - KEY k = m.run(); - if (k == K_QUIT) stop_run(); + + while (m.run() == K_ENTER); } else { @@ -83,8 +81,6 @@ bool TTest_application::menu(MENU_TAG) m.run(); } } - - return FALSE; } /////////////////////////////////////////////////////////// diff --git a/src/ba/ba3400a.uml b/src/ba/ba3400a.uml index b056d73fb..7ef31e31b 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 "Nome maschera" + PROMPT 3 3 "Maschera " END BUTTON DLG_OK 10 2 diff --git a/src/ba/ba7100.cpp b/src/ba/ba7100.cpp index a166a511e..ffd601aa6 100755 --- a/src/ba/ba7100.cpp +++ b/src/ba/ba7100.cpp @@ -1742,6 +1742,7 @@ 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(); }; @@ -1767,7 +1768,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) { @@ -1778,7 +1779,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 39f52ec14..2f8ffe6bd 100755 --- a/src/ba/ba8300.cpp +++ b/src/ba/ba8300.cpp @@ -567,6 +567,13 @@ 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 ddaacf0b2..1b74f4c28 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 20 +LIST LST_TABIVA_S1 2 28 BEGIN PROMPT 2 2 "Tipo " FIELD S1 @@ -70,11 +70,15 @@ 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 -END + 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 STRING FLD_TABIVA_S6 4 BEGIN - PROMPT 39 2 "C.IVA a cui ventilare " + PROMPT 44 2 "C.IVA a cui ventilare " FLAGS "U" FIELD S6 COPY USE FLD_TABIVA_CODTAB @@ -146,7 +150,7 @@ END BOOLEAN CHK_TABIVA_B5 BEGIN - PROMPT 30 5 "Escluso dal calcolo dei bolli sufatture esenti" + PROMPT 30 5 "Escluso dal calcolo dei bolli su fatture esenti" FIELD B5 END @@ -188,6 +192,8 @@ 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" @@ -201,6 +207,7 @@ 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 877274791..17c23b9f0 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( t, fileName + 4, -4 ) ; + c4ltoa45( (long)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 7bae57cc3..d8a054076 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 = strlen( tagFile->expr->source ) + 1 ; + tagFile->header.exprLen = (short) 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 = strlen( tagFile->filter->source ) ; + tagFile->header.filterLen = (short)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 6013eb60f..43bd53d71 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) == TRUE) + if (ammce.get_bool(AMMCE_FZPER)) return error_box(TR("Sul cespite sono state forzate le Percentuali:\nprocedere dalla forzatura ammortamenti su cespite")); - if (ammce.get_bool(AMMCE_FZQUO) == TRUE) + if (ammce.get_bool(AMMCE_FZQUO)) 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 8e92d11f9..0f628d881 100755 --- a/src/ce/ce2100.cpp +++ b/src/ce/ce2100.cpp @@ -120,6 +120,7 @@ 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 1013a4605..6533921d3 100755 --- a/src/cg/cg2100.cpp +++ b/src/cg/cg2100.cpp @@ -50,6 +50,8 @@ public: TString4 _causale_originale; TipoIVA _iva_originale; TString_array _iva; + TString _idsdi; + TDate _datasdi; }; /////////////////////////////////////////////////////////// @@ -59,7 +61,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) + _skip_giornale_check(false), _skip_bollato_check(false), _pro_mask(nullptr) { memset(_msk, 0, sizeof(_msk)); } @@ -439,7 +441,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year) } const char sezione = rcaus->get_char(RCA_SEZIONE); - const TImporto zero('D', ZERO); + TImporto zero('D', ZERO); const TString80 desc(causale().desc_agg(i)); if (nriga == 1) m->set(F_DESCR, desc); @@ -697,7 +699,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); - set_has_f1_db(&m); + has_f1_db(m); } void TPrimanota_application::init_query_mode(TMask& m) @@ -736,7 +738,7 @@ void TPrimanota_application::init_query_mode(TMask& m) m.set(F_CODCAUS, ini.get(MOV_CODCAUS)); m.send_key(K_SPACE, DLG_NEWREC); } - set_has_f1_db(&m); + has_f1_db(m); } @@ -995,17 +997,19 @@ 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_modify(TMask& m, const TRectype& mov) +void TPrimanota_application::f1_init(TMask& m, const bool fe_enabled, const bool f1_linked) { - const bool after_data_inizio_fe = mov.get_date(MOV_DATADOC) >= get_data_start_fatt(); + const bool reverse_charge = app().causale().reverse_charge_pubb(); - 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"); + 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); } void TPrimanota_application::init_modify_mode(TMask& m) @@ -1116,7 +1120,7 @@ void TPrimanota_application::init_modify_mode(TMask& m) m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD"); } if (iva() != nessuna_iva) - f1_init_modify(m, mov); + f1_init(m, mov.get_date(MOV_DATADOC) >= get_data_start_fatt(), mov.get(MOV_KEYFPPRO).full()); } // Controlla sulla causale se il segno del totale documento (ritsoc=false) @@ -1488,18 +1492,14 @@ void TPrimanota_application::check_saldi() void TPrimanota_application::write_fppro() { -#ifdef DBG - if (!ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO")) + if (main_app().has_module(FPAUT) && !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 (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))) + if (iva_mask(m) && m.get(F_PROKEY).full() && has_f1_db(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,10 +1717,19 @@ int TPrimanota_application::rewrite(const TMask& m) if (caus.reverse_charge_pubb()) { - const long movcoll = m.get_long(F_MOVCOLL); + 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); @@ -1788,7 +1797,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; @@ -1803,27 +1812,17 @@ void TPrimanota_application::clean_fppro() fp_db().sq_commit(); } -void TPrimanota_application::set_has_f1_db(TMask* m) +bool TPrimanota_application::has_f1() const { - 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; - } + return has_module(F1AUT) && get_db_indirizzo().full(); } -bool TPrimanota_application::has_f1_db(TMask* m) +bool TPrimanota_application::has_f1_db(const TMask & m) { - set_has_f1_db(m); - return _isf1; + const TDate datareg = m.get_date(F_DATAREG); + + _is_set_fpcheck = true; + return datareg.ok() && (datareg >= get_data_start_fatt()) && has_f1(); } bool TPrimanota_application::remove() @@ -1892,6 +1891,8 @@ 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); @@ -1979,6 +1980,9 @@ 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(); @@ -2672,7 +2676,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 @@ -2737,7 +2741,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" @@ -2851,6 +2855,7 @@ 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 f681a0adb..3a69254b4 100755 --- a/src/cg/cg2100c.uml +++ b/src/cg/cg2100c.uml @@ -569,7 +569,7 @@ END STRING F_PROKEY 80 BEGIN - PROMPT 1 19 "db key" + PROMPT 1 26 "db key" HELP "Chiave database" FIELD KEYFPPRO FLAGS "H" diff --git a/src/cg/cg2100t.uml b/src/cg/cg2100t.uml index ec4eb71cd..96590a6a6 100644 --- a/src/cg/cg2100t.uml +++ b/src/cg/cg2100t.uml @@ -13,12 +13,14 @@ 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 cdb67df4f..e334045ca 100755 --- a/src/cg/cg2102.cpp +++ b/src/cg/cg2102.cpp @@ -219,7 +219,10 @@ TSheet_field& TPrimanota_application::cgs() const void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp) { TSheet_field& s = cgs(); - imp.add_to(s.row(n), 0); + TImporto i(imp); + + i.normalize(); + i.add_to(s.row(n), 0); s.force_update(n); } @@ -371,7 +374,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, const TImporto& imp, +int TPrimanota_application::set_cgs_row(int n, TImporto& importo, const TBill& conto, const char* desc, char tipo, const char* cms, const char* fas) { @@ -380,7 +383,8 @@ int TPrimanota_application::set_cgs_row(int n, const TImporto& imp, TToken_string& row = cg.row(n); row.cut(0); - imp.add_to(row, 0); + importo.normalize(); + importo.add_to(row, 0); row.add(conto.string(0x3)); row.add(""); // Codice decrizione row.add(desc); // Descrizione aggiuntiva @@ -1536,7 +1540,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 - const TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile + TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile if (pos >= 0) // Se il conto esisteva anche prima ... { @@ -1761,7 +1765,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->should_bring_back()))) + if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare()))) a.set_scadenze(m); // Ricalcola rate } } @@ -2842,7 +2846,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.normalize(), nuovo, descr, cgrowtype_totale); + set_cgs_row(riga_totale, imp, nuovo, descr, cgrowtype_totale); } calcola_imp(); // Ricalcola totale IVA calcola_saldo(); // Ricalcola sbilanci @@ -3018,7 +3022,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)) - fppro_mask(f, key); + a.fppro_mask(f, key); } } return true; @@ -3562,21 +3566,11 @@ HIDDEN void inventa_cambio_intra(TMask& m) { const TString& codval = m.get(F_VALUTAINTRA); - if (codval.not_empty() && TCurrency::get_firm_val() != codval) + if (codval.full() && TCurrency::get_firm_val() != codval) { - TTable cam("CAM"); + const TRectype & cam =cache().get("CAM", codval); - 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) + if (cam.full()) m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4")); } } @@ -3903,71 +3897,74 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key) return true; } -void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr& msk) + +void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk) { TSheet_field& sf = cg_msk.sfield(F_SHEETIVA); - const vector& righe = msk->get_righeiva(); - int i = 0; + const TString_array& righe = msk.get_righeiva(); - for (auto it = righe.begin(); it != righe.end(); ++it) + FOR_EACH_ARRAY_ITEM( righe, r, obj) { - if(it->imponibile != 0 || it->imposta != 0) - { - TToken_string& row = sf.row(i); + TToken_string & riga = STRING_TOKEN(obj); + const real imponibile = riga.get_real(FPRI_IMPONIBILE); + const real imposta = riga.get_real(FPRI_IMPOSTA); - 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++; + if (imponibile != ZERO || imposta != ZERO) + { + TToken_string& row = sf.row(r); + + 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); } } } -bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr& msk) +bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const TPro_msk & msk) { TSheet_field& sf = cg_msk.sfield(FS_RATESHEET); const int items = sf.items(); - const vector& righe = msk->get_scadenze(); - int i = 0; + const TString_array & righe = msk.get_scadenze(); - for (auto it = righe.begin(); it != righe.end(); ++it, ++i) + FOR_EACH_ARRAY_ITEM(righe, r, obj) { - TToken_string& row = app().pags().row(i); + TToken_string& row = app().pags().row(r); + TToken_string & riga = STRING_TOKEN(obj); - 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); + 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); } - return !righe.empty(); + return righe.items() > 0; } -void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr& msk) +void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk) { bool ok = false; TLocalisamfile clifo(LF_CLIFO); - TToken_string keys(msk->get_fpprokeys(), ';'); - TString codforn = TFppro(keys).get_codforn(); + TToken_string keys(msk.get_fpprokeys(), ';'); + long codforn = TFppro(keys).get_codforn(); - if (codforn.empty()) - codforn = msk->get_codforn(); - if (codforn.empty()) + if (codforn == 0L) + codforn = msk.get_codforn(); + if (codforn == 0L) { 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(); } @@ -3979,8 +3976,8 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptrget_piva(); - if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn)) + ok = clifo.get(CLI_PAIV) == msk.get_piva(); + if (ok && (cg_msk.get_long(F_CODCLIFOR) == 0 || cg_msk.get_long(F_CODCLIFOR) != codforn)) { cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF)); cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC)); @@ -3988,20 +3985,21 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr& msk) +void TPrimanota_application::set_totale(TMask& cg_msk, TPro_msk & 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) { @@ -4009,78 +4007,83 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptris_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, const shared_ptr& msk) +void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, TPro_msk & msk) { - const bool bring = msk->should_bring_back(); + const bool bring = msk.da_riportare(); if (bring) { - 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); + 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); cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE); - if (write_scad_f1(cg_msk, msk)) - app().set_scad_f1(cg_msk); + if (a.write_scad_f1(cg_msk, msk)) + a.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_NUMDOC).empty()) + if (bring || cg_msk.get(F_NUMDOCEXT) != msk.get_str_numdoc()) { - cg_msk.set(F_NUMDOCEXT, msk->get_numdoc()); - cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7)); + + 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); } - - if (bring || cg_msk.get(F_DATADOC).empty()) - cg_msk.set(F_DATADOC, msk->get_datadoc()); } -void TPrimanota_application::insert_part_scad(TConfig& ini) +void TPrimanota_application::insert_part_scad(TConfig& ini) // che cazzo significa la partita 73/001 { - vector rif_doc; - int i = 0; - ini.set_paragraph("23"); + TArray rif_doc; + TString str = ini.get("NUMLINEA", "23", 0); // Carico nel vettore - while(true) + for (int i = 0; str.full(); str = ini.get("NUMLINEA", "23", ++i)) { TToken_string doc("", '|'); - TString str; str << ini.get("NUMLINEA", nullptr, i, "NULL"); - if (str != "NULL") - { - doc.add(str); - doc.add(ini.get("DOCRIF", nullptr, i, "NULL")); - doc.add(ini.get("DATADOCRIF", nullptr, i, "NULL")); - rif_doc.insert(rif_doc.end(), doc); - i++; + doc.add(str); + doc.add(ini.get("DOCRIF", "23", i)); + doc.add(ini.get("DATADOCRIF", "23", i)); + rif_doc.add(doc); } - else - break; - } // Agganciare alla partita del documento di riferimento - if(!rif_doc.empty()) + if(rif_doc.items() > 0) { 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; - do + + FOR_EACH_ARRAY_ITEM(rif_doc, r, _obj) { - if (rec.get(MOV_NUMDOC).as_string() == "73/001") + if (part.blank()) { - part = rec.get(MOV_PROTIVA).as_string(); + 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); break; } } while (rec.move_next()); - + } + } _num_doc_rif_partite = part; } } @@ -4092,9 +4095,10 @@ 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; - auto msk = std::make_shared(cg_msk); - - app()._pro_mask = msk; + TPro_msk * msk = app()._pro_mask; + + if (msk == nullptr) + app()._pro_mask = msk = new TPro_msk(cg_msk); const TString datadoc = cg_msk.get(F_DATADOC); @@ -4104,16 +4108,13 @@ 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()); - is_collegato(cg_msk.field(F_COLFPPRO)); + cg_msk.set(F_COLFPPRO, cg_msk.get(F_PROKEY).full()); cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA)); - } return true; } @@ -4132,11 +4133,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 (!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)) + if (check_causale(cg_msk.get(F_CODCAUS)) && cg_msk.get_bool(F_COLFPPRO)) { scollega(true); app().clean_fppro(); @@ -4150,103 +4151,81 @@ 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 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) +bool TPro_msk::load_fppro_mask(TMask & msk) { // 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); + msk.set(F_ENABSEARCH, "X"); + abilita_piva(); //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; - TString date = ""; + TDate 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); + TSheet_field& sf = msk.sfield(F_SHEETFPPROS); + const bool show_all = msk.get_bool(F_SHOWALL); - sf.hide(); - if (sf.items() > 0) - sf.destroy(); + sf.reset(); while (fp_db().sq_next()) { - TString numreg = fp_db().sq_get("PZ_NUMREGCONT"); - const bool show_all = msk->get_bool(F_SHOWALL); + const long numreg = fp_db().sq_get_long("PZ_NUMREGCONT"); - if (numreg != "0" && !show_all) - continue; - - TToken_string& row = sf.row(-1); + if (show_all || numreg == 0L) + { 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")); - 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); + + 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); + } } sf.force_update(); - sf.show(); return true; } -bool TPro_msk::fppro_handler(TMask_field& f, KEY k) +bool TPro_msk::riporta(TMask_field& f) { 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; @@ -4254,16 +4233,10 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k) FOR_EACH_SHEET_ROW(sf, nr, row) { - if(*row->get(0) == 'X') + if(row->get_bool(0)) { - //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; + app().pro_mask()->set_doc(sf, nr); + _riporta = f.dlg() == DLG_OK; ok = true; break; } @@ -4277,67 +4250,56 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k) 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 (*row->get(0) == 'X') - row->add("", 0); - } + if (sf.get_bool_row_cell(nr, F_SELFPPROS)) + sf.set_row_cell(F_SELFPPROS, false, nr); 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(this, K_SPACE); + load_fppro_mask(m); break; case F_ENABSEARCH: if (e == fe_modify) { - abilita_piva(this); - load_fppro_mask(this); + abilita_piva(); + load_fppro_mask(m); } break; case F_ENABDATE: @@ -4345,7 +4307,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(this); + load_fppro_mask(m); } break; default: @@ -4356,9 +4318,11 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TPro_msk::is_doc_split() { - for(riga_iva_s const& riga : _righe_iva) + FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj) { - if (riga.esigibilita == 'S') + TToken_string & riga = STRING_TOKEN(obj); + + if (riga.get(FPRI_ESIGIBILITA) == "S") return true; } return false; @@ -4395,53 +4359,71 @@ void TPro_msk::set_scadenze(const char* fpprokeys) } } -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) +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) { - _numero = numero; - _datadoc = datadoc; - _totdoc = abs(totdoc); - _ritenute = ritenute; - _protfppro.sset(protfppro); + _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); + _fpprokeys = fpprokeys; - _codforn = codforn; - _piva = piva; set_righeiva(fpprokeys); - set_scadenze(fpprokeys); + set_scadenze(fpprokeys); + _codforn = s.get_long_row_cell(nrow, F_CODCLIFORS); + _piva = s.get_str_row_cell(nrow, F_FISCIVACODS); + } real TPro_msk::get_tot_imp_riva() { - real tot = ZERO; + real tot; - for(riga_iva_s const& riga : _righe_iva) + FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj) { - if (riga.imposta > ZERO) - tot += riga.imponibile; + TToken_string & riga = STRING_TOKEN(obj); + + tot += riga.get_real(FPRI_IMPONIBILE); } return tot; } void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib) { - _righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura, 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); } void TPro_msk::add_scad(const TDate& date, const real& importo) { - _scadenze.insert(_scadenze.end(), { date, importo }); + TToken_string riga; + + riga.add(date, FPSC_DATA); + riga.add(importo, FPSC_IMPORTO); + _scadenze.add(riga); } -TString& TPro_msk::query_fppro(const TString& codforn, const TString& date) +TString& TPro_msk::query_fppro(const TString& codforn, const TDate& date) { return query_fppro(codforn, "", "", "", date, "", "", "", true, false); } -TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TString& date) +TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TDate& 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 TString& 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 TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research) { TString id_fornitore; TString keys; @@ -4465,14 +4447,15 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva id_fornitore << " (PZ_CLIFOR = '" << codforn << "') "; } - static TString query; - query.cut(0) << query_string() << "WHERE "; + TString & query = query_string(); + + query << "WHERE "; if (!id_fornitore.empty()) { query << id_fornitore << " "; - if (!date.empty()) - query << " AND PZ_DATA = '" << TDate(date).date2ansi() << "' "; + if (date.ok()) + query << " AND PZ_DATA = '" << date.date2ansi() << "' "; if (order) query << "\nORDER BY P1_DATAORARIC ASC"; query << ";"; @@ -4484,9 +4467,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva query << " AND " << where_str; query << ";"; } - else if (!date.empty()) + else if (date.ok()) { - query << " PZ_DATA = '" << TDate(date).date2ansi() << "' "; + query << " PZ_DATA = '" << date.date2ansi() << "' "; if (order) query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC"; query << ";"; @@ -4501,9 +4484,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva TString& TPro_msk::query_string() { - static TString query; + TString & query = get_tmp_string(512); - 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, " << + query << "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" << @@ -4512,36 +4495,26 @@ TString& TPro_msk::query_string() return query; } -void TPro_msk::abilita_piva(TMask* msk) +void TPro_msk::abilita_piva() { - 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); - } + const bool on = get_bool(F_ENABSEARCH); + + enable(F_PIVAS, on); + enable(F_STATOPAIVS, on); + enable(F_COFIS, on); } -TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn("") +TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn(0L), _numero(0L) { - 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)); + 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)); set(F_DATESEARCH, TDate(TODAY)); - _righe_iva.clear(); + _righe_iva.destroy(); + _scadenze.destroy(); } bool& is_f1() @@ -4549,3 +4522,4 @@ bool& is_f1() static bool is_f1 = false; return is_f1; } + diff --git a/src/cg/cg2102.h b/src/cg/cg2102.h index f44033988..d11920e2a 100755 --- a/src/cg/cg2102.h +++ b/src/cg/cg2102.h @@ -27,15 +27,78 @@ #include #include "../f1/f1lib.h" -#include #define K_ELIMMAS 0 // Key per eliminazione massima -class TPro_msk; +#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 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 @@ -90,7 +153,7 @@ class TPrimanota_application : public TRelation_application TAssoc_array _colori; // Colori delle righe bool _isf1; - shared_ptr _pro_mask; + TPro_msk * _pro_mask; bool _is_set_fpcheck; int _last_date; bool _f1_ini; @@ -181,20 +244,19 @@ class TPrimanota_application : public TRelation_application // Gestione F1 - 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 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); 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); - static void load_list(TMask* msk, KEY k); - static void f1_init_modify(TMask& m, const TRectype& mov); + void load_list(TMask* msk, KEY k); + void f1_init(TMask& m, const bool fe_enabled, const bool f1_linked = false); void reset_sheet_row(TSheet_field& s, int n); int crea_somma_spese(TImporto& imp); @@ -223,9 +285,10 @@ 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(); - // setta variabili prima del controllo has_f1_db - void set_has_f1_db(TMask* m); - bool has_f1_db(TMask* m); + // Ha f1 ? + bool has_f1() const; + // controlla il db + bool has_f1_db(const TMask & m); // Controlli prima di write e rewrite int controlli_f1(const TMask& m); @@ -321,7 +384,7 @@ protected: real calcola_imp() const; void add_cgs_tot(TMask& m); - int set_cgs_row(int n, const TImporto& importo, const TBill& conto, const char* desc, char tipo, + int set_cgs_row(int n, 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); @@ -400,98 +463,18 @@ 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() { } -}; - -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); + virtual ~TPrimanota_application() { safe_delete(_pro_mask); } }; 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 1db3a0a1b..e2b265ea0 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->should_bring_back()))) + if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare()))) { 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->should_bring_back()))) + if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare()))) a.set_scadenze(m); return ok; @@ -1227,8 +1227,7 @@ 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); - - const TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO)); + TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO)); if (old_importo != new_importo || old_conto != new_conto) { @@ -1298,7 +1297,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) { - const TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute); + TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute); const int riga = type2pos(cgrowtype_ritfis); if (riga < 0) @@ -1319,7 +1318,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) { - const TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc); + 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 f772a5f6c..dab8ffdc3 100644 --- a/src/cg/cg2300.cpp +++ b/src/cg/cg2300.cpp @@ -8,7 +8,6 @@ #include "mov.h" #include #include "rmov.h" -#include #include "pconti.h" #define INI_ANNO "riep_anno" @@ -23,18 +22,15 @@ class TCompetenze_mask : public TAutomask int s_conto; real importo; }; - std::vector _regs; - std::vector _conts; + + TString_array _regs; + 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(); @@ -50,6 +46,44 @@ 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()) @@ -76,6 +110,16 @@ 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)); @@ -95,100 +139,66 @@ 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); - TLocalisamfile rmovs(LF_RMOV); + TAssoc_array conti; + real tot; - sf.hide(); sf.reset(); - _conts.clear(); // Per ogni registrazione - for (int i = 0; i < (int)_regs.size(); ++i) + FOR_EACH_ARRAY_ITEM(_regs, i, obj) { - const int numreg = _regs[i]; - rmovs.zero(); - rmovs.put(RMV_NUMREG, numreg); - rmovs.put(RMV_NUMRIG, 0); - int riga = 0; - if (rmovs.read()) - { + 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 (; rmovs.get_int(RMV_NUMREG) == numreg; rmovs.next()) + for (int r = mov.is_IVA() ? 2 : 1; r <= rows; r++) + { + 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 { - 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)); + // Cerco se ho già la chiave + real * tot = (real *)conti.objptr(key); - 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 }); - } + if (tot == nullptr) + conti.add(key, tot = new real); + *tot += importo; } } } - - 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; + + 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); const TString& descr = get_descr(gruppo, conto, s_conto); + const real importo = *(real *)o1; + int r = sf.set_row_cell(F_GRPCONTC, gruppo); - 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.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; } - sf.force_update(); - sf.show(); + sf.sort(sort_sheet); + sf.force_update(); set(F_TOT, tot); } @@ -198,42 +208,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); - TLocalisamfile movs(LF_MOV); + 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(); - sf.hide(); sf.reset(); - _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) + _regs.destroy(); + for (c = 0L; c.pos() < items; ++c) { - for (; movs.next() == NOERR && movs.get_date(MOV_DATAREG) <= dataend; ) + 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) { - const int month_liq = movs.get_int(MOV_MESELIQ); - const TDate datareg(movs.get(MOV_DATAREG)); - const TDate datacomp(movs.get(MOV_DATACOMP)); + _regs.add(mov.get(MOV_NUMREG)); - if (month_liq != 0) - { - _regs.insert(_regs.end(), movs.get_int(MOV_NUMREG)); + int r = sf.set_row_cell(F_NUMREG, mov.get(MOV_NUMREG)); - 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.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); } } sf.force_update(); - sf.show(); fill_contc(); } diff --git a/src/cg/cg2300a.uml b/src/cg/cg2300a.uml index a0ca4e472..76f127352 100644 --- a/src/cg/cg2300a.uml +++ b/src/cg/cg2300a.uml @@ -118,7 +118,7 @@ END NUMBER F_MESELIQ 2 BEGIN - PROMPT 1 5 "Causale " + PROMPT 1 5 "Mese Liq." FLAGS "D" END diff --git a/src/cg/cg3100.cpp b/src/cg/cg3100.cpp index 93cbb523d..a464d73d0 100755 --- a/src/cg/cg3100.cpp +++ b/src/cg/cg3100.cpp @@ -68,7 +68,8 @@ 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, _tiporegistro, _scelta_stampa, _nr, _n; + int _numero_riga, _alleg, _scelta_stampa, _nr, _n; + tiporeg _tiporegistro; int _provvis; liste _tipo_lista; word _flags; @@ -481,11 +482,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 int tipo_reg = tipo_registro(cod_reg, ann_reg); + const tiporeg tipo_reg = cached_registro(cod_reg, ann_reg).tipo_registro(); // Considera solo iva acquisti o vendite - if (tipo_reg != 1 && tipo_reg != 2) - return FALSE; + if (tipo_reg != vendita && tipo_reg != acquisto) + return false; if (app()._annoes > 0) //anno esercizio specificato nella maschera { @@ -536,8 +537,10 @@ 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 int tipo_reg = tipo_registro(cod_reg, ann_reg); - if (tipo_reg == 1 || tipo_reg == 2) + 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) return false; } @@ -626,9 +629,10 @@ 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 { - TRegistro rg (_registro, _ae); - const int tiporeg = rg.tipo(); - if ((tiporeg == 1 && t != 'C') || (tiporeg == 2 && t != 'F')) + const TRegistro & reg = cached_registro(_registro, _ae); + const tiporeg tipo = reg.tipo_registro(); + + if ((tipo == vendita && t != 'C') || (tipo == acquisto && t != 'F')) set_row(_nr++, FR("@11gTipo C/F non compatibile con tipo registro")); } } @@ -715,14 +719,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 != 2) + if (_tiporegistro != acquisto) set_row(++(*nr), FR("@11gCodice di indetraibilita' errato")); - if (_tiporegistro == 1) + if (_tiporegistro == vendita) if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9) set_row(++(*nr), FR("@11gTipo costo/ricavo non valido")); - if (_tiporegistro == 2) + if (_tiporegistro == acquisto) if (tipocr != 0 && tipocr != 1 && tipocr != 2 && tipocr != 3 && tipocr != 5 && tipocr != 8 && tipocr != 9) set_row(++(*nr), FR("@11gTipo costo/ricavo non valido")); } @@ -782,11 +786,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); - int tipo = tipo_registro(reg, anno); - + const tiporeg tipo = cached_registro(reg, anno).tipo_registro(); TEsercizi_contabili esc; + esc.date2esc(data); // qui verificare - if ( (tipo == 1) || (tipo == 2) ) + if ( (tipo == vendita) || (tipo == acquisto) ) { set_row (_n, FR("@103greg @3s"),FLD(LF_MOV,MOV_REG)); set_row (_n, FR("@111gpr @5n"),FLD(LF_MOV,MOV_PROTIVA)); @@ -860,7 +864,8 @@ 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 = tipo_registro(_registro, _anno); + _tiporegistro = cached_registro(_registro, _anno).tipo_registro(); + _causale_gia_stampata = FALSE; TEsercizi_contabili esc; @@ -987,11 +992,9 @@ 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 = tipo_registro (_registro, _anno); - - if ((_tiporegistro != 1)&&(_tiporegistro != 2))//se si tratta di un movimento di sola prima nota - return TRUE; + _tiporegistro = cached_registro(_registro, _anno).tipo_registro(); + if ((_tiporegistro != vendita) && (_tiporegistro != acquisto))//se si tratta di un movimento di sola prima nota + return true; } } else if (file == LF_RMOV) @@ -1038,10 +1041,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 int tiporeg = tipo_registro (codreg, anno); - const TString8 attreg = AttivitaRegistro (codreg, anno); + const tiporeg tiporeg = cached_registro(codreg, anno).tipo_registro(); + const TString8 attreg = cached_registro(codreg, anno).attivita(); - if (tiporeg == 1 || tiporeg == 2)//se si tratta di un movimento iva + if (tiporeg == vendita || tiporeg == acquisto)//se si tratta di un movimento iva { _tipoatt = TipoAttivita(attreg, get_firm()); _tipo_elenco = curmov.get(MOV_TIPO); @@ -1870,18 +1873,18 @@ bool TListaMov_application::segnala_errori_iva() return true; } if (tipodet == 1 || tipodet == 3 || tipodet == 5 || tipodet == 9) - if (_tiporegistro != 2) + if (_tiporegistro != acquisto) { rmoviva.readat(nrec); return true; } - if (_tiporegistro == 1) + if (_tiporegistro == vendita) if (tipocr != 0 && tipocr != 1 && tipocr != 4 && tipocr != 9) { rmoviva.readat(nrec); return true; } - if (_tiporegistro == 2) + if (_tiporegistro == acquisto) 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 36182580b..d57bc2739 100755 --- a/src/cg/cg3300.cpp +++ b/src/cg/cg3300.cpp @@ -25,6 +25,7 @@ #include "cg3.h" #include "cg3300.h" +#include "cglib.h" #include "cg3300a.h" #include "cg3300b.h" @@ -469,18 +470,19 @@ void TStampa_allegati::ricalcola(int anno_dic) { pi.addstatus(1); - const int tiporeg = reg.get_int("I0"); - if ((tiporeg != 2) && (tiporeg != 1)) + const tiporeg tipo = cached_registro(reg).tipo_registro(); + + if ((tipo != acquisto) && (tipo != vendita)) continue; - if (tiporeg == 1) + if (tiporeg == vendita) { - bool sosp = reg.get_bool ("B0"); - if (sosp) continue; - vendite = TRUE; + if (cached_registro(reg).sospeso()) + 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 7978e2593..721fed667 100755 --- a/src/cg/cg3700.cpp +++ b/src/cg/cg3700.cpp @@ -84,7 +84,6 @@ 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); @@ -117,12 +116,6 @@ 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(); @@ -144,8 +137,8 @@ bool TLista_fatture::filter_func1(const TRelation *r) if (riv.get(RMI_TIPODET).blank() || percind.is_zero()) return false; - const int tiporeg = a.tiporeg(rg); - if (tiporeg != 2) + const tiporeg tipo = cached_registro(rg).tipo_registro(); + if (tipo != acquisto) return false; } else // Tipo costo/ricavo @@ -443,8 +436,9 @@ bool TLista_fatture::preprocess_page(int file, int counter) if (_tipo == intra) { TString4 codiva = rec.get(RMI_CODIVA); - const int tipomov = tiporeg(mov.get(MOV_REG)); - if (tipomov == 2 && tipodet == 9) + const tiporeg tipomov = cached_registro(mov.get(MOV_REG)).tipo_registro(); + + if (tipomov == acquisto && 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 @@ -469,8 +463,10 @@ bool TLista_fatture::preprocess_page(int file, int counter) _tot_iva += iva; _tp_imp += imp; _tp_iva += iva; - const int tipomov = tiporeg(mov.get(MOV_REG)); - if (_tipo == indetraibile && tipomov == 2 && tipodet > 0) + + const tiporeg tipomov = cached_registro(mov.get(MOV_REG)).tipo_registro(); + + if (_tipo == indetraibile && tipomov == acquisto && 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 7719a25b1..f39d92366 100755 --- a/src/cg/cg4100.cpp +++ b/src/cg/cg4100.cpp @@ -24,7 +24,7 @@ #include #include -#include "cglib02.h" +#include "cglib.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 = normale; + tiposal tsal = saldo_normale; char provvis; TDate datareg; @@ -127,20 +127,11 @@ 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); - // 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; - } - + tsal = saldo_normale; // Tipo saldo normale per default + if(codcaus.full()) + tsal = cached_causale(codcaus, year).tipo_saldo(); 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 79b104bf5..f3980cc42 100755 --- a/src/cg/cg4300.cpp +++ b/src/cg/cg4300.cpp @@ -208,7 +208,6 @@ 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); @@ -225,7 +224,6 @@ 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 a9b1f7207..642eee98b 100755 --- a/src/cg/cg4300.h +++ b/src/cg/cg4300.h @@ -338,7 +338,6 @@ class TLiquidazione_app : public TPrint_application TTable* _pla; TTable* _ppa; TTable* _reg; - TTable* _iva; TTable* _del; // a reference rectype per file/table @@ -346,7 +345,6 @@ 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; @@ -622,7 +620,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 828a1984e..8dbb5ec89 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); // perchè sta cosa ) , has_single_activity); + const bool waspla = look_pla(cattiv, 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); - TCodiceIVA civa(codiva); + const TCodiceIVA& civa = cached_codIVA(codiva); #ifdef DBG BREAK_DBG; @@ -1466,17 +1466,16 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & continue; } - 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 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 const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR); const int tipocr = atoi(tipocr_s); @@ -1559,7 +1558,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt, TAssoc_array & sezfat = tipomov == vendita ? 'D' : 'A'; - if (is_detr_diff == 1 || civa.tipo() == "NS") + if (is_detr_diff == 1 || civa.iva_non_soggetta()) continue; if (bIsMovDiff && tm == tm_fattura) { @@ -2221,8 +2220,10 @@ 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 ? { - if (look_iva(_pcon_2_r->get(PCN_IVACOMP))) - ivacomp = _iva->get("CODTAB"); // Ecco il codice IVA di compensazione + const TCodiceIVA & civa = cached_codIVA(_pcon_2_r->get(PCN_IVACOMP)); + + if (civa.ok()) + ivacomp = civa.codice(); // 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... @@ -2727,11 +2728,10 @@ 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 - look_iva(*_pim_codiva); - real old_iva = _pim->get_real("R1"); - real perc = _iva->get_real("R0"); + 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(); - real new_iva = _pim->get_real("R0") * perc / CENTO; round_al_centesimo(new_iva); if (new_iva != old_iva) @@ -2759,10 +2759,9 @@ 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 - look_iva(*_pia_codcom); - real perc = _iva->get_real("R0"); - - real iva = _pia->get_real("R0") * perc / CENTO; + const TCodiceIVA & civa = cached_codIVA(*_pia_codcom); + real iva = _pia->get_real("R0") * civa.moltiplicatore_percentuale(); + round_al_centesimo(iva); agr_detIA += iva; _pia->put("R1",iva); @@ -2994,12 +2993,14 @@ void TLiquidazione_app::iva11_set_arr_phase_1(const TString& codatt) if (is_split_payment(_mov->curr())) imposta = ZERO; - 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 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 TRectype& rcs = _cur->curr(LF_CAUSALI); const bool autofattura = rcs.get_bool("AUTOFATT"); const bool valintra = rcs.get_bool("VALINTRA"); @@ -3379,14 +3380,17 @@ void TLiquidazione_app::iva11_set_arr_phase_2(const TString& codatt) // Must consider current activity too... codiva = *_pim_codiva; reg = *_pim_codreg; - 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 + + 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 treg = (tiporeg)_reg->get_long("I0"); const bool is_vendita = treg == vendita; const bool is_acquisto = treg == acquisto; @@ -3484,7 +3488,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 = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota + ca._aliquota = civa.percentuale(); // Se e' nuovo setta l'aliquota } tt = _pim->get("S0"); @@ -4541,8 +4545,10 @@ void TLiquidazione_app::recalc_annual(const char* att, bool & first) const int tipocr = atoi(*_pim_tipocr); codiva = *_pim_codiva; reg = *_pim_codreg; - look_iva(codiva); look_reg(reg); - tiva = _iva->get("S1"); + const TCodiceIVA & civa = cached_codIVA(codiva); + + look_reg(reg); + tiva = civa.tipo(); const TRegistro & reg = cached_registro(_reg->curr()); const tipo_sospensione simp = reg.sospensione(); @@ -4573,7 +4579,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 = _iva->get_real("R0") / CENTO; // Se è nuovo setta l'aliquota + ca._aliquota = civa.moltiplicatore_percentuale(); // Se è nuovo setta l'aliquota } if (tipoatt == 1) volaff1 += imp_ifs; diff --git a/src/cg/cg4302.cpp b/src/cg/cg4302.cpp index 1d947d1d3..1e45fa0c8 100755 --- a/src/cg/cg4302.cpp +++ b/src/cg/cg4302.cpp @@ -554,8 +554,7 @@ bool TLiquidazione_app::look_pla(const char* a, bool create) (*_pla_codatt) = buf; const TString16 s = _pla_r->get("CODTAB"); - const int err = _pla->read(); - bool ok = err == NOERR; + bool ok = _pla->read() == NOERR; if (!ok && create) { _pla->zero(); @@ -584,6 +583,7 @@ bool TLiquidazione_app::look_reg(const char* reg) return rt; } +/* bool TLiquidazione_app::look_iva(const char* cod) { bool rt = true; @@ -604,6 +604,7 @@ bool TLiquidazione_app::look_iva(const char* cod) return rt; } +*/ bool TLiquidazione_app::look_ppa(int month, const char* codatt, int type, bool create) { @@ -982,8 +983,10 @@ real TLiquidazione_app::aliquota_agvia() { real r; const TString& codagv = ini_get_string(CONFIG_STUDIO, "cg", "CodAgv"); - if (codagv.full() && look_iva(codagv)) // Controlla se è vuoto! CM600475 - r = _iva->get_real("R0"); + const TCodiceIVA & civa = cached_codIVA(codagv); + + if (civa.ok()) // Controlla se è vuoto! CM600475 + r = civa.percentuale(); return r; } diff --git a/src/cg/cg4303.cpp b/src/cg/cg4303.cpp index d521bc851..0fb74019b 100755 --- a/src/cg/cg4303.cpp +++ b/src/cg/cg4303.cpp @@ -95,10 +95,13 @@ 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 - if (month == 13 && look_iva(ci->_codiva)) + const TCodiceIVA & civa = cached_codIVA(ci->_codiva); + + if (month == 13 && civa.ok()) { - if (_iva->get("S10").not_empty()) // Solo CD1_1 ha senso coi corrispettivi... + if (civa.tipo_comunicazione_attive().full()) // Solo CD1_1 ha senso coi corrispettivi... { _pum->curr().add("R14", imponibile); // CD1_1 _pum->rewrite(); @@ -142,12 +145,11 @@ 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); - look_iva(*_pim_codiva); + const TCodiceIVA & civa = cached_codIVA(*_pim_codiva); // base di riparto solo se non esente, non soggetto, non imponibile - TString16 tipoiva(_iva->get("S1")); + TString16 tipoiva(civa.tipo()); TString16 reg = *_pim_codreg; - /* * caso particolare SENSU Vladimiro (1995) #MI3001 * questi vengono pero' conteggiati nel totale @@ -161,18 +163,15 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) if (tipocr == 1 && (mese == m) && att == (const char*)(*_pim_codatt)) { - if (tipoiva != "NS" && tipoiva != "NI" && tipoiva != "ES") + if (civa.iva_da_ventilare()) { real lurd = _pim->get_real("R0"); lurd += _pim->get_real("R1"); - 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"); - } + real perc = civa.percentuale(); + TString other = civa.iva_a_cui_ventilare(); + + if (other.full()) + perc = cached_codIVA(other).percentuale(); // ventila a un altro codice add_ventilation(perc / CENTO, lurd, *_pim_codiva, other); } } @@ -341,9 +340,11 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) _pam->rewrite(); // Aggiorna il totale IVA periodica CD1_1 - if (month == 13 && look_iva(vv->_codiva)) + const TCodiceIVA & civa = cached_codIVA(vv->_codiva); + + if (month == 13 && civa.ok()) { - if (_iva->get("S10").not_empty()) // Solo CD1_1 ha senso coi corrispettivi + if (civa.get("S10").full()) // Solo CD1_1 ha senso coi corrispettivi { _pum->curr().add("R14", imponibile); // CD1_1 _pum->rewrite(); @@ -364,9 +365,10 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) // viene amorosamente messo a quanto il codice IVA prevede if (!was) { - look_iva(vv->_codiva); + const TCodiceIVA & civa = cached_codIVA((vv->_codiva)); + _pim->put("I1", (long)vendita); - if (!_iva->get_bool("B4")) + if (!civa.escluso_dal_rimborso()) _pim->put("B3", "X"); } _pim->rewrite(); @@ -533,8 +535,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 - look_iva(codiva); - const bool non_sogg = _iva->get("S1") == "NS"; + const TCodiceIVA & civa = cached_codIVA(codiva); + const bool non_sogg = civa.iva_non_soggetta(); if (!is_mens) // Trimestrali { @@ -565,7 +567,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 = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota + ca._aliquota = civa.moltiplicatore_percentuale(); // Se e' nuovo setta l'aliquota corr_ann.add(codiva,ca); } } diff --git a/src/cg/cg4304.cpp b/src/cg/cg4304.cpp index 802b36f0a..fe6386e0d 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); - look_iva(*_pim_codiva); + const TCodiceIVA & civa = cached_codIVA(*_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 = _iva->get("S1"); + TString4 tipoiva = civa.tipo(); if (_year != *_pim_anno || (month == 13 && mese < 13)) continue; @@ -564,28 +564,19 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool continue; TString4 codiva = codtab.mid(16,4); codiva.trim(); - if (!look_iva(codiva)) + const TCodiceIVA & civa = cached_codIVA(codiva); + + if (!civa.ok()) continue; tiporeg tipomov = (tiporeg)_reg->get_int("I0"); bool corrisp = _reg->get_bool("B0"); - const TString4 tipoiva = _iva->get("S1"); + const TString4 tipoiva = civa.tipo(); 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"); @@ -603,10 +594,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; @@ -713,7 +704,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 = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota + ca._aliquota = civa.moltiplicatore_percentuale(); // Se e' nuovo setta l'aliquota corr_ann.add(codiva,ca); } // vedi corrispettivi veri e falsi @@ -1804,8 +1795,9 @@ void TLiquidazione_app::set_pim(_DescrItem& d) rw++; else { - look_iva(d._s1); - d._s2 = _iva->get("S0"); + const TCodiceIVA & civa = cached_codIVA(d._s1); + + d._s2 = civa.get("S0"); if (d._s2.len() > 19) d._s2.cut(19); } @@ -2934,8 +2926,9 @@ void TLiquidazione_app::set_ventila(_DescrItem& d) for(i = 0; i < d._arr.items(); i++) { _vDesc& vd = (_vDesc&)d._arr[i]; - look_iva(vd._codiva); - s0 = _iva->get("S0"); s0.cut(23); + const TCodiceIVA & civa = cached_codIVA(vd._codiva); + + s0 = civa.descrizione(); s0.cut(23); set_row(row+i,"@8g%5s@17g%-23s@41g%r@68g%r@89g%r", (const char*)vd._codiva, @@ -3065,13 +3058,15 @@ void TLiquidazione_app::set_regagr(_DescrItem& d) _DescrItem& di = (_DescrItem&) agr_array[i]; if (di._flags != PROGAGR) continue; - look_iva(di._s0); - des = _iva->get("S0"); des.cut(25); - al = _iva->get_real("R0"); + + const TCodiceIVA & civa = cached_codIVA(di._s0); + + des = civa.descrizione(); des.cut(25); + al = civa.percentuale(); 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); - look_iva(di._s1); - al = _iva->get_real("R0"); + const TCodiceIVA & civa1 = cached_codIVA(di._s1); + al = civa1.percentuale(); 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 6ee35f88c..9b287bfe9 100644 --- a/src/cg/cg7600.cpp +++ b/src/cg/cg7600.cpp @@ -160,6 +160,16 @@ 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; @@ -185,12 +195,12 @@ void TQuadro_VE_recordset::load() break; case acq_ind_pass_int: // passaggi interni if (vendite) - add_value("VE40.1", iva); + add_value("VE40.1", imp); break; case acq_ind_art_19: // indetr. art. 19 break; case cess_amm: // cessioni amministrative - add_value("VE40.1", iva); + add_value("VE40.1", imp); break; case vend_rimborso: // vendite valide per rimborso break; @@ -251,24 +261,28 @@ 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(); + 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()); - 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); - } - } + 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); + } + } + */ TISAM_recordset & reg = get_recordset(REP_REGOLARIZ); @@ -305,6 +319,7 @@ 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 23519d24a..7d63d1d26 100644 --- a/src/cg/cg7700.cpp +++ b/src/cg/cg7700.cpp @@ -286,9 +286,9 @@ void TQuadro_VF_recordset::load() } if (non_soggetto) { - if (tipo_iva11_acq == "15A" || int_tipo_iva11_acq == 15) + if (int_tipo_iva11_acq == 15) { - if (tipo_iva11_acq == "15A") + if (tipo_iva11_acq == "15B") add_value("VF17.2", imp); add_value("VF17.1", imp); } diff --git a/src/cg/modf24/cg5500.cpp b/src/cg/modf24/cg5500.cpp deleted file mode 100755 index 58498067f..000000000 --- a/src/cg/modf24/cg5500.cpp +++ /dev/null @@ -1,2069 +0,0 @@ -#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 deleted file mode 100755 index 573c48ee2..000000000 --- a/src/cg/modf24/cg5500.h +++ /dev/null @@ -1,129 +0,0 @@ -#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 deleted file mode 100755 index 654051ba8..000000000 --- a/src/cg/modf24/cg5501.cpp +++ /dev/null @@ -1,137 +0,0 @@ -#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 1ceafa2b6..e44b97df4 100755 --- a/src/cm/cm1100.cpp +++ b/src/cm/cm1100.cpp @@ -10,7 +10,7 @@ #include #include "..\cg\cgsaldac.h" -#include "..\cg\cg2103.h" +#include "..\cg\cglib.h" #include "..\ve\velib.h" #include "cm1100a.h" diff --git a/src/crpa/crpa0.cpp b/src/crpa/crpa0.cpp index c40cda5b5..623adbdb0 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/cg2103.h" +#include "../cg/cglib.h" #include "../ca/movana.h" #include "../ca/rmovana.h" diff --git a/src/db/db0500.cpp b/src/db/db0500.cpp index 6104e7033..bfbdfd8a2 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(const TToken_string& row); + bool test_row(int nrow); void load_um(); static void sheetrighe_get(TSheet_field &fld_righe, int item); @@ -1071,12 +1071,13 @@ void TDistinta_mask::load_um() } -bool TDistinta_mask::test_row(const TToken_string& row) +bool TDistinta_mask::test_row(int nrow) { + TSheet_field& sheet = sfield(F_SHEET); const TCodice_articolo father = get(F_CODICE); - - TCodice_articolo code; row.get(1, code); + TCodice_articolo code = sheet.get_str_row_cell(nrow, F_CODART); bool ok = code != father; + if (ok && _tree.find_node(father) > 0) { TToken_string path; _tree.curr_id(path); @@ -1088,12 +1089,9 @@ bool TDistinta_mask::test_row(const TToken_string& row) "in quanto la distinta risulterebbe ciclica."), (const char*)code); // Se e' una lavorazione - 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); - } + 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); return ok; } @@ -1170,41 +1168,47 @@ 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: - 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); + { + 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); + } break; case se_notify_modify: - return test_row(row); + return test_row(int(jolly)); + break; 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--) { - const TToken_string& row = sheet.row(n); - row.get(F_CODART-FIRST_FIELD, code); - if (!code.blank()) + code = sheet.get_str_row_cell(n, F_CODART); + if (code.full()) { - if (!test_row(row)) + if (!test_row(nrig)) return false; for (int m = n - 1; m >= 0; m--) { - const TToken_string& row = sheet.row(m); - row.get(F_CODART-FIRST_FIELD, code1); - if (code == code1) + if (code == sheet.get_str_row_cell(m, F_CODART)) { int k = noyesall_box("Il codice %s e' ripetuto alla riga %d,\ncontinuare ugualmente ?", (const char *) code, n + 1); if (k == K_NO) @@ -1219,7 +1223,7 @@ bool TDistinta_mask::on_distsheet_event(TOperable_field& o, TField_event e, long sheet.destroy(n); } } - if (sheet.items() == 0) + if (((TSheet_field&)o).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 093d820b2..2b02867c7 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@|DISABLE,12@|DISABLE,13@|DISABLE,14@ + MESSAGE SHOW,11@|HIDE,12@|HIDE,13@|HIDE,14@|ENABLE,F_UMEXPR|ENABLE,11@|CLEAR,12@|CLEAR,13@|CLEAR,14@ ITEM "L|Lavorazione" - MESSAGE HIDE,11@|SHOW,12@|HIDE,13@|HIDE,14@|DISABLE,F_UMEXPR|DISABLE,11@|ENABLE,12@|DISABLE,13@|DISABLE,14@ + MESSAGE HIDE,11@|SHOW,12@|HIDE,13@|HIDE,14@|CLEAR,F_UMEXPR|CLEAR,11@|ENABLE,12@|CLEAR,13@|CLEAR,14@ ITEM "D|Distinta" - MESSAGE HIDE,11@|HIDE,12@|SHOW,13@|HIDE,14@|ENABLE,F_UMEXPR|DISABLE,11@|DISABLE,12@|ENABLE,13@|DISABLE,14@ + MESSAGE HIDE,11@|HIDE,12@|SHOW,13@|HIDE,14@|ENABLE,F_UMEXPR|CLEAR,11@|CLEAR,12@|ENABLE,13@|CLEAR,14@ ITEM "V|Variabile" - MESSAGE HIDE,11@|HIDE,12@|HIDE,13@|SHOW,14@|CLEAR,F_UMEXPR|DISABLE,11@|DISABLE,12@|DISABLE,13@|ENABLE,14@ + MESSAGE HIDE,11@|HIDE,12@|HIDE,13@|SHOW,14@|CLEAR,F_UMEXPR|CLEAR,11@|CLEAR,12@|CLEAR,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 31cf11395..30c8a5dfc 100755 --- a/src/db/db1100.cpp +++ b/src/db/db1100.cpp @@ -11,7 +11,7 @@ #include #include -#include "../cg/cglib01.h" +#include "../cg/cglib.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 64dc7af85..2f9214c51 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, NULL); + ass[c].add(articolo); 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, NULL); + ass[!c].add(father); } cur.freeze(FALSE); } @@ -559,7 +559,7 @@ void TImplosion_mask::implode_slow() key << row->get(); key.rtrim(); } - _xmas.add(key, NULL); + _xmas.add(key); } } @@ -623,7 +623,7 @@ void TImplosion_mask::implode_medium() key = articolo; if (livello.not_empty()) key << '|' << livello; - _xmas.add(key, NULL); + _xmas.add(key); TAssoc_array roots; const long items = find_roots(articolo, roots); diff --git a/src/db/dbtblav.h b/src/db/dbtblav.h index 59ecc28ad..c4c769a92 100755 --- a/src/db/dbtblav.h +++ b/src/db/dbtblav.h @@ -1,25 +1,25 @@ -#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_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_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 3e70dde8d..563425b55 100755 --- a/src/ef/ef0100.cpp +++ b/src/ef/ef0100.cpp @@ -524,6 +524,23 @@ 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 bea30c9ba..2147194f3 100644 --- a/src/f1/f1lib.cpp +++ b/src/f1/f1lib.cpp @@ -20,20 +20,14 @@ TFppro& fppro_db() return *fppro; } -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) +bool TFppro::sql_inj(TToken_string& keys) { TToken_string str("", ';'); - str.add(keys.prginvio); - str.add(keys.headerfatt); - str.add(keys.bodyfatt); - return sql_inj(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"); } bool TFppro::check_reg(TToken_string& keys, int numreg) @@ -44,68 +38,74 @@ 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 - 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); + TCli_for forn = cached_clifor('F', mov.get_long(MOV_CODCF)); + + const TString4 statopiva(forn.get(CLI_STATOPAIV)); + 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 << "%') AND \n" << - (cli_statopiva.full() ? TString("P2_FISCIVAPAESE = '") << cli_statopiva << "' AND " : "") << - "P2_FISCIVACOD = '" << cli_piva << "' AND \n" << "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 << "%') \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; if (_db->sq_set_exec(query) && _db->sq_items() == 1) { - _keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") }; + _keys = _db->sq_get("KEYPRGINVIO"); + _keys.add(_db->sq_get("KEYHEADERFATT")); + _keys.add(_db->sq_get("KEYBODYFATT")); return true; } - return false; } -const char* TFppro::get_keys_fppro() const +const char* TFppro::get_keys_fppro() { - static TString keys; - keys.cut(0) << _keys.prginvio << ";" << _keys.headerfatt << ";" << _keys.bodyfatt; - return (const char*)keys; + TString& keys = get_tmp_string(64); + + keys.cut(0) << _keys.get(0) << ";" << _keys.get(1) << ";" << _keys.get(2); + return keys; } -int TFppro::get_numreg() +long TFppro::get_numreg() { if (!_is_set) { if (set_query()) - return _db->sq_get_int("PZ_NUMREGCONT"); + return _db->sq_get_long("PZ_NUMREGCONT"); return -1; } - return _db->sq_get_int("PZ_NUMREGCONT"); + return _db->sq_get_long("PZ_NUMREGCONT"); } -int TFppro::get_numreg(TToken_string& keys) +long TFppro::get_numreg(TToken_string& keys) { set_keys(keys); return get_numreg(); } -TString TFppro::get_codforn() const +long TFppro::get_codforn() { TString query; + query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get("PZ_CLIFOR"); + return _db->sq_get_long("PZ_CLIFOR"); } TDate TFppro::get_datareg() @@ -127,12 +127,13 @@ TDate TFppro::get_datareg(TToken_string& keys) return TDate(); } -real TFppro::get_ritenute() const +real TFppro::get_ritenute() { - real imp = ZERO; + real imp; TString query; + query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << - "WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; + "WHERE P7_KEYPRGINVIO = '" << _keys.get(0) << "' AND P7_KEYHEADERFATT = '" << _keys.get(1) << "' AND P7_KEYBODYFATT = '" << _keys.get(2) << "'"; _db->sq_set_exec(query, false); for(bool ok = _db->sq_next(); ok; ok = _db->sq_next()) imp += _db->sq_get_real("IMPORTO"); @@ -140,66 +141,69 @@ real TFppro::get_ritenute() const } 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 { - _last_error.cut(0) << "Chiavi settate non valide:\n" << keys; - _keys_setted = false; + 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; + } } _is_set = false; return *this; } -bool TFppro::associa_mov(const int numreg) const +bool TFppro::associa_mov(const long numreg) { - bool ok; - TLocalisamfile mov(LF_MOV); - mov.put(MOV_NUMREG, numreg); - if ((ok = mov.read() == NOERR)) + TRectype & mov = (TRectype &) cache().get(LF_MOV, numreg); + bool ok = mov.full(); + + if (ok) { - mov.put(MOV_KEYFPPRO, get_keys_fppro()); - if ((ok = mov.rewrite() == NOERR)) // Scrivo sul movimento il riferimento al fppro + 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 { - 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(); - } + 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(); } } return ok; } -const char* TFppro::get_tipoprot() const +const TString & TFppro::get_tipoprot() { TString query; @@ -208,80 +212,98 @@ const char* TFppro::get_tipoprot() const return _db->sq_get("TIPOPROT"); } -const char* TFppro::get_numprot() const +const TString & TFppro::get_numprot() { TString query; - static TString num; + query << "SELECT PZ_NUMPROT AS NUMPROT FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return num.cut(0) = _db->sq_get("NUMPROT"); + + return _db->sq_get("NUMPROT"); } -const char* TFppro::get_annoprot() const +const TString & TFppro::get_annoprot() { TString query; - static TString anno; + query << "SELECT PZ_ANNOPROT AS ANNOPROT FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return anno.cut(0) = _db->sq_get("ANNOPROT"); + return _db->sq_get("ANNOPROT"); } -const char* TFppro::get_dataoraric() const +const TString & TFppro::get_dataoraric() { TString query; - static TString data; - query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str(); + TString & data = get_tmp_string(16); + + query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return data.cut(0) << _db->sq_get_date("DATAORARIC").date2ansi(); + data << _db->sq_get_date("DATAORARIC").date2ansi(); + return data; } -const char* TFppro::get_tipodoc() const +const TString & TFppro::get_tipodoc() { TString query; - static TString tipodoc; + query << "SELECT PZ_TIPODOC AS TIPODOC FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return tipodoc.cut(0) << _db->sq_get("TIPODOC"); + return _db->sq_get("TIPODOC"); } -const char* TFppro::get_numdoc() const +const TString & TFppro::get_numdoc() { TString query; - static TString numdoc; + query << "SELECT PZ_NUMERO AS NUMDOC FROM FPPRO00F\r\n" << where_str(); _db->sq_set_exec(query); - return numdoc.cut(0) << _db->sq_get("NUMDOC"); + return _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_dataorarioric() const +TDate TFppro::get_data_doc() { 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.prginvio << "' AND P1_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P1_KEYBODYFATT = '" << _keys.bodyfatt << "'"; + "WHERE P1_KEYPRGINVIO = '" << _keys.get(0) << "' AND P1_KEYHEADERFATT = '" << _keys.get(1) << "' AND P1_KEYBODYFATT = '" << _keys.get(2) << "'"; _db->sq_set_exec(query); return _db->sq_get_date("P1_DATAORARIC"); } -int TFppro::get_numregcont() const +long TFppro::get_numregcont() { TString query; + query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str(); _db->sq_set_exec(query); - return _db->sq_get_int("PZ_NUMREGCONT"); + return _db->sq_get_long("PZ_NUMREGCONT"); } TString TFppro::get_last_error(bool clear) { - TString l(_last_error); + TString & l = get_tmp_string(128); + + l = _last_error; if(clear) _last_error.cut(0); return l; @@ -297,14 +319,14 @@ bool TFppro::set_query() return _is_set = false; } -const char* TFppro::where_str() const +const char* TFppro::where_str() { static TString str; - str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'"; + str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.get(0) << "' AND PZ_KEYHEADERFATT = '" << _keys.get(1) << "' AND PZ_KEYBODYFATT = '" << _keys.get(2) << "'"; return str; } -TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _keys_setted(false), _is_set(false) +TFppro::TFppro() : _keys("", ';'), _keys_setted(false), _is_set(false) { _db = new SSimple_query(); const bool ok = set_connection(*_db); @@ -322,13 +344,14 @@ prot_s TProtocollo::get_prot() return prot; } -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) const { - static TString protocollo; + TString & protocollo = get_tmp_string(128); TString tipo(tipoprot); + if (tipo.empty()) tipo << "no_prot"; - protocollo.cut(0) << year << "-" << tipo << "/" << progres; + protocollo << year << "-" << tipo << "/" << progres; return protocollo; } @@ -348,7 +371,7 @@ void TProtocollo::sset(const char* prot) _progres = p.get(); } -TString& TProtocollo::get_prot() const +const TString& TProtocollo::get_prot() const { return prot_in(_year, _tipoprot, _progres); } @@ -363,29 +386,21 @@ const char* get_ini_codcaus() return ini_get_string(FILE_CONFIG, FILE_SECTION, F1_CAUS); } -const char* get_codcaus(const char * tipodoc, const long codcf) +const char* get_codcaus(const char * tipodoc, long codcf) { - TLocalisamfile cfven(LF_CFVEN); - cfven.put(CFV_TIPOCF, "F"); - cfven.put(CFV_CODCF, codcf); - const char* codcaus = ""; - const char* codcausnc = ""; + TCli_for f = cached_clifor('F', codcf); const bool nc = TString(tipodoc) == "TD04"; - if (cfven.read() == NOERR) - { - codcaus = cfven.get(CFV_CODCAUS); - codcausnc = cfven.get(CFV_CODCAUSNC); - } - if (nc) { - if (!TString(codcausnc).empty()) - return codcausnc; + const TString & codcaus = f.vendite().get(CFV_CODCAUSNC); + if (codcaus.full()) + return codcaus; } else { - if (!TString(codcaus).empty()) + const TString & codcaus = f.vendite().get(CFV_CODCAUS); + if (codcaus.full()) return codcaus; } return get_ini_codcaus(); @@ -396,12 +411,12 @@ bool get_endatareg() return ini_get_bool(FILE_CONFIG, FILE_SECTION, "endatareg"); } -TString get_datainireg() +const TString & get_datainireg() { return ini_get_string(FILE_CONFIG, FILE_SECTION, "datainireg"); } -TString get_dataendreg() +const TString & get_dataendreg() { return ini_get_string(FILE_CONFIG, FILE_SECTION, "dataendreg"); } @@ -444,74 +459,42 @@ bool check_causale(const TString& cod_caus, bool acq) bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq) { - const TCausale& caus = cached_causale(cod_caus); + const TCausale& c = cached_causale(cod_caus); if(tipo_doc == "FA" || tipo_doc == "BD" || tipo_doc == "AF" || tipo_doc == "FF") - return caus.tipo_doc() == tipo_doc; + return c.tipo_doc() == tipo_doc; if (tipo_doc == "NC" || tipo_doc == "ND") { bool nota; bool nota_iva = false; - if ((nota = caus.tipo_doc() == tipo_doc)) + + if ((nota = c.tipo_doc() == tipo_doc)) { if (acq) - nota_iva = caus.reg().tipo() == iva_acquisti; + nota_iva = c.reg().tipo() == iva_acquisti; else - nota_iva = caus.reg().tipo() == iva_vendite; + nota_iva = c.reg().tipo() == iva_vendite; } return nota && nota_iva; } - return false; } -bool check_caus_has_rit(const TString& cod_caus, bool rit) +bool check_caus_has_rit(const TString& cod_caus, int year) { - TLocalisamfile causali(LF_CAUSALI); - causali.put(CAU_CODCAUS, cod_caus); - causali.read(); - return *causali.get(CAU_M770) != '\0'; + const TCausale & c = cached_causale(cod_caus, year); + + return c.causale_770().full(); } void run_cont_ini(bool liq) { - 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(); + TString cmd; + + cmd.cut(0) << "cg2 -0 -i" << TFilename().temp("cg2CONTAB", "ini") << " -f1" << (liq ? " -liq" : " ") << " /u" << user(); + + TExternal_app app(cmd); + + app.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 7f28f60d9..7234d5445 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,63 +39,48 @@ typedef struct _prot_s */ class TFppro : public TObject { - 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; - + TToken_string _keys; SSimple_query* _db; bool _keys_setted; bool _is_set; // Query is setted TString _fppro_query; TString _last_error; - static bool sql_inj(const TString& str); - static bool sql_inj(const keys_s& keys); + bool sql_inj(TToken_string& keys); public: - const char* where_str() const; + const char* where_str(); 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() const; - int get_numreg(); - int get_numreg(TToken_string& keys); - TString get_codforn() const; + const char* get_keys_fppro(); + long get_numreg(); + long get_numreg(TToken_string& keys); + long get_codforn(); TDate get_datareg(); TDate get_datareg(TToken_string& keys); - real get_ritenute() const; + real get_ritenute(); TDate get_data_first_doc() const; - TDate get_dataorarioric() const; - int get_numregcont() const; + TDate get_dataorarioric(); + long get_numregcont(); + 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(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; + 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(); - TFppro(); + TFppro(); TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } }; @@ -111,37 +96,30 @@ public: void set(const TProtocollo& prot); void sset(const char* prot); - TString& get_prot() const; + const TString& get_prot() const; prot_s get_prot(); int get_year() const { return _year; } - 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()); } - + 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; }; -class TF1_log : TObject +class TF1_log : public TLog_report { - TLog_report* _log; public: - TF1_log() : _log(nullptr){} - void log(int severity, const char* msg); - bool show_log(); + TF1_log() : TLog_report("Stato contabilizzazione:") {} + bool show_log() { export_text("f1_cg.log", 0, false); return preview(); } }; TFppro& fppro_db(); const char* get_ini_codcaus(); -const char* get_codcaus(const char * tipodoc, const long codcf); +const char* get_codcaus(const char * tipodoc, long codcf); bool get_endatareg(); -TString get_datainireg(); -TString get_dataendreg(); -bool get_periodprec(); +const TString & get_datainireg(); +const TString & get_dataendreg(); +bool get_periodprec(); void set_ini_codcaus(const TString& codcaus); void set_endatareg(bool enable); @@ -153,7 +131,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, bool rit); +bool check_caus_has_rit(const TString& cod_caus, int year = 0); void run_cont_ini(bool liq); #endif // _F1LIB_H_ diff --git a/src/f9/f9lib02.cpp b/src/f9/f9lib02.cpp index 0914762af..9c0640655 100644 --- a/src/f9/f9lib02.cpp +++ b/src/f9/f9lib02.cpp @@ -593,7 +593,9 @@ bool TF9Prospetto_integr::operator()(const char* numreg_acq, const char* numreg_ _items = _prosp_rs->items(); if (_items == 0) { - FILE* log = fopen("TF9Prospetto_integr_error.txt", "a"); + FILE* log; + + fopen_s(&log, "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 6cf7d88ed..9fbd519fb 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 *), _SortInc); + qsort((void *)tmpa,n,sizeof(DEC *), (int (__cdecl *)(void)) _SortInc); if (n%2) _MacDCopy(pDst, tmpa[(n-1)/2]); diff --git a/src/gv/gvlib.cpp b/src/gv/gvlib.cpp index 8eceda97c..318f39cf3 100755 --- a/src/gv/gvlib.cpp +++ b/src/gv/gvlib.cpp @@ -5,7 +5,6 @@ #include "../cg/cglib.h" - /////////////////////////////////////////////////////////// // TRigheF24_set /////////////////////////////////////////////////////////// diff --git a/src/ha/ha1300.cpp b/src/ha/ha1300.cpp index 97d52d481..7e1c67a38 100755 --- a/src/ha/ha1300.cpp +++ b/src/ha/ha1300.cpp @@ -5,7 +5,7 @@ #include #include "../cg/cg2101.h" -#include "../cg/cg2103.h" +#include "../cg/cglib.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 eed031101..934a24f47 100755 --- a/src/ha/hacnv300.cpp +++ b/src/ha/hacnv300.cpp @@ -12,7 +12,7 @@ #include #include "../cg/cglib01.h" -#include "../cg/cg2103.h" +#include "../cg/cglib.h" #include "../cg/cgsaldac.h" #include "../cg/cgpagame.h" diff --git a/src/ic/ic0100f.rep b/src/ic/ic0100f.rep index d9aa99419..d671d9cd9 100644 --- a/src/ic/ic0100f.rep +++ b/src/ic/ic0100f.rep @@ -395,7 +395,9 @@ THEN #F1.203 +! - USE IVADIFF SELECT (BETWEEN(DATAREG,#DAL,#AL))(TIPOIVA==#TIPOIVA)(TIPODIFF==#TIPODIFF)((CHIUSA=#CHIUSA)||(#CHIUSA="T")) + USE IVADIFF KEY 4 SELECT (BETWEEN(DATAREGP;#DAL;#AL))(TIPOIVA==#TIPOIVA)(TIPODIFF==#TIPODIFF)((CHIUSA=#CHIUSA)||(#CHIUSA="T")) +FROM DATAREG=#DAL +TO DATAREG=#AL 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 d6719f489..ce81e5f86 100644 --- a/src/ic/ic0200.cpp +++ b/src/ic/ic0200.cpp @@ -20,7 +20,7 @@ public: void TICpag_print::main_loop() { - TMask m("ic0100a"); + TMask m("ic0200a"); while (m.run() == K_ENTER) { TICpag_report r("ic0200p"); diff --git a/src/ic/ic0200p.rep b/src/ic/ic0200p.rep index e911580c4..649ed8684 100644 --- a/src/ic/ic0200p.rep +++ b/src/ic/ic0200p.rep @@ -1,71 +1,71 @@ - + -
-
+