From 012d580f3cced746492e2489f3d74a73e7e7a0bd Mon Sep 17 00:00:00 2001 From: villa Date: Wed, 6 Dec 1995 10:14:29 +0000 Subject: [PATCH] Gabrioli' Gabriola' primanota eccola qua pero' quel sorgente la' io non so cosa ci fa (risulta che ho modificato TUTTI i cg6* che io non ho neppure mai visto) git-svn-id: svn://10.65.10.50/trunk@2245 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg2100.cpp | 4 +- cg/cg21rata.uml | 1 - cg/cg6400.cpp | 1606 ++++++++++++------------ cg/cg6500.cpp | 1540 +++++++++++------------ cg/cg6600.cpp | 2888 +++++++++++++++++++++---------------------- cg/cg6600a.uml | 126 +- cg/cg6700a.uml | 152 +-- cg/cg6801.cpp | 492 ++++---- cg/cg6803.cpp | 638 +++++----- cg/cg6803.h | 112 +- cg/cg6803a.uml | 220 ++-- cg/cg6900.cpp | 3092 +++++++++++++++++++++++------------------------ cg/cg6900.h | 314 ++--- cg/cg6900a.uml | 124 +- cg/cg6901.cpp | 1934 ++++++++++++++--------------- cg/cg6901.h | 108 +- cg/cg6902.cpp | 2606 +++++++++++++++++++-------------------- cg/pagament.cpp | 6 +- 18 files changed, 7982 insertions(+), 7981 deletions(-) diff --git a/cg/cg2100.cpp b/cg/cg2100.cpp index 89cd25083..1e610ae72 100755 --- a/cg/cg2100.cpp +++ b/cg/cg2100.cpp @@ -571,7 +571,7 @@ void TPrimanota_application::init_insert_mode(TMask& m) if (is_fattura()) { - const TString16 dt(m.get(F_DATAREG)); + const TString16 dt(m.get(F_DATADOC)); set_pagamento(NULL,dt); set_scadenze(m); } @@ -703,7 +703,7 @@ int TPrimanota_application::read(TMask& m) if (is_fattura()) // Ci sono scadenze { const TString16 cp(m.get(F_CODPAG)); - const TString16 dt(m.get(F_DATAREG)); + const TString16 dt(m.get(F_DATADOC)); set_pagamento(cp, dt); if (!read_scadenze(m)) set_scadenze(m); diff --git a/cg/cg21rata.uml b/cg/cg21rata.uml index b82f7f3f6..baa2509c3 100755 --- a/cg/cg21rata.uml +++ b/cg/cg21rata.uml @@ -37,7 +37,6 @@ BEGIN PROMPT 1 5 "Tipo pagamento " SHEET "Codice|Tipo pagamento@32" INPUT 105 - ITEM " |Altro pagamento" ITEM "1|Rimessa diretta o contanti" ITEM "2|Tratta" ITEM "3|Ricevuta Bancaria" diff --git a/cg/cg6400.cpp b/cg/cg6400.cpp index 228c903bc..348b05a27 100755 --- a/cg/cg6400.cpp +++ b/cg/cg6400.cpp @@ -1,803 +1,803 @@ -// Ricezione dati da sistema -#define STRICT -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "cglib04.h" - -#include "cg6400.h" - -class TRic_archivi : public TApplication -{ - TTable* _tab_tra; - TTransfer_file* _tras_file; - TLocalisamfile* _caus; - TLocalisamfile* _rcaus; - TLocalisamfile* _clifo; - TLocalisamfile* _pcon; - TLocalisamfile* _mov; - TLocalisamfile* _rmov; - TLocalisamfile* _rmoviva; - TLocalisamfile* _occas; - TLocalisamfile* _tab; - TArchive _arc; - - TString80 TEMP; - - char _scelta; - - int _numtotdisk,_progdisk,_numdisk,_numinv,_numinvp,_nultras; - int _stato_ripartenza,_nultras_tab; - bool _sequenza,_disketto; - bool _prima_volta,_baipassa; - TString _nomeid,_nomeidp,_marker,_trasf,_trasfer,_pathname,_ragsoc_dittar; - long _dittainv,_dittainvp,_dittaric,_totrectras,_totrectrasp; - TDate _datatras,_datatrasp,_dataultras_tab,_dataultras; - TString _sigle_file,_nrec_file,_trasfhard; - char _agg_cau,_agg_pcon,_agg_cls,_agg_clifo,_agg_fatatt,_agg_fatpas; - -public: - TString _titolo; - - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - bool main_loop(); - bool leggi_marker(); - bool leggi_marker_rep(); - void leggi_trasfer(const char* nome); - void ripristina_trasfer(); - void trasfer2tempfile(); - long leggi_tabella_tras(); - void componi_path(TMask&); - bool video_ripartenza(); - void ditta_ricevente(); - bool ripartenza(); - bool set_flag(); - void aggiorna_tabella(); - int controllo_ripartenza(); - - static bool baipassa(TMask& m,KEY k); - - TRic_archivi(char ric_trasfer); -}; - -HIDDEN TRic_archivi& app() { return (TRic_archivi &) main_app(); } - -TRic_archivi::TRic_archivi(char ric_trasfer) : _scelta(toupper(ric_trasfer)) -{ - if (_scelta == 'S') - _titolo = "Ricezione archivi da sistema"; - - if (_scelta == 'P') - _titolo = "Ricezione archivi da PC"; -} - -bool TRic_archivi::create() -{ - TApplication::create(); - - _tab_tra = new TTable ("%TRA"); - _tras_file = new TTransfer_file(); - - _caus = new TLocalisamfile (LF_CAUSALI); - _rcaus = new TLocalisamfile (LF_RCAUSALI); - _clifo = new TLocalisamfile (LF_CLIFO); - _pcon = new TLocalisamfile (LF_PCON); - _mov = new TLocalisamfile (LF_MOV); - _rmov = new TLocalisamfile (LF_RMOV); - _rmoviva = new TLocalisamfile (LF_RMOVIVA); - _occas = new TLocalisamfile (LF_OCCAS); - _tab = new TLocalisamfile (LF_TAB); - - _numdisk = 1; - _prima_volta = TRUE; - _nultras = 0; - _nultras_tab = 0; - _baipassa = FALSE; - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool TRic_archivi::destroy() -{ - delete _tab_tra; - delete _tras_file; - - delete _caus; - delete _rcaus; - delete _clifo; - delete _pcon; - delete _mov; - delete _rmov; - delete _rmoviva; - delete _occas; - delete _tab; - - return TApplication::destroy(); -} - -void TRic_archivi::componi_path(TMask& msk) -{ - if (_scelta == 'S') - { - TString path,drive; - int pos; - - path = msk.get(F_PATHNAME); - drive = msk.get(F_DRIVE); - pos = path.find(':'); - - if (drive == "A:" || drive == "B:" || drive == "D:" || drive == "E:") - _disketto = TRUE; - else - _disketto = FALSE; - - if (pos) - path = path.mid(pos+1); - - if (path != "") - { - _marker << drive << "\\" << path << "\\marker"; - _trasfer << drive << "\\" << path << "\\trasfer"; - if (!_disketto) - _pathname << drive << "\\" << path; - } - else - { - _marker << drive << "\\marker"; - _trasfer << drive << "\\trasfer"; - if (!_disketto) - _pathname << drive << "\\"; - } - } - else - if (_scelta == 'P') - { - char drive; - - drive = msk.get(F_DRIVE)[0]; - - _marker << drive << ":\\marker"; - } -} - -bool TRic_archivi::leggi_marker() -{ - TString16 tmp; - - if (!fexist(_marker)) - { - if (_disketto) - return error_box("File marker non presente sul dischetto %d: impossibile proseguire", _numdisk); - else - return error_box("File marker non presente in %s: impossibile proseguire", (const char*)_pathname); - } - - FILE* i; - - const word size = 64; - TString buffer(size); - - if ( (i = fopen(_marker,"r+t")) != NULL) - { - const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i); - - _progdisk = atoi(buffer.sub(31,33)); - _numtotdisk = atoi(buffer.sub(29,31)); - - if (_progdisk != _numdisk) - { - message_box("Il dischetto inserito non rispecchia la giusta sequenza"); - _sequenza = FALSE; - fclose(i); - return TRUE; - } - else - _sequenza = TRUE; - - if (letti == 0) - return error_box("Rilevati ERRORI nel file MARKER: impossibile proseguire"); - - _nomeid = buffer.sub(0,10); - _dittainv = atol(buffer.sub(10,14)); - _totrectras = atol(buffer.sub(23,29)); - _numinv = atoi(buffer.sub(14,17)); - tmp = buffer.sub(17,23); - _datatras = converti(tmp,FALSE); - - if (_numdisk > 1) //Va fatto solo dal disco 2 in poi - if (_nomeid != _nomeidp || _dittainv != _dittainvp || _totrectras != _totrectrasp - || _numinv != _numinvp || _datatras != _datatrasp) - return error_box("I dati del marker del disco %d, non corrispondono ai dati del marker del disco 1", _numdisk); - - _nomeidp = _nomeid; - _dittainvp = _dittainv; - _totrectrasp = _totrectras; - _numinvp = _numinv; - _datatrasp = _datatras; - - fclose(i); - - if (_numdisk == 1) // Va fatto solo per il primo disco - { - _dittaric = leggi_tabella_tras(); - - if (_dittaric != 0) - { - if (!prefix().exist(_dittaric)) - return error_box("Libreria archivi ditta non presente su disco"); - } - else - return error_box("Codici NON PRESENTI in tabella ricezione: caricarli e riprovare"); - } - - return TRUE; - } - - return FALSE; -} - -bool TRic_archivi::leggi_marker_rep() -{ - TString16 tmp; - - if (!fexist(_marker)) - return error_box("File marker non presente sul dischetto %d: impossibile proseguire", _numdisk); - - FILE* i; - - const word size = 64; - TString buffer(size); - - if ( (i = fopen(_marker,"r+t")) != NULL) - { - const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i); - - if (letti == 0) - return error_box("Rilevati ERRORI nel file MARKER: impossibile proseguire"); - - _nomeid = buffer.sub(0,10); - _dittainv = atol(buffer.sub(10,15)); - _totrectras = atol(buffer.sub(24,30)); - _numinv = atoi(buffer.sub(15,18)); - tmp = buffer.sub(18,24); - _datatras = converti(tmp,TRUE); - - fclose(i); - - if (_numdisk == 1) // Va fatto solo per il primo disco - { - _dittaric = leggi_tabella_tras(); - - if (_dittaric != 0) - { - if (!prefix().exist(_dittaric)) - return error_box("Libreria archivi ditta non presente su disco"); - } - else - return error_box("Codici NON PRESENTI in tabella ricezione: caricarli e riprovare"); - } - - return TRUE; - } - - return FALSE; -} - -bool TRic_archivi::main_loop() -{ - if (_scelta == 'S') - { - TMask msk ("cg6400b"); - KEY tasto; - - tasto = msk.run(); - - if (tasto == K_ENTER) - { - componi_path(msk); - - do - { - if (_disketto) - { - char drive = msk.get(F_DRIVE)[0]; - if (yesno_box("Inserire il dischetto %d nell' unita' %c", _numdisk,drive)) - { - if (!leggi_marker()) - return FALSE; - - if (_sequenza) - { - if (video_ripartenza()) - ripristina_trasfer(); - else - return FALSE; - - _numdisk++; - } - } - else - return FALSE; - } - else - { - if (!leggi_marker()) - return FALSE; - - if (_sequenza) - { - if (video_ripartenza()) - ripristina_trasfer(); - else - return FALSE; - - _numdisk++; - } - else - return FALSE; - } - } - while (_numdisk <= _numtotdisk); - - trasfer2tempfile(); - set_flag(); - aggiorna_tabella(); - _tras_file->close(); // Chiude il trasfer letto dalla directory della ditta - fremove(_trasf); - TString80 tab = _tras_file->path(_dittaric); - TString tabcdx = tab; - TString tabdbf = tab; - tabcdx << "\\ttab.cdx"; - tabdbf << "\\ttab.dbf"; - fremove(tabcdx); - fremove(tabdbf); - } - } - else - if (_scelta == 'P') - { - TMask msk ("cg6400c"); - KEY tasto; - - tasto = msk.run(); - - if (tasto == K_ENTER) - { - componi_path(msk); - - if (!leggi_marker_rep()) - return FALSE; - - if (video_ripartenza()) - { - char floppy = msk.get(F_DRIVE)[0]; - bool temp = FALSE; - - TFilename firm; - firm.tempdir(); - firm << "\\ftemp"; - - set_firm(_dittaric); - TString dir = _tras_file->path(_dittaric); - - _arc.restore(firm, floppy, temp); - - TString head = firm; - head << "\\header"; - _tras_file->open(head); - _tras_file->read_control_rec(); - TString sigle = _tras_file->sigle_file(); - sigle.trim(); - _tras_file->close(); - - _tras_file->temp_dir(firm,dir,sigle); //Copio i file dalla directory temporanea ftemp alla directory della ditta - _tras_file->canc_file_dir_temp(firm); //Cancello i file nella directory temporanea ftemp - } - else - return FALSE; - } - - _trasfhard = _tras_file->path(_dittaric); - _trasfhard << HEADER; - - set_flag(); - aggiorna_tabella(); - } - - return FALSE; -} - -void TRic_archivi::leggi_trasfer(const char* nome) -{ - _nultras = 0; - - _trasf = _tras_file->path(_dittaric); - _trasf << nome; - - _tras_file->open(_trasf); - - if (_tras_file->exist()) - { - if (_tras_file->read_control_rec_t()) - { - _nultras = _tras_file->nultras(); - _dataultras = _tras_file->dataultras(); - } - } -} - -// Questa funzione ritorna: -// - 0 se non vengono rilevate condizioni di ripartenza o di trasferimento -// non completato. -// - 1 se viene rilevato uno stato di RIPARTENZA CON DATI CONTRADDITORI -// - 2 se viene rilevato un trasferimento precedente NON COMPLETATO - -int TRic_archivi::controllo_ripartenza() -{ - TString std; - bool flag = FALSE; - int var = 0; - - TString trasfer; - trasfer = _tras_file->path(_dittaric); - trasfer << HEADER; - - _tras_file->open(trasfer); - - TConfig conf(CONFIG_DITTA); - - std = conf.get("FlStTra"); - - if (_tras_file->read_control_rec()) - flag = TRUE; - - if (std == "" && flag) - var = 1; - - if (std == "*" && flag) - { - TString ult_file = _tras_file->ult_file(); - TString key = _tras_file->key(); - if (ult_file != "" || key != "") - var = 1; - } - - if (std != "" && std != "*") - var = 2; - - _tras_file->close(); - - return var; -} - -bool TRic_archivi::ripartenza() -{ - if (_stato_ripartenza == 1) - return error_box("Rilevato stato di RIPARTENZA CON DATI CONTRADDITORI: procedura interrotta"); - - if (_stato_ripartenza == 2) - return error_box("Trasferimento precedente NON COMPLETATO: completarlo prima di questo"); - - return TRUE; -} - -bool TRic_archivi::video_ripartenza() -{ - TDate dataultras; - - if (_prima_volta) - { - leggi_trasfer("\\trasfer"); - - _prima_volta = FALSE; - TMask msk ("cg6400a"); - KEY tasto; - - ditta_ricevente(); - _stato_ripartenza = controllo_ripartenza(); - - msk.set(F_NOMEID, _nomeid); - msk.set(F_CODDITTAINV, _dittainv); - msk.set(F_CODDITTARIC, _dittaric); - msk.set(F_RAGSOC, _ragsoc_dittar); - msk.set(F_NULTRASDSK, _numinv); - TString data1 = _datatras.string(); - msk.set(F_DATAULTRASDSK, data1); - - if (_nultras != 0) - { - msk.set(F_NULTRASTAB, _nultras); - TString data2 = _dataultras.string(); - msk.set(F_DATAULTRASTAB, data2); - } - else - { - msk.set(F_NULTRASTAB, _nultras_tab); - TString data2 = _dataultras_tab.string(); - msk.set(F_DATAULTRASTAB, data2); - } - - if (_stato_ripartenza == 1 || _stato_ripartenza == 2 ) - msk.set(F_STATO, "NON COMPLETO"); - else - if (_stato_ripartenza == 0) - msk.set(F_STATO, "COMPLETO"); - - if (_numdisk == 1) // Va fatto solo per il primo disco - { - do - { - msk.set_handler(baipassa); - - tasto = msk.run(); - - if (tasto != K_ENTER) - return FALSE; - - if (_baipassa) - return TRUE; - - if (!ripartenza()) - return FALSE; - - if (_numinv > (_nultras_tab + 1)) - warning_box("Trasferimento FUORI SEQUENZA: manca un trasferimento intermedio"); - else - if (_numinv < (_nultras_tab +1)) - warning_box("I dischetti risultano GIA' TRASFERITI"); - else - return TRUE; - } - while (tasto == K_ENTER); - } - } - - return TRUE; -} - -bool TRic_archivi::baipassa(TMask& m,KEY k) -{ - if ( (k == K_SHIFT+K_F7) && (app()._stato_ripartenza == 0) ) - app()._baipassa = TRUE; - else - app()._baipassa = FALSE; - - return FALSE; -} - -void TRic_archivi::ripristina_trasfer() -{ - TProgind prg (1,"Trasferimento archivi in corso\nPrego attendere",FALSE, FALSE); - - if (_numdisk == 1) - { - set_firm(_dittaric); - fcopy(_trasfer,_trasf,FALSE); - } - else - fcopy(_trasfer,_trasf,TRUE); -} - -void TRic_archivi::trasfer2tempfile() -{ - _trasfhard = _tras_file->path(_dittaric); - _trasfhard << HEADER; - - _tras_file->fcopytemp(_trasf,_trasfhard); -} - -void TRic_archivi::ditta_ricevente() -{ - TLocalisamfile nditte (LF_NDITTE); - - nditte.setkey(1); - nditte.zero(); - nditte.put(NDT_CODDITTA, _dittaric); - if (nditte.read() == NOERR) - _ragsoc_dittar = nditte.get(NDT_RAGSOC); -} - -long TRic_archivi::leggi_tabella_tras() -{ - TString dep; - long ditta = 0; - bool agg_fatatt,agg_fatpas; - - _tab_tra->zero(); - dep = format("%10s%05d", (const char*) _nomeid, _dittainv); - _tab_tra->put("CODTAB", (const char*) dep); - if (_tab_tra->read() == NOERR) - { - ditta = _tab_tra->get_long("I0"); - _nultras_tab = _tab_tra->get_int ("I1"); - _dataultras_tab = _tab_tra->get_date("D0"); - _agg_cau = _tab_tra->get_char("S0"); - _agg_clifo = _tab_tra->get_char("S1"); - _agg_pcon = _tab_tra->get_char("S2"); - _agg_cls = _tab_tra->get_char("S3"); - agg_fatatt = _tab_tra->get_bool("B0"); - if (agg_fatatt) - _agg_fatatt = 'X'; - else - _agg_fatatt = ' '; - - agg_fatpas = _tab_tra->get_bool("B1"); - if (agg_fatpas) - _agg_fatpas = 'X'; - else - _agg_fatpas = ' '; - } - - return ditta; -} - -bool TRic_archivi::set_flag() -{ - TString sigla; - long nrec; - int j; - int k = 0; - TString flag; - TString record; - TString ana_com,pcon_cau; - TString uselab; - bool fatto = TRUE; - - TConfig conf(CONFIG_DITTA); - - ana_com = conf.get("AnCfCm","cg"); - pcon_cau = conf.get("PcTcCm","cg"); - - _tras_file->open(_trasfhard); - - if (_tras_file->exist()) - { - if (_tras_file->read_control_rec()) - { - _nultras = _tras_file->nultras(); - _dataultras = _tras_file->dataultras(); - _sigle_file = _tras_file->sigle_file(); - _nrec_file = _tras_file->nrec_file(); - record = _tras_file->record(); - } - - for (j = 0; j < _sigle_file.len(); j++) - { - sigla = _sigle_file.mid(j,1); - nrec = atol(_nrec_file.mid(k,6)); - - if (fatto) - { - if (sigla == "W" || sigla == "P") - { - if (nrec > 0 && pcon_cau == "") - { - flag = "T"; - fatto = FALSE; - } - } - else - if (sigla == "A") - { - if (nrec > 0 && ana_com == "") - { - flag = "T"; - fatto = FALSE; - } - } - else - if (sigla == "Z" || sigla == "U" || sigla == "B") - { - if (nrec > 0) - { - flag = "C"; - fatto = FALSE; - } - } - else - { - flag = "*"; - fatto = FALSE; - } - - if (flag == "T") - uselab = sigla; - else - uselab = ""; - } - - if (sigla == "W" || sigla == "P") - { - if (pcon_cau == "X") - { - _sigle_file.overwrite(" ",j); - _nrec_file.overwrite("000000",k); - } - } - - if (sigla == "A") - { - if (ana_com == "X") - { - _sigle_file.overwrite(" ",j); - _nrec_file.overwrite("000000",k); - } - } - k += 6; - } - - record.overwrite(_sigle_file,41); - record.overwrite(_nrec_file,50); - - TString agg(7); - - agg[0] = _agg_cls; - agg[1] = _agg_cau; - agg[2] = _agg_clifo; - agg[3] = _agg_pcon; - agg[4] = _agg_fatatt; - agg[5] = _agg_fatpas; - agg[6] = '\0'; - - record.overwrite(agg,234); - record.overwrite(uselab,240); - record.overwrite(" ",241); - - const int size = 256; - - if (!_tras_file->write_control_rec(record, size)) - return FALSE; - } - - conf.set("FlStTra", flag); - - return TRUE; -} - -void TRic_archivi::aggiorna_tabella() -{ - TString dep; - - _tab_tra->zero(); - dep = format("%10s%05d", (const char*) _nomeid, _dittainv); - _tab_tra->put("CODTAB", (const char*) dep); - if (_tab_tra->read() == NOERR) - { - _tab_tra->put("I1", (long)_nultras); - _tab_tra->put("D0", _dataultras); - _tab_tra->rewrite(); - } -} - -bool TRic_archivi::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return main_loop(); - return FALSE; -} - -int cg6400 (int argc, char* argv[]) -{ - TRic_archivi main_app(*argv[2]); - main_app.run(argc, argv,main_app._titolo); - - return TRUE; -} +// Ricezione dati da sistema +#define STRICT +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "cglib04.h" + +#include "cg6400.h" + +class TRic_archivi : public TApplication +{ + TTable* _tab_tra; + TTransfer_file* _tras_file; + TLocalisamfile* _caus; + TLocalisamfile* _rcaus; + TLocalisamfile* _clifo; + TLocalisamfile* _pcon; + TLocalisamfile* _mov; + TLocalisamfile* _rmov; + TLocalisamfile* _rmoviva; + TLocalisamfile* _occas; + TLocalisamfile* _tab; + TArchive _arc; + + TString80 TEMP; + + char _scelta; + + int _numtotdisk,_progdisk,_numdisk,_numinv,_numinvp,_nultras; + int _stato_ripartenza,_nultras_tab; + bool _sequenza,_disketto; + bool _prima_volta,_baipassa; + TString _nomeid,_nomeidp,_marker,_trasf,_trasfer,_pathname,_ragsoc_dittar; + long _dittainv,_dittainvp,_dittaric,_totrectras,_totrectrasp; + TDate _datatras,_datatrasp,_dataultras_tab,_dataultras; + TString _sigle_file,_nrec_file,_trasfhard; + char _agg_cau,_agg_pcon,_agg_cls,_agg_clifo,_agg_fatatt,_agg_fatpas; + +public: + TString _titolo; + + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + bool main_loop(); + bool leggi_marker(); + bool leggi_marker_rep(); + void leggi_trasfer(const char* nome); + void ripristina_trasfer(); + void trasfer2tempfile(); + long leggi_tabella_tras(); + void componi_path(TMask&); + bool video_ripartenza(); + void ditta_ricevente(); + bool ripartenza(); + bool set_flag(); + void aggiorna_tabella(); + int controllo_ripartenza(); + + static bool baipassa(TMask& m,KEY k); + + TRic_archivi(char ric_trasfer); +}; + +HIDDEN TRic_archivi& app() { return (TRic_archivi &) main_app(); } + +TRic_archivi::TRic_archivi(char ric_trasfer) : _scelta(toupper(ric_trasfer)) +{ + if (_scelta == 'S') + _titolo = "Ricezione archivi da sistema"; + + if (_scelta == 'P') + _titolo = "Ricezione archivi da PC"; +} + +bool TRic_archivi::create() +{ + TApplication::create(); + + _tab_tra = new TTable ("%TRA"); + _tras_file = new TTransfer_file(); + + _caus = new TLocalisamfile (LF_CAUSALI); + _rcaus = new TLocalisamfile (LF_RCAUSALI); + _clifo = new TLocalisamfile (LF_CLIFO); + _pcon = new TLocalisamfile (LF_PCON); + _mov = new TLocalisamfile (LF_MOV); + _rmov = new TLocalisamfile (LF_RMOV); + _rmoviva = new TLocalisamfile (LF_RMOVIVA); + _occas = new TLocalisamfile (LF_OCCAS); + _tab = new TLocalisamfile (LF_TAB); + + _numdisk = 1; + _prima_volta = TRUE; + _nultras = 0; + _nultras_tab = 0; + _baipassa = FALSE; + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool TRic_archivi::destroy() +{ + delete _tab_tra; + delete _tras_file; + + delete _caus; + delete _rcaus; + delete _clifo; + delete _pcon; + delete _mov; + delete _rmov; + delete _rmoviva; + delete _occas; + delete _tab; + + return TApplication::destroy(); +} + +void TRic_archivi::componi_path(TMask& msk) +{ + if (_scelta == 'S') + { + TString path,drive; + int pos; + + path = msk.get(F_PATHNAME); + drive = msk.get(F_DRIVE); + pos = path.find(':'); + + if (drive == "A:" || drive == "B:" || drive == "D:" || drive == "E:") + _disketto = TRUE; + else + _disketto = FALSE; + + if (pos) + path = path.mid(pos+1); + + if (path != "") + { + _marker << drive << "\\" << path << "\\marker"; + _trasfer << drive << "\\" << path << "\\trasfer"; + if (!_disketto) + _pathname << drive << "\\" << path; + } + else + { + _marker << drive << "\\marker"; + _trasfer << drive << "\\trasfer"; + if (!_disketto) + _pathname << drive << "\\"; + } + } + else + if (_scelta == 'P') + { + char drive; + + drive = msk.get(F_DRIVE)[0]; + + _marker << drive << ":\\marker"; + } +} + +bool TRic_archivi::leggi_marker() +{ + TString16 tmp; + + if (!fexist(_marker)) + { + if (_disketto) + return error_box("File marker non presente sul dischetto %d: impossibile proseguire", _numdisk); + else + return error_box("File marker non presente in %s: impossibile proseguire", (const char*)_pathname); + } + + FILE* i; + + const word size = 64; + TString buffer(size); + + if ( (i = fopen(_marker,"r+t")) != NULL) + { + const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i); + + _progdisk = atoi(buffer.sub(31,33)); + _numtotdisk = atoi(buffer.sub(29,31)); + + if (_progdisk != _numdisk) + { + message_box("Il dischetto inserito non rispecchia la giusta sequenza"); + _sequenza = FALSE; + fclose(i); + return TRUE; + } + else + _sequenza = TRUE; + + if (letti == 0) + return error_box("Rilevati ERRORI nel file MARKER: impossibile proseguire"); + + _nomeid = buffer.sub(0,10); + _dittainv = atol(buffer.sub(10,14)); + _totrectras = atol(buffer.sub(23,29)); + _numinv = atoi(buffer.sub(14,17)); + tmp = buffer.sub(17,23); + _datatras = converti(tmp,FALSE); + + if (_numdisk > 1) //Va fatto solo dal disco 2 in poi + if (_nomeid != _nomeidp || _dittainv != _dittainvp || _totrectras != _totrectrasp + || _numinv != _numinvp || _datatras != _datatrasp) + return error_box("I dati del marker del disco %d, non corrispondono ai dati del marker del disco 1", _numdisk); + + _nomeidp = _nomeid; + _dittainvp = _dittainv; + _totrectrasp = _totrectras; + _numinvp = _numinv; + _datatrasp = _datatras; + + fclose(i); + + if (_numdisk == 1) // Va fatto solo per il primo disco + { + _dittaric = leggi_tabella_tras(); + + if (_dittaric != 0) + { + if (!prefix().exist(_dittaric)) + return error_box("Libreria archivi ditta non presente su disco"); + } + else + return error_box("Codici NON PRESENTI in tabella ricezione: caricarli e riprovare"); + } + + return TRUE; + } + + return FALSE; +} + +bool TRic_archivi::leggi_marker_rep() +{ + TString16 tmp; + + if (!fexist(_marker)) + return error_box("File marker non presente sul dischetto %d: impossibile proseguire", _numdisk); + + FILE* i; + + const word size = 64; + TString buffer(size); + + if ( (i = fopen(_marker,"r+t")) != NULL) + { + const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i); + + if (letti == 0) + return error_box("Rilevati ERRORI nel file MARKER: impossibile proseguire"); + + _nomeid = buffer.sub(0,10); + _dittainv = atol(buffer.sub(10,15)); + _totrectras = atol(buffer.sub(24,30)); + _numinv = atoi(buffer.sub(15,18)); + tmp = buffer.sub(18,24); + _datatras = converti(tmp,TRUE); + + fclose(i); + + if (_numdisk == 1) // Va fatto solo per il primo disco + { + _dittaric = leggi_tabella_tras(); + + if (_dittaric != 0) + { + if (!prefix().exist(_dittaric)) + return error_box("Libreria archivi ditta non presente su disco"); + } + else + return error_box("Codici NON PRESENTI in tabella ricezione: caricarli e riprovare"); + } + + return TRUE; + } + + return FALSE; +} + +bool TRic_archivi::main_loop() +{ + if (_scelta == 'S') + { + TMask msk ("cg6400b"); + KEY tasto; + + tasto = msk.run(); + + if (tasto == K_ENTER) + { + componi_path(msk); + + do + { + if (_disketto) + { + char drive = msk.get(F_DRIVE)[0]; + if (yesno_box("Inserire il dischetto %d nell' unita' %c", _numdisk,drive)) + { + if (!leggi_marker()) + return FALSE; + + if (_sequenza) + { + if (video_ripartenza()) + ripristina_trasfer(); + else + return FALSE; + + _numdisk++; + } + } + else + return FALSE; + } + else + { + if (!leggi_marker()) + return FALSE; + + if (_sequenza) + { + if (video_ripartenza()) + ripristina_trasfer(); + else + return FALSE; + + _numdisk++; + } + else + return FALSE; + } + } + while (_numdisk <= _numtotdisk); + + trasfer2tempfile(); + set_flag(); + aggiorna_tabella(); + _tras_file->close(); // Chiude il trasfer letto dalla directory della ditta + fremove(_trasf); + TString80 tab = _tras_file->path(_dittaric); + TString tabcdx = tab; + TString tabdbf = tab; + tabcdx << "\\ttab.cdx"; + tabdbf << "\\ttab.dbf"; + fremove(tabcdx); + fremove(tabdbf); + } + } + else + if (_scelta == 'P') + { + TMask msk ("cg6400c"); + KEY tasto; + + tasto = msk.run(); + + if (tasto == K_ENTER) + { + componi_path(msk); + + if (!leggi_marker_rep()) + return FALSE; + + if (video_ripartenza()) + { + char floppy = msk.get(F_DRIVE)[0]; + bool temp = FALSE; + + TFilename firm; + firm.tempdir(); + firm << "\\ftemp"; + + set_firm(_dittaric); + TString dir = _tras_file->path(_dittaric); + + _arc.restore(firm, floppy, temp); + + TString head = firm; + head << "\\header"; + _tras_file->open(head); + _tras_file->read_control_rec(); + TString sigle = _tras_file->sigle_file(); + sigle.trim(); + _tras_file->close(); + + _tras_file->temp_dir(firm,dir,sigle); //Copio i file dalla directory temporanea ftemp alla directory della ditta + _tras_file->canc_file_dir_temp(firm); //Cancello i file nella directory temporanea ftemp + } + else + return FALSE; + } + + _trasfhard = _tras_file->path(_dittaric); + _trasfhard << HEADER; + + set_flag(); + aggiorna_tabella(); + } + + return FALSE; +} + +void TRic_archivi::leggi_trasfer(const char* nome) +{ + _nultras = 0; + + _trasf = _tras_file->path(_dittaric); + _trasf << nome; + + _tras_file->open(_trasf); + + if (_tras_file->exist()) + { + if (_tras_file->read_control_rec_t()) + { + _nultras = _tras_file->nultras(); + _dataultras = _tras_file->dataultras(); + } + } +} + +// Questa funzione ritorna: +// - 0 se non vengono rilevate condizioni di ripartenza o di trasferimento +// non completato. +// - 1 se viene rilevato uno stato di RIPARTENZA CON DATI CONTRADDITORI +// - 2 se viene rilevato un trasferimento precedente NON COMPLETATO + +int TRic_archivi::controllo_ripartenza() +{ + TString std; + bool flag = FALSE; + int var = 0; + + TString trasfer; + trasfer = _tras_file->path(_dittaric); + trasfer << HEADER; + + _tras_file->open(trasfer); + + TConfig conf(CONFIG_DITTA); + + std = conf.get("FlStTra"); + + if (_tras_file->read_control_rec()) + flag = TRUE; + + if (std == "" && flag) + var = 1; + + if (std == "*" && flag) + { + TString ult_file = _tras_file->ult_file(); + TString key = _tras_file->key(); + if (ult_file != "" || key != "") + var = 1; + } + + if (std != "" && std != "*") + var = 2; + + _tras_file->close(); + + return var; +} + +bool TRic_archivi::ripartenza() +{ + if (_stato_ripartenza == 1) + return error_box("Rilevato stato di RIPARTENZA CON DATI CONTRADDITORI: procedura interrotta"); + + if (_stato_ripartenza == 2) + return error_box("Trasferimento precedente NON COMPLETATO: completarlo prima di questo"); + + return TRUE; +} + +bool TRic_archivi::video_ripartenza() +{ + TDate dataultras; + + if (_prima_volta) + { + leggi_trasfer("\\trasfer"); + + _prima_volta = FALSE; + TMask msk ("cg6400a"); + KEY tasto; + + ditta_ricevente(); + _stato_ripartenza = controllo_ripartenza(); + + msk.set(F_NOMEID, _nomeid); + msk.set(F_CODDITTAINV, _dittainv); + msk.set(F_CODDITTARIC, _dittaric); + msk.set(F_RAGSOC, _ragsoc_dittar); + msk.set(F_NULTRASDSK, _numinv); + TString data1 = _datatras.string(); + msk.set(F_DATAULTRASDSK, data1); + + if (_nultras != 0) + { + msk.set(F_NULTRASTAB, _nultras); + TString data2 = _dataultras.string(); + msk.set(F_DATAULTRASTAB, data2); + } + else + { + msk.set(F_NULTRASTAB, _nultras_tab); + TString data2 = _dataultras_tab.string(); + msk.set(F_DATAULTRASTAB, data2); + } + + if (_stato_ripartenza == 1 || _stato_ripartenza == 2 ) + msk.set(F_STATO, "NON COMPLETO"); + else + if (_stato_ripartenza == 0) + msk.set(F_STATO, "COMPLETO"); + + if (_numdisk == 1) // Va fatto solo per il primo disco + { + do + { + msk.set_handler(baipassa); + + tasto = msk.run(); + + if (tasto != K_ENTER) + return FALSE; + + if (_baipassa) + return TRUE; + + if (!ripartenza()) + return FALSE; + + if (_numinv > (_nultras_tab + 1)) + warning_box("Trasferimento FUORI SEQUENZA: manca un trasferimento intermedio"); + else + if (_numinv < (_nultras_tab +1)) + warning_box("I dischetti risultano GIA' TRASFERITI"); + else + return TRUE; + } + while (tasto == K_ENTER); + } + } + + return TRUE; +} + +bool TRic_archivi::baipassa(TMask& m,KEY k) +{ + if ( (k == K_SHIFT+K_F7) && (app()._stato_ripartenza == 0) ) + app()._baipassa = TRUE; + else + app()._baipassa = FALSE; + + return FALSE; +} + +void TRic_archivi::ripristina_trasfer() +{ + TProgind prg (1,"Trasferimento archivi in corso\nPrego attendere",FALSE, FALSE); + + if (_numdisk == 1) + { + set_firm(_dittaric); + fcopy(_trasfer,_trasf,FALSE); + } + else + fcopy(_trasfer,_trasf,TRUE); +} + +void TRic_archivi::trasfer2tempfile() +{ + _trasfhard = _tras_file->path(_dittaric); + _trasfhard << HEADER; + + _tras_file->fcopytemp(_trasf,_trasfhard); +} + +void TRic_archivi::ditta_ricevente() +{ + TLocalisamfile nditte (LF_NDITTE); + + nditte.setkey(1); + nditte.zero(); + nditte.put(NDT_CODDITTA, _dittaric); + if (nditte.read() == NOERR) + _ragsoc_dittar = nditte.get(NDT_RAGSOC); +} + +long TRic_archivi::leggi_tabella_tras() +{ + TString dep; + long ditta = 0; + bool agg_fatatt,agg_fatpas; + + _tab_tra->zero(); + dep = format("%10s%05d", (const char*) _nomeid, _dittainv); + _tab_tra->put("CODTAB", (const char*) dep); + if (_tab_tra->read() == NOERR) + { + ditta = _tab_tra->get_long("I0"); + _nultras_tab = _tab_tra->get_int ("I1"); + _dataultras_tab = _tab_tra->get_date("D0"); + _agg_cau = _tab_tra->get_char("S0"); + _agg_clifo = _tab_tra->get_char("S1"); + _agg_pcon = _tab_tra->get_char("S2"); + _agg_cls = _tab_tra->get_char("S3"); + agg_fatatt = _tab_tra->get_bool("B0"); + if (agg_fatatt) + _agg_fatatt = 'X'; + else + _agg_fatatt = ' '; + + agg_fatpas = _tab_tra->get_bool("B1"); + if (agg_fatpas) + _agg_fatpas = 'X'; + else + _agg_fatpas = ' '; + } + + return ditta; +} + +bool TRic_archivi::set_flag() +{ + TString sigla; + long nrec; + int j; + int k = 0; + TString flag; + TString record; + TString ana_com,pcon_cau; + TString uselab; + bool fatto = TRUE; + + TConfig conf(CONFIG_DITTA); + + ana_com = conf.get("AnCfCm","cg"); + pcon_cau = conf.get("PcTcCm","cg"); + + _tras_file->open(_trasfhard); + + if (_tras_file->exist()) + { + if (_tras_file->read_control_rec()) + { + _nultras = _tras_file->nultras(); + _dataultras = _tras_file->dataultras(); + _sigle_file = _tras_file->sigle_file(); + _nrec_file = _tras_file->nrec_file(); + record = _tras_file->record(); + } + + for (j = 0; j < _sigle_file.len(); j++) + { + sigla = _sigle_file.mid(j,1); + nrec = atol(_nrec_file.mid(k,6)); + + if (fatto) + { + if (sigla == "W" || sigla == "P") + { + if (nrec > 0 && pcon_cau == "") + { + flag = "T"; + fatto = FALSE; + } + } + else + if (sigla == "A") + { + if (nrec > 0 && ana_com == "") + { + flag = "T"; + fatto = FALSE; + } + } + else + if (sigla == "Z" || sigla == "U" || sigla == "B") + { + if (nrec > 0) + { + flag = "C"; + fatto = FALSE; + } + } + else + { + flag = "*"; + fatto = FALSE; + } + + if (flag == "T") + uselab = sigla; + else + uselab = ""; + } + + if (sigla == "W" || sigla == "P") + { + if (pcon_cau == "X") + { + _sigle_file.overwrite(" ",j); + _nrec_file.overwrite("000000",k); + } + } + + if (sigla == "A") + { + if (ana_com == "X") + { + _sigle_file.overwrite(" ",j); + _nrec_file.overwrite("000000",k); + } + } + k += 6; + } + + record.overwrite(_sigle_file,41); + record.overwrite(_nrec_file,50); + + TString agg(7); + + agg[0] = _agg_cls; + agg[1] = _agg_cau; + agg[2] = _agg_clifo; + agg[3] = _agg_pcon; + agg[4] = _agg_fatatt; + agg[5] = _agg_fatpas; + agg[6] = '\0'; + + record.overwrite(agg,234); + record.overwrite(uselab,240); + record.overwrite(" ",241); + + const int size = 256; + + if (!_tras_file->write_control_rec(record, size)) + return FALSE; + } + + conf.set("FlStTra", flag); + + return TRUE; +} + +void TRic_archivi::aggiorna_tabella() +{ + TString dep; + + _tab_tra->zero(); + dep = format("%10s%05d", (const char*) _nomeid, _dittainv); + _tab_tra->put("CODTAB", (const char*) dep); + if (_tab_tra->read() == NOERR) + { + _tab_tra->put("I1", (long)_nultras); + _tab_tra->put("D0", _dataultras); + _tab_tra->rewrite(); + } +} + +bool TRic_archivi::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return main_loop(); + return FALSE; +} + +int cg6400 (int argc, char* argv[]) +{ + TRic_archivi main_app(*argv[2]); + main_app.run(argc, argv,main_app._titolo); + + return TRUE; +} diff --git a/cg/cg6500.cpp b/cg/cg6500.cpp index 3d130ade8..a3f9c0189 100755 --- a/cg/cg6500.cpp +++ b/cg/cg6500.cpp @@ -1,770 +1,770 @@ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "..\ba\batbind.h" -#include "cglib04.h" - -class Tabinv_application : public Tab_application -{ -private: - TMask* _msk; - TString _tabname; - TTransfer_file _tras_file; - - TString _trasf,_control_rec; - long _ditta_tab, _ditta_tras; - bool _disable,_ditte_uguali,_salta_hnd,_messaggio; - -public: - bool user_create(); - virtual void init_query_mode(TMask&); - virtual void init_modify_mode(TMask&); - virtual void init_insert_mode(TMask&); - virtual int write(const TMask& m); - virtual int rewrite(const TMask& m); - - void leggi_trasfer(); - char cerca_stato(long codditta); - - static bool controlli_hnd (TMask_field& f, KEY k); - - static bool nascosto_handler(TMask& m, KEY k); - static bool stato_invio (TMask_field& f, KEY k); - - static bool ditta_handler (TMask_field& f, KEY k); - static bool almeno_un_flag(TMask_field& f, KEY k); - static bool clifo_comune (TMask_field& f, KEY k); - static bool pcon_comune (TMask_field& f, KEY k); - static bool prima_nota (TMask_field& f, KEY k); - static bool iva (TMask_field& f, KEY k); - static bool saldaconto (TMask_field& f, KEY k); - static bool data_invio (TMask_field& f, KEY k); - static bool sigla_file (TMask_field& f, KEY k); - static bool chiave_file (TMask_field& f, KEY k); - - static bool nome_id (TMask_field& f, KEY k); - - void setta_chiave (TMask& m); - - Tabinv_application() {} - virtual ~Tabinv_application() {} -}; - -HIDDEN inline Tabinv_application& app() {return (Tabinv_application&) main_app();} - -char Tabinv_application::cerca_stato(long ditta) -{ - TTable ind ("%IND"); - TString dep; - char stato = '\0'; - - dep = format("%05d", ditta); - - ind.zero(); - ind.put("CODTAB", dep); - if (ind.read() == NOERR) - stato = ind.get_char("S6"); - - return stato; -} - -bool Tabinv_application::nascosto_handler(TMask& m, KEY k) -{ - if (k == K_SHIFT+K_F12) - { - if (app()._tabname == "%IND") - { - app()._disable = FALSE; - - m.enable(F_NUMULINV); - m.enable(F_DATAULIN); - m.enable(F_STATO); - - if ( (app()._ditta_tab == app()._ditta_tras) && m.mode() != MODE_INS) - { - m.enable(F_USELAB); - m.enable(F_CHIAVE); - } - } - else - if (app()._tabname == "%INS") - { - m.enable(F_DITTAINV); - app()._salta_hnd = TRUE; - } - } - - return TRUE; -} - -bool Tabinv_application::stato_invio(TMask_field& f, KEY k) -{ - if ( (k == K_ENTER || k == K_TAB) && f.mask().mode() != MODE_QUERY ) - { - if ( k == K_ENTER) - { - TString stato = f.get(); - int num = f.mask().get_int(F_NUMULINV); - TString sigla = f.mask().get(F_USELAB); - - if (num == 0 && stato != "") - return error_box("Numero ultimo invio NON INDICATO: impossibile indicare lo stato ultimo invio"); - - if ( (stato == "F" && sigla == "") || (stato == "D" && sigla != "") ) - return error_box("La sigla ultimo file elaborato deve essere indicata se lo stato ultimo invio e' uguale a F"); - } - - if (k == K_TAB && app()._messaggio) - { - long codditta = f.mask().get_long(F_DITTAINV); - - char stato = app().cerca_stato(codditta); - - if (stato != '\0' && app()._disable) - { - app()._messaggio = FALSE; - return message_box("Rilevato STATO DI RIPARTENZA: prima concludere il trasferimento"); - } - } - } - - return TRUE; -} - -bool Tabinv_application::ditta_handler(TMask_field& f, KEY k) -{ - if (k == K_TAB && f.mask().mode() == MODE_QUERY) - { - long codditta = f.mask().get_long(F_DITTAINV); - - if (codditta != 0) - { - if (!prefix().exist(codditta)) - { - f.error_box("La ditta selezionata non e' abilitata per la contabilita' "); - return FALSE; - } - } - } - if (k == K_TAB) - { - TLocalisamfile ditte (LF_NDITTE); - - long ditta = f.mask().get_long(F_DITTAINV); - - ditte.setkey(1); - ditte.zero(); - ditte.put(NDT_CODDITTA, ditta); - if (ditte.read() == NOERR) - { - TString ragsoc = ditte.get(NDT_RAGSOC); - f.mask().set(F_RAGSOC, ragsoc); - } - else - f.mask().set(F_RAGSOC, ""); - - app()._ditta_tab = f.mask().get_long(F_DITTAINV); - - if (app()._ditta_tab == app()._ditta_tras) - { - TTable ind ("%IND"); - TString dep; - - dep = format("%05d", app()._ditta_tab); - - ind.zero(); - ind.put("CODTAB", dep); - if (ind.read() == NOERR) - { - TString uselab = app()._tras_file.ult_file(); - TString chiave = app()._tras_file.key(); - - f.mask().set(F_USELAB, uselab); - f.mask().set(F_CHIAVE, chiave); - } - else - { - f.mask().set(F_USELAB, ""); - f.mask().set(F_CHIAVE, ""); - } - app()._ditte_uguali = TRUE; - } - else - { - app()._ditte_uguali = FALSE; - f.mask().set(F_USELAB, ""); - f.mask().set(F_CHIAVE, ""); - } - } - return TRUE; -} - -bool Tabinv_application::almeno_un_flag(TMask_field& f, KEY k) -{ - if (k == K_ENTER && f.mask().mode() != MODE_QUERY) - { - bool cau = f.mask().get_bool(F_CAUSALI); - bool clifo = f.mask().get_bool(F_CLIFO); - bool pcon = f.mask().get_bool(F_PCON); - bool pn = f.mask().get_bool(F_MOV); - bool iva = f.mask().get_bool(F_IVA); - bool fat = f.mask().get_bool(F_FATT); - - if (!cau && !clifo && !pcon && !pn && !iva && !fat) - return error_box("E' necessario indicare almeno una sigla file da trasferire"); - - long ditta = f.mask().get_long(F_DITTAINV); - - app().set_firm(ditta); - - TConfig conf (CONFIG_DITTA); - - TString pcon_cau = conf.get("PcTcCm","cg"); - - bool causali = f.mask().get_bool(F_CAUSALI); - - if (causali && pcon_cau != "") - return error_box("Tabella causali in comune: impossibile trasferirla"); - } - - return TRUE; -} - -bool Tabinv_application::clifo_comune(TMask_field& f, KEY k) -{ - if (k == K_ENTER && f.mask().mode() != MODE_QUERY) - { - long ditta = f.mask().get_long(F_DITTAINV); - - app().set_firm(ditta); - - TConfig conf (CONFIG_DITTA); - - TString ana_com = conf.get("AnCfCm","cg"); - - bool clifo = f.mask().get_bool(F_CLIFO); - - if (clifo && ana_com != "") - return error_box("Anagrafica clienti / fornitori in comune: impossibile trasferirla"); - } - - return TRUE; -} - -bool Tabinv_application::pcon_comune(TMask_field& f, KEY k) -{ - if (k == K_ENTER && f.mask().mode() != MODE_QUERY) - { - long ditta = f.mask().get_long(F_DITTAINV); - - app().set_firm(ditta); - - TConfig conf (CONFIG_DITTA); - - TString pcon_cau = conf.get("PcTcCm","cg"); - - bool pcon = f.mask().get_bool(F_PCON); - - if (pcon && pcon_cau != "") - return error_box("Anagrafica Piano dei conti in comune: impossibile trasferirla"); - } - - return TRUE; -} - -bool Tabinv_application::prima_nota(TMask_field& f, KEY k) -{ - if (k == K_SPACE && f.mask().mode() != MODE_QUERY) - { - bool pn = f.mask().get_bool(F_MOV); - - if (!pn && f.mask().get_bool(F_IVA) ) - { - f.mask().set(F_MOV, "X"); - return f.error_box("Se si vuole inviare l' iva e' obbligatorio inviare anche la primanota"); - } - if (!pn && f.mask().get_bool(F_FATT) ) - { - f.mask().set(F_MOV, "X"); - return f.error_box("Se si vuole inviare il saldaconto e' obbligatorio inviare anche la primanota"); - } - } - - return TRUE; -} - -bool Tabinv_application::iva(TMask_field& f, KEY k) -{ - if (k == K_SPACE && f.mask().mode() != MODE_QUERY) - { - bool iva = f.mask().get_bool(F_IVA); - bool sc = f.mask().get_bool(F_FATT); - - if (iva) - f.mask().set(F_MOV, "X"); - } - - return TRUE; -} - -bool Tabinv_application::saldaconto(TMask_field& f, KEY k) -{ - if (k == K_SPACE && f.mask().mode() != MODE_QUERY) - { - bool iva = f.mask().get_bool(F_IVA); - bool sc = f.mask().get_bool(F_FATT); - - if (sc) - f.mask().set(F_MOV, "X"); - } - - return TRUE; -} - -bool Tabinv_application::data_invio (TMask_field& f, KEY k) -{ - if (k == K_ENTER && f.mask().mode() != MODE_QUERY) - { - int num = f.mask().get_int(F_NUMULINV); - TDate data (f.get()); - - if (num != 0 && !data.ok()) - return error_box("Se indicato il numero deve essere indicata anche la data di invio"); - - if (num == 0 && data.ok()) - return error_box("Se non indicato il numero non puo' essere indicata la data di invio"); - } - - return TRUE; -} - -bool Tabinv_application::sigla_file(TMask_field& f, KEY k) -{ - if (k == K_ENTER && f.mask().mode() != MODE_QUERY) - { - int num = f.mask().get_int(F_NUMULINV); - TString sigla = f.get(); - - if (num == 0 && sigla != "") - return error_box("Numero ultimo invio NON INDICATO: impossibile indicare la sigla ultimo file elaborato"); - -// TString stato = f.mask().get(F_STATO); - -// if ( (stato == "F" && sigla == "") || (stato == "D" && sigla != "") ) -// return error_box("La sigla ultimo file elaborato deve essere indicata se lo stato ultimo invio e' uguale a F"); - - } - - return TRUE; -} - -bool Tabinv_application::chiave_file(TMask_field& f, KEY k) -{ - if (k == K_ENTER && f.mask().mode() != MODE_QUERY) - { - TString sigla = f.mask().get(F_USELAB); - TString chiave = f.get(); - - if (sigla == "" && chiave != "") - return error_box("Sigla ultimo file elaborato NON INDICATA: impossibile indicare la chiave ultimo record elaborato"); - - TString stato = f.mask().get(F_STATO); - - if (stato != "F" && chiave == "" && sigla != "") - return error_box("La chiave ultimo record elaborato deve essere indicata obbligatoriamente"); - } - - return TRUE; -} - -void Tabinv_application::setta_chiave(TMask& m) -{ - m.set(F_CODICE, "INS"); - m.field(F_CODICE).check(); -} - -bool Tabinv_application::nome_id(TMask_field& f, KEY k) -{ - if (k == K_TAB) - { - TLocalisamfile ditte (LF_NDITTE); - - long ditta = f.mask().get_long(F_DITTAINV); - if (ditta != 0) - { - if (!prefix().exist(ditta)) - { - f.error_box("La ditta selezionata non e' abilitata per la contabilita' "); - return FALSE; - } - } - - ditte.setkey(1); - ditte.zero(); - ditte.put(NDT_CODDITTA, ditta); - if (ditte.read() == NOERR) - { - TString ragsoc = ditte.get(NDT_RAGSOC); - f.mask().set(F_RAGSOC, ragsoc); - } - else - f.mask().set(F_RAGSOC, ""); - - TTable ind ("%IND"); - TString dep; - - if (ditta != 0) - { - dep = format("%05d", ditta); - - ind.zero(); - ind.put("CODTAB", dep); - if (ind.read() == NOERR) - { - TString stato = ind.get ("S6"); - int num = ind.get_int ("I0"); - TDate data = ind.get_date("D0"); - - f.mask().set(F_STATO, stato); - f.mask().set(F_NUMULINV, num); - f.mask().set(F_DATAULIN, data.string()); - } - else - { - f.mask().set(F_STATO, ""); - f.mask().set(F_NUMULINV, ""); - f.mask().set(F_DATAULIN, ""); - f.error_box("Codice ditta NON PRESENTE in tabella trasferimenti"); - } - } - else - { - f.mask().set(F_STATO, ""); - f.mask().set(F_NUMULINV, ""); - f.mask().set(F_DATAULIN, ""); - } - - app()._ditta_tab = f.mask().get_long(F_DITTAINV); - - if (app()._ditta_tab == app()._ditta_tras) - { - TString uselab = app()._tras_file.ult_file(); - TString chiave = app()._tras_file.key(); - - f.mask().set(F_USELAB, uselab); - f.mask().set(F_CHIAVE, chiave); - app()._ditte_uguali = TRUE; - } - else - { - app()._ditte_uguali = FALSE; - f.mask().set(F_USELAB, ""); - f.mask().set(F_CHIAVE, ""); - } - } - if (k == K_TAB && !app()._salta_hnd && f.mask().mode() != MODE_QUERY) - { - long codditta = f.mask().get_long(F_DITTAINV); - - if (codditta != 0) - return message_box("Rilevato STATO DI RIPARTENZA: prima concludere il trasferimento"); - } - - return TRUE; -} - -//void Tabinv_application::esegui_controlli(TMask& m) -bool Tabinv_application::controlli_hnd(TMask_field& f, KEY k) -{ - if (k == K_TAB && !f.mask().field(F_NUMULINV).enabled()) - { - int num = f.mask().get_int(F_NUMULINV); - TDate data (f.mask().get(F_DATAULIN)); - - if (num != 0 && !data.ok()) - return error_box("Se indicato il numero deve essere indicata anche la data di invio"); - - if (num == 0 && data.ok()) - return error_box("Se non indicato il numero non puo' essere indicata la data di invio"); - - TString sigla = f.mask().get(F_USELAB); - - if (num == 0 && sigla != "") - return error_box("Numero ultimo invio NON INDICATO: impossibile indicare la sigla ultimo file elaborato"); - - TString stato = f.mask().get(F_STATO); - - if (stato != "F" && sigla != "") - return error_box("La sigla ultimo file elaborato puo' essere indicata solo se lo stato ultimo invio e' F"); - - TString chiave = f.mask().get(F_CHIAVE); - - if (sigla == "" && chiave != "") - return error_box("Sigla ultimo file elaborato NON INDICATA: impossibile indicare la chiave ultimo record elaborato"); - - if (stato != "F" && chiave == "" && sigla != "") - return error_box("La chiave ultimo record elaborato deve essere indicata obbligatoriamente"); - } - return TRUE; -} - -void Tabinv_application::leggi_trasfer() -{ - _trasf = ""; - _trasf = firm2dir(0); - _trasf << HEADER; - - _tras_file.open(_trasf); - - if (_tras_file.exist()) - { - if (_tras_file.read_control_rec()) - { - _control_rec = _tras_file.record(); - _ditta_tras = _tras_file.ditta(); - } - else - _ditta_tras = 0; - } - else - _ditta_tras = 0; -} - -void Tabinv_application::init_query_mode(TMask& m) -{ - leggi_trasfer(); - _disable = TRUE; - _messaggio = TRUE; - - if (_tabname == "%INS") - { - setta_chiave(m); - m.send_key(K_AUTO_ENTER,0); - - m.disable(F_DITTAINV); - } - - m.disable(F_NUMULINV); - m.disable(F_DATAULIN); - m.disable(F_STATO); - m.disable(F_USELAB); - m.disable(F_CHIAVE); -} - -void Tabinv_application::init_modify_mode(TMask& m) -{ - if (_tabname == "%IND") - { - leggi_trasfer(); - - long ditta = m.get_long(F_DITTAINV); - - if (ditta == _ditta_tras) - { - TString uselab = _tras_file.ult_file(); - TString chiave = _tras_file.key(); - - m.set(F_USELAB, uselab); - m.set(F_CHIAVE, chiave); - } - else - { - m.set(F_USELAB, ""); - m.set(F_CHIAVE, ""); - } - - char stato = app().cerca_stato(ditta); - - if (stato == '\0') - { - m.enable(F_CAUSALI); - m.enable(F_CLIFO); - m.enable(F_PCON); - m.enable(F_MOV); - m.enable(F_IVA); - //m.enable(F_FATT); - m.enable(F_BOLLATO); - } - else - { - m.disable(F_CAUSALI); - m.disable(F_CLIFO); - m.disable(F_PCON); - m.disable(F_MOV); - m.disable(F_IVA); - //m.disable(F_FATT); - m.disable(F_BOLLATO); - } - } - if (_tabname == "%INS") - { - setta_chiave(m); - - m.disable(F_DITTAINV); - - long ditta = m.get_long(F_DITTAINV); - if (ditta == 0) - m.enable(F_NOMEID); - else - m.disable(F_NOMEID); - } - - m.disable(F_NUMULINV); - m.disable(F_DATAULIN); - m.disable(F_STATO); - m.disable(F_USELAB); - m.disable(F_CHIAVE); -} - -void Tabinv_application::init_insert_mode(TMask& m) -{ - if (_tabname == "%IND") - leggi_trasfer(); - - if (_tabname == "%INS") - m.disable(F_DITTAINV); - - m.disable(F_NUMULINV); - m.disable(F_DATAULIN); - m.disable(F_STATO); - m.disable(F_USELAB); - m.disable(F_CHIAVE); -} - -int Tabinv_application::write(const TMask& m) -{ - if (_tabname == "%IND") - { - if (m.mode() != MODE_INS) - { - TString str; - - TString std = m.get(F_STATO); - - TConfig conf (CONFIG_DITTA); - conf.set("FlStInv", std); - - int num = m.get_int(F_NUMULINV); - TString data = m.get (F_DATAULIN); - TString sigla = m.get (F_USELAB); - TString chiave = m.get (F_CHIAVE); - - if (sigla == "") - sigla = " "; - - if (_tras_file.read_control_rec()) - { - if (_ditte_uguali) - { - _control_rec = _tras_file.record(); - str = format("%03d", num); - _control_rec.overwrite(str,30); - str = riconverti(data,TRUE); - _control_rec.overwrite(str,33); - _control_rec.overwrite(sigla,240); - str = format("%-15s", (const char*) chiave); - _control_rec.overwrite(str,241); - - _tras_file.write_control_rec(_control_rec,256); - } - } - } - } - - return Tab_application::write(m); -} - -int Tabinv_application::rewrite(const TMask& m) -{ - if (_tabname == "%IND") - { - if (m.mode() != MODE_INS) - { - TString str; - - TString std = m.get(F_STATO); - - TConfig conf (CONFIG_DITTA); - conf.set("FlStInv", std); - - int num = m.get_int(F_NUMULINV); - TString data = m.get (F_DATAULIN); - TString sigla = m.get (F_USELAB); - TString chiave = m.get (F_CHIAVE); - - if (sigla == "") - sigla = " "; - - if (_tras_file.read_control_rec()) - { - if (_ditte_uguali) - { - _control_rec = _tras_file.record(); - str = format("%03d", num); - _control_rec.overwrite(str,30); - str = riconverti(data,TRUE); - _control_rec.overwrite(str,33); - _control_rec.overwrite(sigla,240); - str = format("%-15s", (const char*) chiave); - _control_rec.overwrite(str,241); - - _tras_file.write_control_rec(_control_rec,256); - } - } - } - } - - return Tab_application::rewrite(m); -} - -bool Tabinv_application::user_create() -{ - Tab_application::user_create(); - - _msk = get_mask(); - _tabname = get_tabname(); - - if (_tabname == "%IND") - { - _msk->set_handler(nascosto_handler); - _msk->set_handler(F_STATO, stato_invio); - _msk->set_handler(F_DITTAINV, ditta_handler); - _msk->set_handler(F_CAUSALI, almeno_un_flag); - _msk->set_handler(F_CLIFO, clifo_comune); - _msk->set_handler(F_PCON, pcon_comune); - _msk->set_handler(F_MOV, prima_nota); - _msk->set_handler(F_IVA, iva); - _msk->set_handler(F_FATT, saldaconto); - _msk->set_handler(F_DATAULIN, data_invio); - _msk->set_handler(F_USELAB, sigla_file); - _msk->set_handler(F_CHIAVE, chiave_file); - _msk->set_handler(F_GHOST_FIELD, controlli_hnd); - _msk->disable(F_FATT); - } - - if (_tabname == "%INS") - { - _msk->set_handler(nascosto_handler); - _msk->set_handler(F_DITTAINV, nome_id); - _salta_hnd = FALSE; - } - - return TRUE; -} - -cg6500(int argc, char* argv[]) -{ - Tabinv_application a; - - a.run(argc,argv, "Tabelle"); - return 0; -} - - + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "..\ba\batbind.h" +#include "cglib04.h" + +class Tabinv_application : public Tab_application +{ +private: + TMask* _msk; + TString _tabname; + TTransfer_file _tras_file; + + TString _trasf,_control_rec; + long _ditta_tab, _ditta_tras; + bool _disable,_ditte_uguali,_salta_hnd,_messaggio; + +public: + bool user_create(); + virtual void init_query_mode(TMask&); + virtual void init_modify_mode(TMask&); + virtual void init_insert_mode(TMask&); + virtual int write(const TMask& m); + virtual int rewrite(const TMask& m); + + void leggi_trasfer(); + char cerca_stato(long codditta); + + static bool controlli_hnd (TMask_field& f, KEY k); + + static bool nascosto_handler(TMask& m, KEY k); + static bool stato_invio (TMask_field& f, KEY k); + + static bool ditta_handler (TMask_field& f, KEY k); + static bool almeno_un_flag(TMask_field& f, KEY k); + static bool clifo_comune (TMask_field& f, KEY k); + static bool pcon_comune (TMask_field& f, KEY k); + static bool prima_nota (TMask_field& f, KEY k); + static bool iva (TMask_field& f, KEY k); + static bool saldaconto (TMask_field& f, KEY k); + static bool data_invio (TMask_field& f, KEY k); + static bool sigla_file (TMask_field& f, KEY k); + static bool chiave_file (TMask_field& f, KEY k); + + static bool nome_id (TMask_field& f, KEY k); + + void setta_chiave (TMask& m); + + Tabinv_application() {} + virtual ~Tabinv_application() {} +}; + +HIDDEN inline Tabinv_application& app() {return (Tabinv_application&) main_app();} + +char Tabinv_application::cerca_stato(long ditta) +{ + TTable ind ("%IND"); + TString dep; + char stato = '\0'; + + dep = format("%05d", ditta); + + ind.zero(); + ind.put("CODTAB", dep); + if (ind.read() == NOERR) + stato = ind.get_char("S6"); + + return stato; +} + +bool Tabinv_application::nascosto_handler(TMask& m, KEY k) +{ + if (k == K_SHIFT+K_F12) + { + if (app()._tabname == "%IND") + { + app()._disable = FALSE; + + m.enable(F_NUMULINV); + m.enable(F_DATAULIN); + m.enable(F_STATO); + + if ( (app()._ditta_tab == app()._ditta_tras) && m.mode() != MODE_INS) + { + m.enable(F_USELAB); + m.enable(F_CHIAVE); + } + } + else + if (app()._tabname == "%INS") + { + m.enable(F_DITTAINV); + app()._salta_hnd = TRUE; + } + } + + return TRUE; +} + +bool Tabinv_application::stato_invio(TMask_field& f, KEY k) +{ + if ( (k == K_ENTER || k == K_TAB) && f.mask().mode() != MODE_QUERY ) + { + if ( k == K_ENTER) + { + TString stato = f.get(); + int num = f.mask().get_int(F_NUMULINV); + TString sigla = f.mask().get(F_USELAB); + + if (num == 0 && stato != "") + return error_box("Numero ultimo invio NON INDICATO: impossibile indicare lo stato ultimo invio"); + + if ( (stato == "F" && sigla == "") || (stato == "D" && sigla != "") ) + return error_box("La sigla ultimo file elaborato deve essere indicata se lo stato ultimo invio e' uguale a F"); + } + + if (k == K_TAB && app()._messaggio) + { + long codditta = f.mask().get_long(F_DITTAINV); + + char stato = app().cerca_stato(codditta); + + if (stato != '\0' && app()._disable) + { + app()._messaggio = FALSE; + return message_box("Rilevato STATO DI RIPARTENZA: prima concludere il trasferimento"); + } + } + } + + return TRUE; +} + +bool Tabinv_application::ditta_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.mask().mode() == MODE_QUERY) + { + long codditta = f.mask().get_long(F_DITTAINV); + + if (codditta != 0) + { + if (!prefix().exist(codditta)) + { + f.error_box("La ditta selezionata non e' abilitata per la contabilita' "); + return FALSE; + } + } + } + if (k == K_TAB) + { + TLocalisamfile ditte (LF_NDITTE); + + long ditta = f.mask().get_long(F_DITTAINV); + + ditte.setkey(1); + ditte.zero(); + ditte.put(NDT_CODDITTA, ditta); + if (ditte.read() == NOERR) + { + TString ragsoc = ditte.get(NDT_RAGSOC); + f.mask().set(F_RAGSOC, ragsoc); + } + else + f.mask().set(F_RAGSOC, ""); + + app()._ditta_tab = f.mask().get_long(F_DITTAINV); + + if (app()._ditta_tab == app()._ditta_tras) + { + TTable ind ("%IND"); + TString dep; + + dep = format("%05d", app()._ditta_tab); + + ind.zero(); + ind.put("CODTAB", dep); + if (ind.read() == NOERR) + { + TString uselab = app()._tras_file.ult_file(); + TString chiave = app()._tras_file.key(); + + f.mask().set(F_USELAB, uselab); + f.mask().set(F_CHIAVE, chiave); + } + else + { + f.mask().set(F_USELAB, ""); + f.mask().set(F_CHIAVE, ""); + } + app()._ditte_uguali = TRUE; + } + else + { + app()._ditte_uguali = FALSE; + f.mask().set(F_USELAB, ""); + f.mask().set(F_CHIAVE, ""); + } + } + return TRUE; +} + +bool Tabinv_application::almeno_un_flag(TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.mask().mode() != MODE_QUERY) + { + bool cau = f.mask().get_bool(F_CAUSALI); + bool clifo = f.mask().get_bool(F_CLIFO); + bool pcon = f.mask().get_bool(F_PCON); + bool pn = f.mask().get_bool(F_MOV); + bool iva = f.mask().get_bool(F_IVA); + bool fat = f.mask().get_bool(F_FATT); + + if (!cau && !clifo && !pcon && !pn && !iva && !fat) + return error_box("E' necessario indicare almeno una sigla file da trasferire"); + + long ditta = f.mask().get_long(F_DITTAINV); + + app().set_firm(ditta); + + TConfig conf (CONFIG_DITTA); + + TString pcon_cau = conf.get("PcTcCm","cg"); + + bool causali = f.mask().get_bool(F_CAUSALI); + + if (causali && pcon_cau != "") + return error_box("Tabella causali in comune: impossibile trasferirla"); + } + + return TRUE; +} + +bool Tabinv_application::clifo_comune(TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.mask().mode() != MODE_QUERY) + { + long ditta = f.mask().get_long(F_DITTAINV); + + app().set_firm(ditta); + + TConfig conf (CONFIG_DITTA); + + TString ana_com = conf.get("AnCfCm","cg"); + + bool clifo = f.mask().get_bool(F_CLIFO); + + if (clifo && ana_com != "") + return error_box("Anagrafica clienti / fornitori in comune: impossibile trasferirla"); + } + + return TRUE; +} + +bool Tabinv_application::pcon_comune(TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.mask().mode() != MODE_QUERY) + { + long ditta = f.mask().get_long(F_DITTAINV); + + app().set_firm(ditta); + + TConfig conf (CONFIG_DITTA); + + TString pcon_cau = conf.get("PcTcCm","cg"); + + bool pcon = f.mask().get_bool(F_PCON); + + if (pcon && pcon_cau != "") + return error_box("Anagrafica Piano dei conti in comune: impossibile trasferirla"); + } + + return TRUE; +} + +bool Tabinv_application::prima_nota(TMask_field& f, KEY k) +{ + if (k == K_SPACE && f.mask().mode() != MODE_QUERY) + { + bool pn = f.mask().get_bool(F_MOV); + + if (!pn && f.mask().get_bool(F_IVA) ) + { + f.mask().set(F_MOV, "X"); + return f.error_box("Se si vuole inviare l' iva e' obbligatorio inviare anche la primanota"); + } + if (!pn && f.mask().get_bool(F_FATT) ) + { + f.mask().set(F_MOV, "X"); + return f.error_box("Se si vuole inviare il saldaconto e' obbligatorio inviare anche la primanota"); + } + } + + return TRUE; +} + +bool Tabinv_application::iva(TMask_field& f, KEY k) +{ + if (k == K_SPACE && f.mask().mode() != MODE_QUERY) + { + bool iva = f.mask().get_bool(F_IVA); + bool sc = f.mask().get_bool(F_FATT); + + if (iva) + f.mask().set(F_MOV, "X"); + } + + return TRUE; +} + +bool Tabinv_application::saldaconto(TMask_field& f, KEY k) +{ + if (k == K_SPACE && f.mask().mode() != MODE_QUERY) + { + bool iva = f.mask().get_bool(F_IVA); + bool sc = f.mask().get_bool(F_FATT); + + if (sc) + f.mask().set(F_MOV, "X"); + } + + return TRUE; +} + +bool Tabinv_application::data_invio (TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.mask().mode() != MODE_QUERY) + { + int num = f.mask().get_int(F_NUMULINV); + TDate data (f.get()); + + if (num != 0 && !data.ok()) + return error_box("Se indicato il numero deve essere indicata anche la data di invio"); + + if (num == 0 && data.ok()) + return error_box("Se non indicato il numero non puo' essere indicata la data di invio"); + } + + return TRUE; +} + +bool Tabinv_application::sigla_file(TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.mask().mode() != MODE_QUERY) + { + int num = f.mask().get_int(F_NUMULINV); + TString sigla = f.get(); + + if (num == 0 && sigla != "") + return error_box("Numero ultimo invio NON INDICATO: impossibile indicare la sigla ultimo file elaborato"); + +// TString stato = f.mask().get(F_STATO); + +// if ( (stato == "F" && sigla == "") || (stato == "D" && sigla != "") ) +// return error_box("La sigla ultimo file elaborato deve essere indicata se lo stato ultimo invio e' uguale a F"); + + } + + return TRUE; +} + +bool Tabinv_application::chiave_file(TMask_field& f, KEY k) +{ + if (k == K_ENTER && f.mask().mode() != MODE_QUERY) + { + TString sigla = f.mask().get(F_USELAB); + TString chiave = f.get(); + + if (sigla == "" && chiave != "") + return error_box("Sigla ultimo file elaborato NON INDICATA: impossibile indicare la chiave ultimo record elaborato"); + + TString stato = f.mask().get(F_STATO); + + if (stato != "F" && chiave == "" && sigla != "") + return error_box("La chiave ultimo record elaborato deve essere indicata obbligatoriamente"); + } + + return TRUE; +} + +void Tabinv_application::setta_chiave(TMask& m) +{ + m.set(F_CODICE, "INS"); + m.field(F_CODICE).check(); +} + +bool Tabinv_application::nome_id(TMask_field& f, KEY k) +{ + if (k == K_TAB) + { + TLocalisamfile ditte (LF_NDITTE); + + long ditta = f.mask().get_long(F_DITTAINV); + if (ditta != 0) + { + if (!prefix().exist(ditta)) + { + f.error_box("La ditta selezionata non e' abilitata per la contabilita' "); + return FALSE; + } + } + + ditte.setkey(1); + ditte.zero(); + ditte.put(NDT_CODDITTA, ditta); + if (ditte.read() == NOERR) + { + TString ragsoc = ditte.get(NDT_RAGSOC); + f.mask().set(F_RAGSOC, ragsoc); + } + else + f.mask().set(F_RAGSOC, ""); + + TTable ind ("%IND"); + TString dep; + + if (ditta != 0) + { + dep = format("%05d", ditta); + + ind.zero(); + ind.put("CODTAB", dep); + if (ind.read() == NOERR) + { + TString stato = ind.get ("S6"); + int num = ind.get_int ("I0"); + TDate data = ind.get_date("D0"); + + f.mask().set(F_STATO, stato); + f.mask().set(F_NUMULINV, num); + f.mask().set(F_DATAULIN, data.string()); + } + else + { + f.mask().set(F_STATO, ""); + f.mask().set(F_NUMULINV, ""); + f.mask().set(F_DATAULIN, ""); + f.error_box("Codice ditta NON PRESENTE in tabella trasferimenti"); + } + } + else + { + f.mask().set(F_STATO, ""); + f.mask().set(F_NUMULINV, ""); + f.mask().set(F_DATAULIN, ""); + } + + app()._ditta_tab = f.mask().get_long(F_DITTAINV); + + if (app()._ditta_tab == app()._ditta_tras) + { + TString uselab = app()._tras_file.ult_file(); + TString chiave = app()._tras_file.key(); + + f.mask().set(F_USELAB, uselab); + f.mask().set(F_CHIAVE, chiave); + app()._ditte_uguali = TRUE; + } + else + { + app()._ditte_uguali = FALSE; + f.mask().set(F_USELAB, ""); + f.mask().set(F_CHIAVE, ""); + } + } + if (k == K_TAB && !app()._salta_hnd && f.mask().mode() != MODE_QUERY) + { + long codditta = f.mask().get_long(F_DITTAINV); + + if (codditta != 0) + return message_box("Rilevato STATO DI RIPARTENZA: prima concludere il trasferimento"); + } + + return TRUE; +} + +//void Tabinv_application::esegui_controlli(TMask& m) +bool Tabinv_application::controlli_hnd(TMask_field& f, KEY k) +{ + if (k == K_TAB && !f.mask().field(F_NUMULINV).enabled()) + { + int num = f.mask().get_int(F_NUMULINV); + TDate data (f.mask().get(F_DATAULIN)); + + if (num != 0 && !data.ok()) + return error_box("Se indicato il numero deve essere indicata anche la data di invio"); + + if (num == 0 && data.ok()) + return error_box("Se non indicato il numero non puo' essere indicata la data di invio"); + + TString sigla = f.mask().get(F_USELAB); + + if (num == 0 && sigla != "") + return error_box("Numero ultimo invio NON INDICATO: impossibile indicare la sigla ultimo file elaborato"); + + TString stato = f.mask().get(F_STATO); + + if (stato != "F" && sigla != "") + return error_box("La sigla ultimo file elaborato puo' essere indicata solo se lo stato ultimo invio e' F"); + + TString chiave = f.mask().get(F_CHIAVE); + + if (sigla == "" && chiave != "") + return error_box("Sigla ultimo file elaborato NON INDICATA: impossibile indicare la chiave ultimo record elaborato"); + + if (stato != "F" && chiave == "" && sigla != "") + return error_box("La chiave ultimo record elaborato deve essere indicata obbligatoriamente"); + } + return TRUE; +} + +void Tabinv_application::leggi_trasfer() +{ + _trasf = ""; + _trasf = firm2dir(0); + _trasf << HEADER; + + _tras_file.open(_trasf); + + if (_tras_file.exist()) + { + if (_tras_file.read_control_rec()) + { + _control_rec = _tras_file.record(); + _ditta_tras = _tras_file.ditta(); + } + else + _ditta_tras = 0; + } + else + _ditta_tras = 0; +} + +void Tabinv_application::init_query_mode(TMask& m) +{ + leggi_trasfer(); + _disable = TRUE; + _messaggio = TRUE; + + if (_tabname == "%INS") + { + setta_chiave(m); + m.send_key(K_AUTO_ENTER,0); + + m.disable(F_DITTAINV); + } + + m.disable(F_NUMULINV); + m.disable(F_DATAULIN); + m.disable(F_STATO); + m.disable(F_USELAB); + m.disable(F_CHIAVE); +} + +void Tabinv_application::init_modify_mode(TMask& m) +{ + if (_tabname == "%IND") + { + leggi_trasfer(); + + long ditta = m.get_long(F_DITTAINV); + + if (ditta == _ditta_tras) + { + TString uselab = _tras_file.ult_file(); + TString chiave = _tras_file.key(); + + m.set(F_USELAB, uselab); + m.set(F_CHIAVE, chiave); + } + else + { + m.set(F_USELAB, ""); + m.set(F_CHIAVE, ""); + } + + char stato = app().cerca_stato(ditta); + + if (stato == '\0') + { + m.enable(F_CAUSALI); + m.enable(F_CLIFO); + m.enable(F_PCON); + m.enable(F_MOV); + m.enable(F_IVA); + //m.enable(F_FATT); + m.enable(F_BOLLATO); + } + else + { + m.disable(F_CAUSALI); + m.disable(F_CLIFO); + m.disable(F_PCON); + m.disable(F_MOV); + m.disable(F_IVA); + //m.disable(F_FATT); + m.disable(F_BOLLATO); + } + } + if (_tabname == "%INS") + { + setta_chiave(m); + + m.disable(F_DITTAINV); + + long ditta = m.get_long(F_DITTAINV); + if (ditta == 0) + m.enable(F_NOMEID); + else + m.disable(F_NOMEID); + } + + m.disable(F_NUMULINV); + m.disable(F_DATAULIN); + m.disable(F_STATO); + m.disable(F_USELAB); + m.disable(F_CHIAVE); +} + +void Tabinv_application::init_insert_mode(TMask& m) +{ + if (_tabname == "%IND") + leggi_trasfer(); + + if (_tabname == "%INS") + m.disable(F_DITTAINV); + + m.disable(F_NUMULINV); + m.disable(F_DATAULIN); + m.disable(F_STATO); + m.disable(F_USELAB); + m.disable(F_CHIAVE); +} + +int Tabinv_application::write(const TMask& m) +{ + if (_tabname == "%IND") + { + if (m.mode() != MODE_INS) + { + TString str; + + TString std = m.get(F_STATO); + + TConfig conf (CONFIG_DITTA); + conf.set("FlStInv", std); + + int num = m.get_int(F_NUMULINV); + TString data = m.get (F_DATAULIN); + TString sigla = m.get (F_USELAB); + TString chiave = m.get (F_CHIAVE); + + if (sigla == "") + sigla = " "; + + if (_tras_file.read_control_rec()) + { + if (_ditte_uguali) + { + _control_rec = _tras_file.record(); + str = format("%03d", num); + _control_rec.overwrite(str,30); + str = riconverti(data,TRUE); + _control_rec.overwrite(str,33); + _control_rec.overwrite(sigla,240); + str = format("%-15s", (const char*) chiave); + _control_rec.overwrite(str,241); + + _tras_file.write_control_rec(_control_rec,256); + } + } + } + } + + return Tab_application::write(m); +} + +int Tabinv_application::rewrite(const TMask& m) +{ + if (_tabname == "%IND") + { + if (m.mode() != MODE_INS) + { + TString str; + + TString std = m.get(F_STATO); + + TConfig conf (CONFIG_DITTA); + conf.set("FlStInv", std); + + int num = m.get_int(F_NUMULINV); + TString data = m.get (F_DATAULIN); + TString sigla = m.get (F_USELAB); + TString chiave = m.get (F_CHIAVE); + + if (sigla == "") + sigla = " "; + + if (_tras_file.read_control_rec()) + { + if (_ditte_uguali) + { + _control_rec = _tras_file.record(); + str = format("%03d", num); + _control_rec.overwrite(str,30); + str = riconverti(data,TRUE); + _control_rec.overwrite(str,33); + _control_rec.overwrite(sigla,240); + str = format("%-15s", (const char*) chiave); + _control_rec.overwrite(str,241); + + _tras_file.write_control_rec(_control_rec,256); + } + } + } + } + + return Tab_application::rewrite(m); +} + +bool Tabinv_application::user_create() +{ + Tab_application::user_create(); + + _msk = get_mask(); + _tabname = get_tabname(); + + if (_tabname == "%IND") + { + _msk->set_handler(nascosto_handler); + _msk->set_handler(F_STATO, stato_invio); + _msk->set_handler(F_DITTAINV, ditta_handler); + _msk->set_handler(F_CAUSALI, almeno_un_flag); + _msk->set_handler(F_CLIFO, clifo_comune); + _msk->set_handler(F_PCON, pcon_comune); + _msk->set_handler(F_MOV, prima_nota); + _msk->set_handler(F_IVA, iva); + _msk->set_handler(F_FATT, saldaconto); + _msk->set_handler(F_DATAULIN, data_invio); + _msk->set_handler(F_USELAB, sigla_file); + _msk->set_handler(F_CHIAVE, chiave_file); + _msk->set_handler(F_GHOST_FIELD, controlli_hnd); + _msk->disable(F_FATT); + } + + if (_tabname == "%INS") + { + _msk->set_handler(nascosto_handler); + _msk->set_handler(F_DITTAINV, nome_id); + _salta_hnd = FALSE; + } + + return TRUE; +} + +cg6500(int argc, char* argv[]) +{ + Tabinv_application a; + + a.run(argc,argv, "Tabelle"); + return 0; +} + + diff --git a/cg/cg6600.cpp b/cg/cg6600.cpp index a59f4c072..dd3243a14 100755 --- a/cg/cg6600.cpp +++ b/cg/cg6600.cpp @@ -1,1444 +1,1444 @@ -// Ricezione dati da sistema - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cglib04.h" -#include "cglib.h" -#include "cg2103.h" - -#include "cg6600.h" - -class TRic_tab : public TApplication -{ - - TTable* _tab_tra; - TLocalisamfile* _caus,*_rcaus,*_clifo,*_pcon,*_mov,*_rmov,*_rmoviva,*_saldi,*_occas; - TIsamtempfile* _tcaus,*_trcaus,*_tclifo,*_tpcon,*_tmov,*_trmov,*_triva,*_toccas; - TTable* _reg; - TTransfer_file _tras_file; - TArray _aggiorna; - char _scelta; - TSaldo_agg _sld; - TProgind* _prog; - - int _numinv,_nultras,_annoes,_g,_c; - TString _trasf,_ragsoc_dittar,_sigle_file,_std,_key,_nomeid,_dittainv; - long _dittaric,_numrec,_nreg,_s,_ndoc,_npiva,_nupiva; - TDate _dataultras,_datareg,_dreg,_ddoc; - TString _uselab,_record,_nrec_file,_creg,_ccau,_tdoc,_cod_com; - bool _prima_volta,_nprot_att,_nprot_pas; - long _protiva,_uprotiva,_nprotiva,_nuprotiva,_numreg,_numreg_p,_numreg_piva,_nuovareg; - char _sez; - real _importo,_totdoc; - TString _tmpcaus,_tmprcaus,_tmpclifo,_tmpcon,_tmpmov,_tmprmov,_tmpriva,_tmpoccas; - -public: - TString _titolo; - - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - bool main_loop(); - bool video(); - bool leggi_trasfer(); - bool controlli(); - void ditta_ricevente(); - bool controllo_pre_ricezione(); - void leggi_record_controllo(); - void apri_file_temp(); - void chiudi_file_temp(); - - void setta_parametri_record(const TString& sigla,const TString& flag); - - void trasferimento(); - - void ricevi_causali(TString& key, char sigla); - void cancella_righe_causali(TString& codcaus); - void scrivi_righe_causali(TString& codcaus, char sigla); - void ricevi_clifo(TString& key, char sigla); - void ricevi_pcon(TString& key, char sigla); - void conto(TRectype& pcon,char flag,bool esiste); - void sottoconto(TRectype& pcon,char flag,bool esiste); - void scrivi_pcon(TRectype& pcon,bool esiste); - - void ricevi_movPN(TString& key, char sigla); - void scrivi_righePN(long numreg); - void ricevi_movIVA(TString& key, char sigla); - void scrivi_righeIVA(long numreg); - long esiste_numreg(long nreg); - void num_protocollo(); - long controlli_primanota(); - long ulnumprot_reg(int anno,TString& codreg); - long ultima_registrazione(); - void aggiorna_reg(int anno,TString& codreg,long ulnum); - char ricerca_causale(TString& field); - - bool occasionali(const TString& ocfpi); - - TRic_tab(char ric_tab_mov); -}; - -HIDDEN TRic_tab& app() { return (TRic_tab &) main_app(); } - -TRic_tab::TRic_tab(char ric_tab_mov) : _scelta(toupper(ric_tab_mov)) -{ - if (_scelta == 'T') - _titolo = "Ricezione tabelle"; - - if (_scelta == 'M') - _titolo = "Ricezione movimenti"; -} - -bool TRic_tab::create() -{ - TApplication::create(); - - _tab_tra = new TTable ("%TRA"); - - _reg = new TTable ("REG"); - - if (_scelta == 'T') - { - _caus = new TLocalisamfile (LF_CAUSALI); - _rcaus = new TLocalisamfile (LF_RCAUSALI); - _clifo = new TLocalisamfile (LF_CLIFO); - _pcon = new TLocalisamfile (LF_PCON); - } - else - { - _mov = new TLocalisamfile (LF_MOV); - _rmov = new TLocalisamfile (LF_RMOV); - _rmoviva = new TLocalisamfile (LF_RMOVIVA); - _saldi = new TLocalisamfile (LF_SALDI); - _occas = new TLocalisamfile (LF_OCCAS); - } - - _numrec = 1; - _prima_volta = TRUE; - _aggiorna.destroy(); - _numreg_p = 0; - _numreg_piva = 0; - _nreg = 0; - _sld.reset(); - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool TRic_tab::destroy() -{ - delete _tab_tra; - delete _reg; - - if (_scelta == 'T') - { - delete _caus; - delete _rcaus; - delete _clifo; - delete _pcon; - } - else - { - delete _mov; - delete _rmov; - delete _rmoviva; - delete _saldi; - delete _occas; - } - - return TApplication::destroy(); -} - -void TRic_tab::leggi_record_controllo() -{ - _tras_file.read_control_rec(); - _record = _tras_file.record(); -} - -bool TRic_tab::main_loop() -{ - int posiz; - - _dittaric = get_firm(); - - if (_scelta == 'T') - { - if (video()) - { - if (_std == "") - if (!controllo_pre_ricezione()) - return FALSE; - - apri_file_temp(); - - trasferimento(); - posiz = _tras_file.num('Z'); //Ritorna la posizione della sigla all'interno dell'indice - - if (posiz >= 0) - { - setta_parametri_record(" ","C"); - message_box("Aggiornamento tabelle terminato: proseguire con controllo movimenti"); - leggi_record_controllo(); - TString str (_record.overwrite(" ",241)); - _tras_file.write_control_rec(str,256); - } - else - { - chiudi_file_temp(); - message_box("Trasferimento interamente completato: proseguire per cancellare il file"); - setta_parametri_record(" ","*"); - _tras_file.remove_all(); - setta_parametri_record(" "," "); - } - } - } - else - if (_scelta == 'M') - { - if (video()) - { - apri_file_temp(); - - trasferimento(); - chiudi_file_temp(); - message_box("Trasferimento interamente completato: proseguire per cancellare il file"); - setta_parametri_record(" ","*"); - _tras_file.remove_all(); - setta_parametri_record(" "," "); - } - } - - return FALSE; -} - -void TRic_tab::trasferimento() -{ - char uselab; - TString key = ""; - int posiz,i; - int last_tab; - char sigla; - TString message; - - uselab = (_tras_file.ult_file())[0]; - posiz = _tras_file.num(uselab); //Ritorna la posizione della sigla all'interno dell'indice - key = _tras_file.key(); - key.trim(); - - if (_scelta == 'T') - last_tab = _tras_file.last_tab(); - else - if (_scelta == 'M') - last_tab = _tras_file.last_mov(); - - for (i = posiz; i < last_tab;i++) - { - long nrec = ((_tras_file.nrec(i))+1); - sigla = _tras_file.name(i)[0]; - long cicli; - - switch (sigla) - { - case 'W': - message = "Ricezione tabella causali in corso... Prego attendere."; - cicli = _tcaus->items(); - break; - case 'A': - message = "Ricezione anagrafica Clienti / Fornitori in corso... Prego attendere."; - cicli = _tclifo->items(); - break; - case 'P': - message = "Ricezione anagrafica Piano dei Conti in corso... Prego attendere."; - cicli = _tpcon->items(); - break; - case 'Z': - message = "Ricezione Movimenti di primanota in corso... Prego attendere."; - cicli = _tmov->items(); - break; - case 'U': - message = "Ricezione Movimenti iva in corso... Prego attendere."; - cicli = _tmov->items(); - break; - default: break; - } - _prog = new TProgind(cicli,message,FALSE); - - if (_scelta == 'T') - { - if (sigla == 'W') - ricevi_causali(key,sigla); - if (sigla == 'A') - ricevi_clifo(key,sigla); - if (sigla == 'P') - ricevi_pcon(key,sigla); - } - else - if (_scelta == 'M') - { - if (sigla == 'Z') - { - ricevi_movPN(key,sigla); - _sld.registra(); - } - else - if (sigla == 'U') - ricevi_movIVA(key,sigla); - } - delete _prog; - key = ""; //Altrimenti in caso di ripartenza mi ripristina sempre la situazione - } -} - -void TRic_tab::ricevi_causali(TString& key, char uselab) -{ - TString str; - - char flag = _tras_file.flg_agg(uselab); - - _tcaus->setkey(1); - - if (key.empty()) - _tcaus->first(); - else - { - TString causale (key.mid(0,3)); - _tcaus->zero(); - _tcaus->put(CAU_CODCAUS, causale); - _tcaus->read(); - } - - for(; !_tcaus->eof(); _tcaus->next()) - { - _prog->addstatus(1); - - TString codcaus = _tcaus->get(CAU_CODCAUS); - - _caus->curr() = _tcaus->curr(); - - if (_caus->read() == NOERR) // Esiste la testata - { - if (flag == 'N') - { - leggi_record_controllo(); - TString chiave; - chiave.format("%3s",(const char*) codcaus); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - continue; - } - else - if (flag == 'D') - { - TString descr = _tcaus->get(CAU_DESCR); - - _caus->put(CAU_DESCR, descr); - _caus->rewrite(); - } - else - if (flag == 'T') - { - scrivi_righe_causali(codcaus,uselab); - - _caus->zero(); - _caus->curr() = _tcaus->curr(); - _caus->rewrite(); - } - } - else - { - scrivi_righe_causali(codcaus,uselab); - - _caus->zero(); - _caus->curr() = _tcaus->curr(); - _caus->write(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%3s",(const char*) codcaus); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - } -} - -void TRic_tab::cancella_righe_causali(TString& codcaus) -{ - _rcaus->setkey(1); - _rcaus->zero(); - _rcaus->put(RCA_CODCAUS, codcaus); - TRectype rcau (LF_RCAUSALI); - rcau = _rcaus->curr(); - for (_rcaus->read(); !_rcaus->eof(); _rcaus->next()) - { - if (_rcaus->curr() > rcau) break; - - _rcaus->remove(); - } -} - -void TRic_tab::scrivi_righe_causali(TString& codcaus, char uselab) -{ - TString str; - - cancella_righe_causali(codcaus); - - _trcaus->setkey(1); - _trcaus->zero(); - _trcaus->put(RCA_CODCAUS, codcaus); - TRectype rcau (LF_RCAUSALI); - rcau = _trcaus->curr(); - for (_trcaus->read(); !_trcaus->eof(); _trcaus->next()) - { - if (_trcaus->curr() > rcau) break; - - _rcaus->curr() = _trcaus->curr(); - _rcaus->write(); - - leggi_record_controllo(); - TString chiave; - chiave.format("%3s",(const char*) codcaus); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - } -} - -void TRic_tab::ricevi_clifo(TString& key, char uselab) -{ - TString str; - - char flag = _tras_file.flg_agg(uselab); - - _tclifo->setkey(1); - - if (key.empty()) - _tclifo->first(); - else - { - char tipo = (key.mid(0,1))[0]; - long codice = atol(key.mid(1,6)); - _tclifo->zero(); - _tclifo->put(CLI_TIPOCF, tipo); - _tclifo->put(CLI_CODCF, codice); - _tclifo->read(); - } - - for(; !_tclifo->eof(); _tclifo->next()) - { - _prog->addstatus(1); - - char tipocf = _tclifo->get_char(CLI_TIPOCF); - long codcf = _tclifo->get_long(CLI_CODCF); - - _clifo->curr() = _tclifo->curr(); - - if (_clifo->read() == NOERR) // Esiste gia' il cliente - { - if (flag == 'N') - { - leggi_record_controllo(); - TString chiave; - chiave.format("%c%06ld", tipocf,codcf); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - continue; - } - else - if (flag == 'D') - { - TString ragsoc = _tclifo->get(CLI_RAGSOC); - TString ind = _tclifo->get(CLI_INDCF); - TString civ = _tclifo->get(CLI_CIVCF); - TString com = _tclifo->get(CLI_COMCF); - TString cap = _tclifo->get(CLI_CAPCF); - TString cofi = _tclifo->get(CLI_COFI); - TString paiv = _tclifo->get(CLI_PAIV); - TString ptel = _tclifo->get(CLI_PTEL); - TString tel = _tclifo->get(CLI_TEL); - - _clifo->put(CLI_RAGSOC, ragsoc); - _clifo->put(CLI_INDCF, ind); - _clifo->put(CLI_CIVCF, civ); - _clifo->put(CLI_COMCF, com); - _clifo->put(CLI_CAPCF, cap); - _clifo->put(CLI_COFI, cofi); - _clifo->put(CLI_PAIV, paiv); - _clifo->put(CLI_PTEL, ptel); - _clifo->put(CLI_TEL, tel); - - _clifo->rewrite(); - } - else - if (flag == 'T') - { - _clifo->zero(); - _clifo->curr() = _tclifo->curr(); - _clifo->rewrite(); - } - } - else - { - _clifo->zero(); - _clifo->curr() = _tclifo->curr(); - _clifo->write(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%c%06ld", tipocf, codcf); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - } -} - -void TRic_tab::ricevi_pcon(TString& key, char uselab) -{ - TString str; - bool esiste; - TRectype pcon (LF_PCON); - - char flag = _tras_file.flg_agg(uselab); - char f_IV = _tras_file.flg_agg_IV(uselab); - - _tpcon->setkey(1); - - if (key.empty()) - _tpcon->first(); - else - { - int gruppo = atoi(key.mid(0,3)); - int conto = atoi(key.mid(3,3)); - long sottoc = atol(key.mid(6,6)); - - _tpcon->zero(); - _tpcon->put(PCN_GRUPPO, gruppo); - if (conto != 0) - _tpcon->put(PCN_CONTO, conto); - if (sottoc != 0) - _tpcon->put(PCN_SOTTOCONTO, sottoc); - _tpcon->read(); - } - - for(; !_tpcon->eof(); _tpcon->next()) - { - _prog->addstatus(1); - - int g = _tpcon->get_int (PCN_GRUPPO); - int c = _tpcon->get_int (PCN_CONTO); - long s = _tpcon->get_long(PCN_SOTTOCONTO); - - _pcon->curr() = _tpcon->curr(); - - if (_pcon->read() == NOERR) // Esiste gia' sul Piano dei Conti - { - esiste = TRUE; - - if (flag == 'N') - { - leggi_record_controllo(); - TString chiave; - chiave.format("%3d%3d%6ld", g, c, s); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - continue; - } - else - if (flag == 'D') - { - TString descr = _tpcon->get(PCN_DESCR); - - _pcon->put(PCN_DESCR, descr); - _pcon->rewrite(); - } - else - if (flag == 'T') - scrivi_pcon(pcon,esiste); - } - else // Non esiste sull'archivio effettivo - { - esiste = FALSE; - scrivi_pcon(pcon,esiste); - } - - TRecnotype rec; - if (esiste) - rec = _pcon->recno(); - - if (f_IV == 'T') - { - if (g != 0 && c == 0) - conto(pcon,flag,esiste); - if (g != 0 && c != 0 && s != 0) - sottoconto(pcon,flag,esiste); - } - - if (esiste) - _pcon->readat(rec); - - if ( (flag == 'T' && esiste) || !esiste) - _pcon->curr() = pcon; - - if (esiste) - _pcon->rewrite(); - else - _pcon->write(); - - leggi_record_controllo(); - TString chiave; - chiave.format("%3d%3d%6ld", g, c, s); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - } -} - -void TRic_tab::scrivi_pcon(TRectype& pcon,bool esiste) -{ - int g = _tpcon->get_int (PCN_GRUPPO); - int c = _tpcon->get_int (PCN_CONTO); - long s = _tpcon->get_long(PCN_SOTTOCONTO); - TString descr = _tpcon->get (PCN_DESCR); - int indbil = _tpcon->get_int (PCN_INDBIL); - char tmcf = _tpcon->get_char(PCN_TMCF); - bool stsottbil = _tpcon->get_bool(PCN_STSOTTBIL); - bool compens = _tpcon->get_bool(PCN_COMPENS); - int tipospric = _tpcon->get_int (PCN_TIPOSPRIC); - TString codcbl = _tpcon->get (PCN_CODCBL); - bool stsottab = _tpcon->get_bool(PCN_STSOTTAB); - char sezsaldi = _tpcon->get_char(PCN_SEZSALDI); - bool sospeso = _tpcon->get_bool(PCN_SOSPESO); - int ricser = _tpcon->get_int (PCN_RICSER); - - pcon.zero(); - pcon.put(PCN_GRUPPO, g); - if (c != 0) - pcon.put(PCN_CONTO, c); - if (s != 0) - pcon.put(PCN_SOTTOCONTO, s); - pcon.put(PCN_DESCR, descr); - pcon.put(PCN_INDBIL, indbil); - pcon.put(PCN_TMCF, tmcf); - pcon.put(PCN_STSOTTBIL, stsottbil); - pcon.put(PCN_COMPENS, compens); - pcon.put(PCN_TIPOSPRIC, tipospric); - pcon.put(PCN_CODCBL, codcbl); - pcon.put(PCN_STSOTTAB, stsottab); - pcon.put(PCN_SEZSALDI, sezsaldi); - pcon.put(PCN_SOSPESO, sospeso); - pcon.put(PCN_RICSER, ricser); -} - -void TRic_tab::conto(TRectype& pcon,char flag,bool esiste) -{ - int g = _tpcon->get_int(PCN_GRUPPO); - int c = _tpcon->get_int(PCN_CONTO); - - TString sez = _tpcon->get (PCN_SEZIVD); - TString let = _tpcon->get (PCN_LETTIVD); - TString numr = _tpcon->get (PCN_NUMRIVD); - int num = _tpcon->get_int(PCN_NUMIVD); - - if (sez.not_empty()) - { - if (!esiste || (esiste && flag == 'T') ) - { - pcon.put (PCN_SEZIVD, sez); - pcon.put (PCN_LETTIVD, let); - pcon.put (PCN_NUMRIVD, numr); - pcon.put (PCN_NUMIVD, num); - pcon.zero(PCN_SEZIVDOPP); - pcon.zero(PCN_LETTIVDOPP); - pcon.zero(PCN_NUMRIVDOPP); - pcon.zero(PCN_NUMIVDOPP); - - _tras_file.annulla_classi(g,c,TRUE); - } - } - else - { - if (esiste && flag == 'T') - { - pcon.put (PCN_SEZIVD, sez); - pcon.put (PCN_LETTIVD, let); - pcon.put (PCN_NUMRIVD, numr); - pcon.put (PCN_NUMIVD, num); - pcon.zero(PCN_SEZIVDOPP); - pcon.zero(PCN_LETTIVDOPP); - pcon.zero(PCN_NUMRIVDOPP); - pcon.zero(PCN_NUMIVDOPP); - - _tras_file.annulla_classi(g,c,TRUE); - } - } -} - -void TRic_tab::sottoconto(TRectype& pcon,char flag,bool esiste) -{ - int g = _tpcon->get_int(PCN_GRUPPO); - int c = _tpcon->get_int(PCN_CONTO); - - TString sez = _tpcon->get (PCN_SEZIVD); - TString let = _tpcon->get (PCN_LETTIVD); - TString numr = _tpcon->get (PCN_NUMRIVD); - int num = _tpcon->get_int(PCN_NUMIVD); - TString sezop = _tpcon->get (PCN_SEZIVDOPP); - TString letop = _tpcon->get (PCN_LETTIVDOPP); - TString numrop = _tpcon->get (PCN_NUMRIVDOPP); - int numop = _tpcon->get_int(PCN_NUMIVDOPP); - - if (sez.not_empty()) - { - if (!esiste || (esiste && flag == 'T') ) - { - pcon.put(PCN_SEZIVD, sez); - pcon.put(PCN_LETTIVD, let); - pcon.put(PCN_NUMRIVD, numr); - pcon.put(PCN_NUMIVD, num); - pcon.put(PCN_SEZIVDOPP, sezop); - pcon.put(PCN_LETTIVDOPP, letop); - pcon.put(PCN_NUMRIVDOPP, numrop); - pcon.put(PCN_NUMIVDOPP, numop); - - _tras_file.annulla_classi(g,c,FALSE); - } - } - else - { - if (sezop.not_empty()) - { - if (!esiste || (esiste && flag == 'T') ) - { - pcon.put(PCN_SEZIVDOPP, sezop); - pcon.put(PCN_LETTIVDOPP, letop); - pcon.put(PCN_NUMRIVDOPP, numrop); - pcon.put(PCN_NUMIVDOPP, numop); - } - } - else - { - pcon.zero(PCN_SEZIVDOPP); - pcon.zero(PCN_LETTIVDOPP); - pcon.zero(PCN_NUMRIVDOPP); - pcon.zero(PCN_NUMIVDOPP); - } - } -} - -long TRic_tab::esiste_numreg(long numulreg) -{ - TLocalisamfile mov (LF_MOV); - - do - { - numulreg++; - - mov.setkey(1); - mov.zero(); - mov.put(MOV_NUMREG, numulreg); - } - while (mov.read() == NOERR); - - return numulreg; -} - -long TRic_tab::ultima_registrazione() -{ - if (_nreg == 0) - { - TLocalisamfile mov (LF_MOV); - - mov.last(); - return (mov.get_long(MOV_NUMREG)); - } - else - return _nreg; -} - -void TRic_tab::num_protocollo() -{ - _protiva = _tmov->get_long(MOV_PROTIVA); - _uprotiva = _tmov->get_long(MOV_UPROTIVA); - - if (_protiva == 0) - _uprotiva = 0; - - _nprotiva = _protiva; - _nuprotiva = _uprotiva; -} - -long TRic_tab::ulnumprot_reg(int anno,TString& cr) -{ - TRegistro rg (cr, anno); - - return rg.protocol(); -} - -void TRic_tab::aggiorna_reg(int anno,TString& codreg,long ulnum) -{ - TTable reg ("REG"); - TString16 dep; - - if (real::is_natural(codreg)) - dep.format("%04d%03s", anno,(const char*) codreg); - else - dep.format("%04d%-3s", anno,(const char*) codreg); - - reg.zero(); - reg.put("CODTAB", (const char*) dep); - if (reg.read() == NOERR) - { - if (_nprotiva > ulnum ) - reg.put("I5", _nprotiva); - - if (_nuprotiva > ulnum ) - reg.put("I5", _nuprotiva); - - reg.rewrite(); - } -} - -long TRic_tab::controlli_primanota() -{ - TTable tpd ("%TPD"); - bool corrisp; - TDate datareg; - int anno; - long ulnum = 0; - TString16 tmp; - TString tipodoc,codreg; - - char tipocf = _tmov->get_char(MOV_TIPO); - int tiporeg; - if (tipocf == 'C') - tiporeg = 1; - else - if (tipocf == 'F') - tiporeg = 2; - - codreg = _tmov->get(MOV_REG); - tipodoc = _tmov->get(MOV_TIPODOC); - - datareg = _tmov->get_date(MOV_DATAREG); - anno = datareg.year(); - - tpd.zero(); - tpd.put("CODTAB", (const char*) tipodoc); - if (tpd.read() == NOERR) - corrisp = tpd.get_bool("B0"); - - if (codreg.not_empty() && !corrisp) - { - if ( ( (tiporeg == 1 && (_nprot_att || _protiva == 0) ) ) - || ( (tiporeg == 2 && (_nprot_pas || _protiva == 0) ) ) ) - { - ulnum = ulnumprot_reg(anno,codreg); - _nprotiva = ulnum + 1; - if (_uprotiva != 0) - _nuprotiva = (_nprotiva - ulnum) + _uprotiva; - } - } - - return ulnum; -} - -char TRic_tab::ricerca_causale(TString& causale) -{ - TLocalisamfile cau (LF_CAUSALI); - char movap = ' '; - - if (real::is_natural(causale)) - causale.format("%03s", (const char*) causale); - else - causale.format("%-3s", (const char*) causale); - - cau.setkey(1); - cau.zero(); - cau.put("CODCAUS", causale); - if (cau.read() == NOERR) - movap = cau.get_char("MOVAP"); - - return movap; -} - -void TRic_tab::scrivi_righePN(long numreg) -{ - TString str; - - _trmov->setkey(1); - _trmov->zero(); - _trmov->put(RMV_NUMREG, numreg); - TRectype rmov (LF_RMOV); - rmov = _trmov->curr(); - for (_trmov->read(); !_trmov->eof(); _trmov->next()) - { - if (_trmov->curr() > rmov) break; - - int g = _trmov->get_int (RMV_GRUPPO); - int c = _trmov->get_int (RMV_CONTO); - long s = _trmov->get_long(RMV_SOTTOCONTO); - char sez = _trmov->get_char(RMV_SEZIONE); - real imp ( _trmov->get_real(RMV_IMPORTO) ); - - _trmov->put(RMV_NUMREG, _nreg); - _rmov->curr() = _trmov->curr(); - _rmov->write(); - - _sld.aggiorna(g,c,s,imp,sez); - } -} - -void TRic_tab::ricevi_movPN(TString& key, char uselab) -{ - TString str; - long numulreg; - TRectype recmov (LF_MOV); - - char flag = _tras_file.flg_agg(uselab); - - _nprot_att = _tras_file.numprot_att(); - _nprot_pas = _tras_file.numprot_pas(); - - _tmov->setkey(1); - - if (key.empty()) - _tmov->first(); - else - { - long numreg = atol(key.mid(0,7)); - _tmov->zero(); - _tmov->put(MOV_NUMREG, numreg); - _tmov->read(); - } - - for(; !_tmov->eof(); _tmov->next()) - { - _prog->addstatus(1); - - long nreg = _tmov->get_long(MOV_NUMREG); - long nuova_reg = _tmov->get_long("TNUMREG" ); - - if (nuova_reg == 0) - { - numulreg = ultima_registrazione(); // reperisco il numero ultima registrazione - _nreg = esiste_numreg(numulreg); - } - else - _nreg = nuova_reg; - - TRecnotype rec = _tmov->recno(); // Salvo il nuovo numero di - _tmov->put("TNUMREG", _nreg); // registrazione sul file di lavoro - _tmov->rewrite(); - _tmov->readat(rec); - - int annoes = _tmov->get_int(MOV_ANNOES); - - recmov = _tmov->curr(); - - _mov->setkey(1); - _mov->zero(); - _mov->put(MOV_NUMREG, _nreg); - - if (_mov->read() != NOERR) // Se non esiste la testata - { - num_protocollo(); // Riattribuzione numero di protocollo - long ulnum = controlli_primanota(); - - recmov.put(MOV_NUMREG, _nreg); - recmov.put(MOV_PROTIVA, _nprotiva); - recmov.put(MOV_UPROTIVA, _nuprotiva); - - _mov->zero(); - _mov->curr() = recmov; - _mov->write(); - - TString codreg (_tmov->get (MOV_REG)); - TString codcaus (_tmov->get (MOV_CODCAUS)); - TDate datareg (_tmov->get_date(MOV_DATAREG)); - int anno = datareg.year(); - - aggiorna_reg(anno,codreg,ulnum); // Aggiorna il registro - - _sld.set_anno_es(annoes); - _sld.set_movprovv(FALSE); - _sld.set_num_ulmov(_nreg); - _sld.set_data_ulmov(datareg); - char movap = ricerca_causale(codcaus); - if (movap == 'A') - _sld.set_movap(TRUE); - - scrivi_righePN(nreg); - - _sld.registra(); - _sld.reset(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%07ld", nreg); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - } -} - -bool TRic_tab::occasionali(const TString& ocfpi) -{ - TString chiave; - long prog = 1; - bool esiste = FALSE; - - TString nocfpi = _tmov->get("TOCFP"); - nocfpi.trim(); - - if (nocfpi.empty()) - { - _occas->setkey(1); - _occas->zero(); - _occas->put("CFPI", "RIC9999999999999"); - _occas->read(); - _occas->prev(); - TString cfpi = _occas->get(OCC_CFPI); - if (cfpi.mid(0,3) == "RIC") - { - prog = atol(cfpi.mid(3,13)); - prog++; - chiave = format("%3s%13ld", (const char*) "RIC", prog); - } - else - chiave = format("%3s%13ld", (const char*) "RIC", prog); - - esiste = FALSE; - } - else - { - _occas->setkey(1); - _occas->zero(); - _occas->put("CFPI", nocfpi); - _occas->read(); - - esiste = TRUE; - } - - _toccas->setkey(1); - _toccas->zero(); - _toccas->put(OCC_CFPI, ocfpi); - _toccas->read(); - - _occas->curr() = _toccas->curr(); - - if (esiste) - _occas->rewrite(); - else - _occas->write(); - - return TRUE; -} - -void TRic_tab::scrivi_righeIVA(long numreg) -{ - TString str; - - _triva->setkey(1); - _triva->zero(); - _triva->put(RMI_NUMREG, numreg); - TRectype riva (LF_RMOVIVA); - riva = _triva->curr(); - for (_triva->read(); !_triva->eof(); _triva->next()) - { - if (_triva->curr() > riva) break; - - _triva->put(RMI_NUMREG, _nuovareg); - _rmoviva->curr() = _triva->curr(); - _rmoviva->write(); - } -} - -void TRic_tab::ricevi_movIVA(TString& key, char uselab) -{ - TString str; - TRectype recmov (LF_MOV); - - char flag = _tras_file.flg_agg(uselab); - - _tmov->setkey(1); - - if (key.empty()) - _tmov->first(); - else - { - long numreg = atol(key.mid(0,7)); - _tmov->zero(); - _tmov->put(MOV_NUMREG, numreg); - _tmov->read(); - } - - for(; !_tmov->eof(); _tmov->next()) - { - _prog->addstatus(1); - - long nreg = _tmov->get_long(MOV_NUMREG); - - TString codreg = _tmov->get(MOV_REG); - TString codcau = _tmov->get(MOV_CODCAUS); - - if (codreg.empty() || codcau.empty()) continue; - - _nuovareg = _tmov->get_long("TNUMREG"); - TString ocfpi = _tmov->get(MOV_OCFPI); - - if (ocfpi.not_empty()) - occasionali(ocfpi); - - TDate data74ter ( _tmov->get_date(MOV_DATA74TER) ); - TString codval ( _tmov->get (MOV_CODVALI) ); - long codcf = _tmov->get_long(MOV_CODCF); - real totdoc ( _tmov->get_real(MOV_TOTDOC) ); - real cambioi ( _tmov->get_real(MOV_CAMBIOI) ); - real corrlire ( _tmov->get_real(MOV_CORRLIRE) ); - real corrval ( _tmov->get_real(MOV_CORRVALUTA) ); - int annoiva = _tmov->get_int (MOV_ANNOIVA); - - _mov->setkey(1); - _mov->zero(); - _mov->put(MOV_NUMREG, _nuovareg); - - if (_mov->read() == NOERR) // Se non esiste la testata - { - _mov->put(MOV_DATA74TER, data74ter); - _mov->put(MOV_CODVALI, codval); - _mov->put(MOV_CODCF, codcf); - _mov->put(MOV_TOTDOC, totdoc); - _mov->put(MOV_CAMBIOI, cambioi); - _mov->put(MOV_CORRLIRE, corrlire); - _mov->put(MOV_CORRVALUTA, corrval); - _mov->put(MOV_ANNOIVA, annoiva); - _mov->rewrite(); - - scrivi_righeIVA(nreg); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%07ld", nreg); - TString sigla (format("%c", uselab)); - str = _record.overwrite(sigla,240); - str = _record.overwrite(chiave,241); - _tras_file.write_control_rec(str,256); - } -} - -bool TRic_tab::leggi_trasfer() -{ - _nultras = 0; - - _trasf = _tras_file.path(_dittaric); - _trasf << HEADER; - - _tras_file.open(_trasf); - - if (_tras_file.exist()) - { - if (_tras_file.read_control_rec()) - { - _nultras = _tras_file.nultras(); - _dataultras = _tras_file.dataultras(); - _sigle_file = _tras_file.sigle_file(); - _nrec_file = _tras_file.nrec_file(); - _uselab = _tras_file.ult_file(); - _key = _tras_file.key(); - _record = _tras_file.record(); - } - else - return error_box("Rilevati gravi errori negli archivi:procedura interrotta"); - } - else - return error_box("Al momento non presenti trasferimenti attivi sulla ditta selezionata"); - - return TRUE; -} - -bool TRic_tab::video() -{ - TConfig conf(CONFIG_DITTA); - - _std = conf.get("FlStTra"); - - if (!leggi_trasfer()) - return FALSE; - - TMask msk ("cg6600a"); - KEY tasto; - - ditta_ricevente(); - - msk.set(F_CODDITTA, _dittaric); - msk.set(F_RAGSOC, _ragsoc_dittar); - msk.set(F_NULTRAS, _nultras); - TString data1 = _dataultras.string(); - msk.set(F_DATAULTRAS, data1); - msk.set(F_STD, _std); - msk.set(F_USELAB, _uselab); - msk.set(F_STATO, _key); - - tasto = msk.run(); - - if (tasto != K_ENTER) - return FALSE; - - if (!prefix().exist(_dittaric)) - return error_box("Rilevati gravi errori negli archivi: procedura interrotta"); - - if (!controlli()) - return FALSE; - - return TRUE; -} - -void TRic_tab::setta_parametri_record(const TString& sigla,const TString& flag) -{ - TConfig conf (CONFIG_DITTA); - - conf.set("FlStTra", flag); - - leggi_record_controllo(); - _record.overwrite(sigla,240); - - const int size = 256; - - _tras_file.write_control_rec(_record, size); -} - -bool TRic_tab::controllo_pre_ricezione() -{ - TString flag; - - TString sigla = _sigle_file.mid(0,1); - - if (sigla == " ") - { - flag = "*"; - setta_parametri_record(sigla,flag); - fremove(_trasf); - return FALSE; - } - - if (sigla == "Z") - { - flag = "C"; - setta_parametri_record(sigla,flag); - return error_box("Aggiornamento tabelle terminato: proseguire con controllo movimenti"); - } - - if (sigla != "Z") - { - flag = "T"; - setta_parametri_record(sigla,flag); - return TRUE; - } - - return TRUE; -} - -void TRic_tab::ditta_ricevente() -{ - TLocalisamfile nditte (LF_NDITTE); - - nditte.setkey(1); - nditte.zero(); - nditte.put(NDT_CODDITTA, _dittaric); - if (nditte.read() == NOERR) - _ragsoc_dittar = nditte.get(NDT_RAGSOC); -} - -bool TRic_tab::controlli() -{ - if (_scelta == 'T') - { - if (_std == "C") - return error_box("Aggiornamento tabelle gia' effettuato: richiamare Controllo movimenti"); - - if (_std == "M") - return error_box("Aggiornamento tabelle gia' effettuato: richiamare Trasferimento movimenti"); - - if (_std == "*") - { - warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); - _tras_file.remove_all(); - setta_parametri_record(" "," "); - return FALSE; - } - - if (_std != "" && _std != "T") - return error_box("Rilevati gravi errori negli archivi: procedura interrotta"); - - if ( (_std == "" || _std == "T") && (_uselab == "Z" || _uselab == "U") ) - return error_box("Rilevati gravi errori negli archivi: procedura interrotta"); - } - else - if (_scelta == 'M') - { - if (_std == "" || _std == "T") - return error_box("Aggiornamento tabelle NON EFFETTUATO: richiamare il programma relativo"); - - if (_std == "C") - return error_box("Controllo movimenti non effettuato o rilevati errori gravi"); - - if (_std == "M" && (_uselab != "Z" && _uselab != "U" && _uselab != "B") ) - return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); - - if (_std != "*" && _std != "M") - error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); - - if (_std == "*") - { - warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); - _tras_file.remove_all(); - setta_parametri_record(" "," "); - return FALSE; - } - } - - return TRUE; -} - -void TRic_tab::apri_file_temp() -{ - if (_scelta == 'T') - { - TString80 tmpcaus = "%"; - tmpcaus << get_firm_dir(); - tmpcaus << "\\" << TEMP_CAUS; - _tmpcaus = tmpcaus.mid(1); - _tmpcaus << ".dbf"; - if(fexist(_tmpcaus)) - _tcaus = new TIsamtempfile(LF_CAUSALI, tmpcaus, 0); - TString80 tmprcaus = "%"; - tmprcaus << get_firm_dir(); - tmprcaus << "\\" << TEMP_RCAUS; - _tmprcaus = tmprcaus.mid(1); - _tmprcaus << ".dbf"; - if (fexist(_tmprcaus)) - _trcaus = new TIsamtempfile(LF_RCAUSALI, tmprcaus, 0); - TString80 tmpclifo = "%"; - tmpclifo << get_firm_dir(); - tmpclifo << "\\" << TEMP_CLIFO; - _tmpclifo = tmpclifo.mid(1); - _tmpclifo << ".dbf"; - if (fexist(_tmpclifo)) - _tclifo = new TIsamtempfile(LF_CLIFO, tmpclifo, 0); - TString80 tmppcon = "%"; - tmppcon << get_firm_dir(); - tmppcon << "\\" << TEMP_PCON; - _tmpcon = tmppcon.mid(1); - _tmpcon << ".dbf"; - if (fexist(_tmpcon)) - _tpcon = new TIsamtempfile(LF_PCON, tmppcon, 0); - } - else - { - TString80 tmpmov = "%"; - tmpmov << get_firm_dir(); - tmpmov << "\\" << TEMP_MOV; - _tmpmov = tmpmov.mid(1); - _tmpmov << ".dbf"; - if (fexist(_tmpmov)) - _tmov = new TIsamtempfile(LF_MOV, tmpmov, 0); - TString80 tmprmov = "%"; - tmprmov << get_firm_dir(); - tmprmov << "\\" << TEMP_RMOV; - _tmprmov = tmprmov.mid(1); - _tmprmov << ".dbf"; - if (fexist(_tmprmov)) - _trmov = new TIsamtempfile(LF_RMOV, tmprmov, 0); - TString80 tmpriva = "%"; - tmpriva << get_firm_dir(); - tmpriva << "\\" << TEMP_RMOVIVA; - _tmpriva = tmpriva.mid(1); - _tmpriva << ".dbf"; - if (fexist(_tmpriva)) - _triva = new TIsamtempfile(LF_RMOVIVA, tmpriva, 0); - TString80 tmpoccas = "%"; - tmpoccas << get_firm_dir(); - tmpoccas << "\\" << TEMP_OCC; - _tmpoccas = tmpoccas.mid(1); - _tmpoccas << ".dbf"; - if (fexist(_tmpoccas)) - _toccas = new TIsamtempfile(LF_OCCAS, tmpoccas, 0); - } -} - -void TRic_tab::chiudi_file_temp() -{ - if (_scelta == 'T') - { - if (fexist(_tmpcaus)) - delete _tcaus; - if (fexist(_tmprcaus)) - delete _trcaus; - if (fexist(_tmpclifo)) - delete _tclifo; - if (fexist(_tmpcon)) - delete _tpcon; - } - else - { - if (fexist(_tmpmov)) - delete _tmov; - if (fexist(_tmprmov)) - delete _trmov; - if (fexist(_tmpriva)) - delete _triva; - if (fexist(_tmpoccas)) - delete _toccas; - } -} - -bool TRic_tab::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return main_loop(); - return FALSE; -} - -int cg6600 (int argc, char* argv[]) -{ - TRic_tab main_app(*argv[2]); - main_app.run(argc, argv,main_app._titolo); - return TRUE; -} +// Ricezione dati da sistema + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cglib04.h" +#include "cglib.h" +#include "cg2103.h" + +#include "cg6600.h" + +class TRic_tab : public TApplication +{ + + TTable* _tab_tra; + TLocalisamfile* _caus,*_rcaus,*_clifo,*_pcon,*_mov,*_rmov,*_rmoviva,*_saldi,*_occas; + TIsamtempfile* _tcaus,*_trcaus,*_tclifo,*_tpcon,*_tmov,*_trmov,*_triva,*_toccas; + TTable* _reg; + TTransfer_file _tras_file; + TArray _aggiorna; + char _scelta; + TSaldo_agg _sld; + TProgind* _prog; + + int _numinv,_nultras,_annoes,_g,_c; + TString _trasf,_ragsoc_dittar,_sigle_file,_std,_key,_nomeid,_dittainv; + long _dittaric,_numrec,_nreg,_s,_ndoc,_npiva,_nupiva; + TDate _dataultras,_datareg,_dreg,_ddoc; + TString _uselab,_record,_nrec_file,_creg,_ccau,_tdoc,_cod_com; + bool _prima_volta,_nprot_att,_nprot_pas; + long _protiva,_uprotiva,_nprotiva,_nuprotiva,_numreg,_numreg_p,_numreg_piva,_nuovareg; + char _sez; + real _importo,_totdoc; + TString _tmpcaus,_tmprcaus,_tmpclifo,_tmpcon,_tmpmov,_tmprmov,_tmpriva,_tmpoccas; + +public: + TString _titolo; + + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + bool main_loop(); + bool video(); + bool leggi_trasfer(); + bool controlli(); + void ditta_ricevente(); + bool controllo_pre_ricezione(); + void leggi_record_controllo(); + void apri_file_temp(); + void chiudi_file_temp(); + + void setta_parametri_record(const TString& sigla,const TString& flag); + + void trasferimento(); + + void ricevi_causali(TString& key, char sigla); + void cancella_righe_causali(TString& codcaus); + void scrivi_righe_causali(TString& codcaus, char sigla); + void ricevi_clifo(TString& key, char sigla); + void ricevi_pcon(TString& key, char sigla); + void conto(TRectype& pcon,char flag,bool esiste); + void sottoconto(TRectype& pcon,char flag,bool esiste); + void scrivi_pcon(TRectype& pcon,bool esiste); + + void ricevi_movPN(TString& key, char sigla); + void scrivi_righePN(long numreg); + void ricevi_movIVA(TString& key, char sigla); + void scrivi_righeIVA(long numreg); + long esiste_numreg(long nreg); + void num_protocollo(); + long controlli_primanota(); + long ulnumprot_reg(int anno,TString& codreg); + long ultima_registrazione(); + void aggiorna_reg(int anno,TString& codreg,long ulnum); + char ricerca_causale(TString& field); + + bool occasionali(const TString& ocfpi); + + TRic_tab(char ric_tab_mov); +}; + +HIDDEN TRic_tab& app() { return (TRic_tab &) main_app(); } + +TRic_tab::TRic_tab(char ric_tab_mov) : _scelta(toupper(ric_tab_mov)) +{ + if (_scelta == 'T') + _titolo = "Ricezione tabelle"; + + if (_scelta == 'M') + _titolo = "Ricezione movimenti"; +} + +bool TRic_tab::create() +{ + TApplication::create(); + + _tab_tra = new TTable ("%TRA"); + + _reg = new TTable ("REG"); + + if (_scelta == 'T') + { + _caus = new TLocalisamfile (LF_CAUSALI); + _rcaus = new TLocalisamfile (LF_RCAUSALI); + _clifo = new TLocalisamfile (LF_CLIFO); + _pcon = new TLocalisamfile (LF_PCON); + } + else + { + _mov = new TLocalisamfile (LF_MOV); + _rmov = new TLocalisamfile (LF_RMOV); + _rmoviva = new TLocalisamfile (LF_RMOVIVA); + _saldi = new TLocalisamfile (LF_SALDI); + _occas = new TLocalisamfile (LF_OCCAS); + } + + _numrec = 1; + _prima_volta = TRUE; + _aggiorna.destroy(); + _numreg_p = 0; + _numreg_piva = 0; + _nreg = 0; + _sld.reset(); + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool TRic_tab::destroy() +{ + delete _tab_tra; + delete _reg; + + if (_scelta == 'T') + { + delete _caus; + delete _rcaus; + delete _clifo; + delete _pcon; + } + else + { + delete _mov; + delete _rmov; + delete _rmoviva; + delete _saldi; + delete _occas; + } + + return TApplication::destroy(); +} + +void TRic_tab::leggi_record_controllo() +{ + _tras_file.read_control_rec(); + _record = _tras_file.record(); +} + +bool TRic_tab::main_loop() +{ + int posiz; + + _dittaric = get_firm(); + + if (_scelta == 'T') + { + if (video()) + { + if (_std == "") + if (!controllo_pre_ricezione()) + return FALSE; + + apri_file_temp(); + + trasferimento(); + posiz = _tras_file.num('Z'); //Ritorna la posizione della sigla all'interno dell'indice + + if (posiz >= 0) + { + setta_parametri_record(" ","C"); + message_box("Aggiornamento tabelle terminato: proseguire con controllo movimenti"); + leggi_record_controllo(); + TString str (_record.overwrite(" ",241)); + _tras_file.write_control_rec(str,256); + } + else + { + chiudi_file_temp(); + message_box("Trasferimento interamente completato: proseguire per cancellare il file"); + setta_parametri_record(" ","*"); + _tras_file.remove_all(); + setta_parametri_record(" "," "); + } + } + } + else + if (_scelta == 'M') + { + if (video()) + { + apri_file_temp(); + + trasferimento(); + chiudi_file_temp(); + message_box("Trasferimento interamente completato: proseguire per cancellare il file"); + setta_parametri_record(" ","*"); + _tras_file.remove_all(); + setta_parametri_record(" "," "); + } + } + + return FALSE; +} + +void TRic_tab::trasferimento() +{ + char uselab; + TString key = ""; + int posiz,i; + int last_tab; + char sigla; + TString message; + + uselab = (_tras_file.ult_file())[0]; + posiz = _tras_file.num(uselab); //Ritorna la posizione della sigla all'interno dell'indice + key = _tras_file.key(); + key.trim(); + + if (_scelta == 'T') + last_tab = _tras_file.last_tab(); + else + if (_scelta == 'M') + last_tab = _tras_file.last_mov(); + + for (i = posiz; i < last_tab;i++) + { + long nrec = ((_tras_file.nrec(i))+1); + sigla = _tras_file.name(i)[0]; + long cicli; + + switch (sigla) + { + case 'W': + message = "Ricezione tabella causali in corso... Prego attendere."; + cicli = _tcaus->items(); + break; + case 'A': + message = "Ricezione anagrafica Clienti / Fornitori in corso... Prego attendere."; + cicli = _tclifo->items(); + break; + case 'P': + message = "Ricezione anagrafica Piano dei Conti in corso... Prego attendere."; + cicli = _tpcon->items(); + break; + case 'Z': + message = "Ricezione Movimenti di primanota in corso... Prego attendere."; + cicli = _tmov->items(); + break; + case 'U': + message = "Ricezione Movimenti iva in corso... Prego attendere."; + cicli = _tmov->items(); + break; + default: break; + } + _prog = new TProgind(cicli,message,FALSE); + + if (_scelta == 'T') + { + if (sigla == 'W') + ricevi_causali(key,sigla); + if (sigla == 'A') + ricevi_clifo(key,sigla); + if (sigla == 'P') + ricevi_pcon(key,sigla); + } + else + if (_scelta == 'M') + { + if (sigla == 'Z') + { + ricevi_movPN(key,sigla); + _sld.registra(); + } + else + if (sigla == 'U') + ricevi_movIVA(key,sigla); + } + delete _prog; + key = ""; //Altrimenti in caso di ripartenza mi ripristina sempre la situazione + } +} + +void TRic_tab::ricevi_causali(TString& key, char uselab) +{ + TString str; + + char flag = _tras_file.flg_agg(uselab); + + _tcaus->setkey(1); + + if (key.empty()) + _tcaus->first(); + else + { + TString causale (key.mid(0,3)); + _tcaus->zero(); + _tcaus->put(CAU_CODCAUS, causale); + _tcaus->read(); + } + + for(; !_tcaus->eof(); _tcaus->next()) + { + _prog->addstatus(1); + + TString codcaus = _tcaus->get(CAU_CODCAUS); + + _caus->curr() = _tcaus->curr(); + + if (_caus->read() == NOERR) // Esiste la testata + { + if (flag == 'N') + { + leggi_record_controllo(); + TString chiave; + chiave.format("%3s",(const char*) codcaus); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + continue; + } + else + if (flag == 'D') + { + TString descr = _tcaus->get(CAU_DESCR); + + _caus->put(CAU_DESCR, descr); + _caus->rewrite(); + } + else + if (flag == 'T') + { + scrivi_righe_causali(codcaus,uselab); + + _caus->zero(); + _caus->curr() = _tcaus->curr(); + _caus->rewrite(); + } + } + else + { + scrivi_righe_causali(codcaus,uselab); + + _caus->zero(); + _caus->curr() = _tcaus->curr(); + _caus->write(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%3s",(const char*) codcaus); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + } +} + +void TRic_tab::cancella_righe_causali(TString& codcaus) +{ + _rcaus->setkey(1); + _rcaus->zero(); + _rcaus->put(RCA_CODCAUS, codcaus); + TRectype rcau (LF_RCAUSALI); + rcau = _rcaus->curr(); + for (_rcaus->read(); !_rcaus->eof(); _rcaus->next()) + { + if (_rcaus->curr() > rcau) break; + + _rcaus->remove(); + } +} + +void TRic_tab::scrivi_righe_causali(TString& codcaus, char uselab) +{ + TString str; + + cancella_righe_causali(codcaus); + + _trcaus->setkey(1); + _trcaus->zero(); + _trcaus->put(RCA_CODCAUS, codcaus); + TRectype rcau (LF_RCAUSALI); + rcau = _trcaus->curr(); + for (_trcaus->read(); !_trcaus->eof(); _trcaus->next()) + { + if (_trcaus->curr() > rcau) break; + + _rcaus->curr() = _trcaus->curr(); + _rcaus->write(); + + leggi_record_controllo(); + TString chiave; + chiave.format("%3s",(const char*) codcaus); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + } +} + +void TRic_tab::ricevi_clifo(TString& key, char uselab) +{ + TString str; + + char flag = _tras_file.flg_agg(uselab); + + _tclifo->setkey(1); + + if (key.empty()) + _tclifo->first(); + else + { + char tipo = (key.mid(0,1))[0]; + long codice = atol(key.mid(1,6)); + _tclifo->zero(); + _tclifo->put(CLI_TIPOCF, tipo); + _tclifo->put(CLI_CODCF, codice); + _tclifo->read(); + } + + for(; !_tclifo->eof(); _tclifo->next()) + { + _prog->addstatus(1); + + char tipocf = _tclifo->get_char(CLI_TIPOCF); + long codcf = _tclifo->get_long(CLI_CODCF); + + _clifo->curr() = _tclifo->curr(); + + if (_clifo->read() == NOERR) // Esiste gia' il cliente + { + if (flag == 'N') + { + leggi_record_controllo(); + TString chiave; + chiave.format("%c%06ld", tipocf,codcf); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + continue; + } + else + if (flag == 'D') + { + TString ragsoc = _tclifo->get(CLI_RAGSOC); + TString ind = _tclifo->get(CLI_INDCF); + TString civ = _tclifo->get(CLI_CIVCF); + TString com = _tclifo->get(CLI_COMCF); + TString cap = _tclifo->get(CLI_CAPCF); + TString cofi = _tclifo->get(CLI_COFI); + TString paiv = _tclifo->get(CLI_PAIV); + TString ptel = _tclifo->get(CLI_PTEL); + TString tel = _tclifo->get(CLI_TEL); + + _clifo->put(CLI_RAGSOC, ragsoc); + _clifo->put(CLI_INDCF, ind); + _clifo->put(CLI_CIVCF, civ); + _clifo->put(CLI_COMCF, com); + _clifo->put(CLI_CAPCF, cap); + _clifo->put(CLI_COFI, cofi); + _clifo->put(CLI_PAIV, paiv); + _clifo->put(CLI_PTEL, ptel); + _clifo->put(CLI_TEL, tel); + + _clifo->rewrite(); + } + else + if (flag == 'T') + { + _clifo->zero(); + _clifo->curr() = _tclifo->curr(); + _clifo->rewrite(); + } + } + else + { + _clifo->zero(); + _clifo->curr() = _tclifo->curr(); + _clifo->write(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%c%06ld", tipocf, codcf); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + } +} + +void TRic_tab::ricevi_pcon(TString& key, char uselab) +{ + TString str; + bool esiste; + TRectype pcon (LF_PCON); + + char flag = _tras_file.flg_agg(uselab); + char f_IV = _tras_file.flg_agg_IV(uselab); + + _tpcon->setkey(1); + + if (key.empty()) + _tpcon->first(); + else + { + int gruppo = atoi(key.mid(0,3)); + int conto = atoi(key.mid(3,3)); + long sottoc = atol(key.mid(6,6)); + + _tpcon->zero(); + _tpcon->put(PCN_GRUPPO, gruppo); + if (conto != 0) + _tpcon->put(PCN_CONTO, conto); + if (sottoc != 0) + _tpcon->put(PCN_SOTTOCONTO, sottoc); + _tpcon->read(); + } + + for(; !_tpcon->eof(); _tpcon->next()) + { + _prog->addstatus(1); + + int g = _tpcon->get_int (PCN_GRUPPO); + int c = _tpcon->get_int (PCN_CONTO); + long s = _tpcon->get_long(PCN_SOTTOCONTO); + + _pcon->curr() = _tpcon->curr(); + + if (_pcon->read() == NOERR) // Esiste gia' sul Piano dei Conti + { + esiste = TRUE; + + if (flag == 'N') + { + leggi_record_controllo(); + TString chiave; + chiave.format("%3d%3d%6ld", g, c, s); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + continue; + } + else + if (flag == 'D') + { + TString descr = _tpcon->get(PCN_DESCR); + + _pcon->put(PCN_DESCR, descr); + _pcon->rewrite(); + } + else + if (flag == 'T') + scrivi_pcon(pcon,esiste); + } + else // Non esiste sull'archivio effettivo + { + esiste = FALSE; + scrivi_pcon(pcon,esiste); + } + + TRecnotype rec; + if (esiste) + rec = _pcon->recno(); + + if (f_IV == 'T') + { + if (g != 0 && c == 0) + conto(pcon,flag,esiste); + if (g != 0 && c != 0 && s != 0) + sottoconto(pcon,flag,esiste); + } + + if (esiste) + _pcon->readat(rec); + + if ( (flag == 'T' && esiste) || !esiste) + _pcon->curr() = pcon; + + if (esiste) + _pcon->rewrite(); + else + _pcon->write(); + + leggi_record_controllo(); + TString chiave; + chiave.format("%3d%3d%6ld", g, c, s); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + } +} + +void TRic_tab::scrivi_pcon(TRectype& pcon,bool esiste) +{ + int g = _tpcon->get_int (PCN_GRUPPO); + int c = _tpcon->get_int (PCN_CONTO); + long s = _tpcon->get_long(PCN_SOTTOCONTO); + TString descr = _tpcon->get (PCN_DESCR); + int indbil = _tpcon->get_int (PCN_INDBIL); + char tmcf = _tpcon->get_char(PCN_TMCF); + bool stsottbil = _tpcon->get_bool(PCN_STSOTTBIL); + bool compens = _tpcon->get_bool(PCN_COMPENS); + int tipospric = _tpcon->get_int (PCN_TIPOSPRIC); + TString codcbl = _tpcon->get (PCN_CODCBL); + bool stsottab = _tpcon->get_bool(PCN_STSOTTAB); + char sezsaldi = _tpcon->get_char(PCN_SEZSALDI); + bool sospeso = _tpcon->get_bool(PCN_SOSPESO); + int ricser = _tpcon->get_int (PCN_RICSER); + + pcon.zero(); + pcon.put(PCN_GRUPPO, g); + if (c != 0) + pcon.put(PCN_CONTO, c); + if (s != 0) + pcon.put(PCN_SOTTOCONTO, s); + pcon.put(PCN_DESCR, descr); + pcon.put(PCN_INDBIL, indbil); + pcon.put(PCN_TMCF, tmcf); + pcon.put(PCN_STSOTTBIL, stsottbil); + pcon.put(PCN_COMPENS, compens); + pcon.put(PCN_TIPOSPRIC, tipospric); + pcon.put(PCN_CODCBL, codcbl); + pcon.put(PCN_STSOTTAB, stsottab); + pcon.put(PCN_SEZSALDI, sezsaldi); + pcon.put(PCN_SOSPESO, sospeso); + pcon.put(PCN_RICSER, ricser); +} + +void TRic_tab::conto(TRectype& pcon,char flag,bool esiste) +{ + int g = _tpcon->get_int(PCN_GRUPPO); + int c = _tpcon->get_int(PCN_CONTO); + + TString sez = _tpcon->get (PCN_SEZIVD); + TString let = _tpcon->get (PCN_LETTIVD); + TString numr = _tpcon->get (PCN_NUMRIVD); + int num = _tpcon->get_int(PCN_NUMIVD); + + if (sez.not_empty()) + { + if (!esiste || (esiste && flag == 'T') ) + { + pcon.put (PCN_SEZIVD, sez); + pcon.put (PCN_LETTIVD, let); + pcon.put (PCN_NUMRIVD, numr); + pcon.put (PCN_NUMIVD, num); + pcon.zero(PCN_SEZIVDOPP); + pcon.zero(PCN_LETTIVDOPP); + pcon.zero(PCN_NUMRIVDOPP); + pcon.zero(PCN_NUMIVDOPP); + + _tras_file.annulla_classi(g,c,TRUE); + } + } + else + { + if (esiste && flag == 'T') + { + pcon.put (PCN_SEZIVD, sez); + pcon.put (PCN_LETTIVD, let); + pcon.put (PCN_NUMRIVD, numr); + pcon.put (PCN_NUMIVD, num); + pcon.zero(PCN_SEZIVDOPP); + pcon.zero(PCN_LETTIVDOPP); + pcon.zero(PCN_NUMRIVDOPP); + pcon.zero(PCN_NUMIVDOPP); + + _tras_file.annulla_classi(g,c,TRUE); + } + } +} + +void TRic_tab::sottoconto(TRectype& pcon,char flag,bool esiste) +{ + int g = _tpcon->get_int(PCN_GRUPPO); + int c = _tpcon->get_int(PCN_CONTO); + + TString sez = _tpcon->get (PCN_SEZIVD); + TString let = _tpcon->get (PCN_LETTIVD); + TString numr = _tpcon->get (PCN_NUMRIVD); + int num = _tpcon->get_int(PCN_NUMIVD); + TString sezop = _tpcon->get (PCN_SEZIVDOPP); + TString letop = _tpcon->get (PCN_LETTIVDOPP); + TString numrop = _tpcon->get (PCN_NUMRIVDOPP); + int numop = _tpcon->get_int(PCN_NUMIVDOPP); + + if (sez.not_empty()) + { + if (!esiste || (esiste && flag == 'T') ) + { + pcon.put(PCN_SEZIVD, sez); + pcon.put(PCN_LETTIVD, let); + pcon.put(PCN_NUMRIVD, numr); + pcon.put(PCN_NUMIVD, num); + pcon.put(PCN_SEZIVDOPP, sezop); + pcon.put(PCN_LETTIVDOPP, letop); + pcon.put(PCN_NUMRIVDOPP, numrop); + pcon.put(PCN_NUMIVDOPP, numop); + + _tras_file.annulla_classi(g,c,FALSE); + } + } + else + { + if (sezop.not_empty()) + { + if (!esiste || (esiste && flag == 'T') ) + { + pcon.put(PCN_SEZIVDOPP, sezop); + pcon.put(PCN_LETTIVDOPP, letop); + pcon.put(PCN_NUMRIVDOPP, numrop); + pcon.put(PCN_NUMIVDOPP, numop); + } + } + else + { + pcon.zero(PCN_SEZIVDOPP); + pcon.zero(PCN_LETTIVDOPP); + pcon.zero(PCN_NUMRIVDOPP); + pcon.zero(PCN_NUMIVDOPP); + } + } +} + +long TRic_tab::esiste_numreg(long numulreg) +{ + TLocalisamfile mov (LF_MOV); + + do + { + numulreg++; + + mov.setkey(1); + mov.zero(); + mov.put(MOV_NUMREG, numulreg); + } + while (mov.read() == NOERR); + + return numulreg; +} + +long TRic_tab::ultima_registrazione() +{ + if (_nreg == 0) + { + TLocalisamfile mov (LF_MOV); + + mov.last(); + return (mov.get_long(MOV_NUMREG)); + } + else + return _nreg; +} + +void TRic_tab::num_protocollo() +{ + _protiva = _tmov->get_long(MOV_PROTIVA); + _uprotiva = _tmov->get_long(MOV_UPROTIVA); + + if (_protiva == 0) + _uprotiva = 0; + + _nprotiva = _protiva; + _nuprotiva = _uprotiva; +} + +long TRic_tab::ulnumprot_reg(int anno,TString& cr) +{ + TRegistro rg (cr, anno); + + return rg.protocol(); +} + +void TRic_tab::aggiorna_reg(int anno,TString& codreg,long ulnum) +{ + TTable reg ("REG"); + TString16 dep; + + if (real::is_natural(codreg)) + dep.format("%04d%03s", anno,(const char*) codreg); + else + dep.format("%04d%-3s", anno,(const char*) codreg); + + reg.zero(); + reg.put("CODTAB", (const char*) dep); + if (reg.read() == NOERR) + { + if (_nprotiva > ulnum ) + reg.put("I5", _nprotiva); + + if (_nuprotiva > ulnum ) + reg.put("I5", _nuprotiva); + + reg.rewrite(); + } +} + +long TRic_tab::controlli_primanota() +{ + TTable tpd ("%TPD"); + bool corrisp; + TDate datareg; + int anno; + long ulnum = 0; + TString16 tmp; + TString tipodoc,codreg; + + char tipocf = _tmov->get_char(MOV_TIPO); + int tiporeg; + if (tipocf == 'C') + tiporeg = 1; + else + if (tipocf == 'F') + tiporeg = 2; + + codreg = _tmov->get(MOV_REG); + tipodoc = _tmov->get(MOV_TIPODOC); + + datareg = _tmov->get_date(MOV_DATAREG); + anno = datareg.year(); + + tpd.zero(); + tpd.put("CODTAB", (const char*) tipodoc); + if (tpd.read() == NOERR) + corrisp = tpd.get_bool("B0"); + + if (codreg.not_empty() && !corrisp) + { + if ( ( (tiporeg == 1 && (_nprot_att || _protiva == 0) ) ) + || ( (tiporeg == 2 && (_nprot_pas || _protiva == 0) ) ) ) + { + ulnum = ulnumprot_reg(anno,codreg); + _nprotiva = ulnum + 1; + if (_uprotiva != 0) + _nuprotiva = (_nprotiva - ulnum) + _uprotiva; + } + } + + return ulnum; +} + +char TRic_tab::ricerca_causale(TString& causale) +{ + TLocalisamfile cau (LF_CAUSALI); + char movap = ' '; + + if (real::is_natural(causale)) + causale.format("%03s", (const char*) causale); + else + causale.format("%-3s", (const char*) causale); + + cau.setkey(1); + cau.zero(); + cau.put("CODCAUS", causale); + if (cau.read() == NOERR) + movap = cau.get_char("MOVAP"); + + return movap; +} + +void TRic_tab::scrivi_righePN(long numreg) +{ + TString str; + + _trmov->setkey(1); + _trmov->zero(); + _trmov->put(RMV_NUMREG, numreg); + TRectype rmov (LF_RMOV); + rmov = _trmov->curr(); + for (_trmov->read(); !_trmov->eof(); _trmov->next()) + { + if (_trmov->curr() > rmov) break; + + int g = _trmov->get_int (RMV_GRUPPO); + int c = _trmov->get_int (RMV_CONTO); + long s = _trmov->get_long(RMV_SOTTOCONTO); + char sez = _trmov->get_char(RMV_SEZIONE); + real imp ( _trmov->get_real(RMV_IMPORTO) ); + + _trmov->put(RMV_NUMREG, _nreg); + _rmov->curr() = _trmov->curr(); + _rmov->write(); + + _sld.aggiorna(g,c,s,imp,sez); + } +} + +void TRic_tab::ricevi_movPN(TString& key, char uselab) +{ + TString str; + long numulreg; + TRectype recmov (LF_MOV); + + char flag = _tras_file.flg_agg(uselab); + + _nprot_att = _tras_file.numprot_att(); + _nprot_pas = _tras_file.numprot_pas(); + + _tmov->setkey(1); + + if (key.empty()) + _tmov->first(); + else + { + long numreg = atol(key.mid(0,7)); + _tmov->zero(); + _tmov->put(MOV_NUMREG, numreg); + _tmov->read(); + } + + for(; !_tmov->eof(); _tmov->next()) + { + _prog->addstatus(1); + + long nreg = _tmov->get_long(MOV_NUMREG); + long nuova_reg = _tmov->get_long("TNUMREG" ); + + if (nuova_reg == 0) + { + numulreg = ultima_registrazione(); // reperisco il numero ultima registrazione + _nreg = esiste_numreg(numulreg); + } + else + _nreg = nuova_reg; + + TRecnotype rec = _tmov->recno(); // Salvo il nuovo numero di + _tmov->put("TNUMREG", _nreg); // registrazione sul file di lavoro + _tmov->rewrite(); + _tmov->readat(rec); + + int annoes = _tmov->get_int(MOV_ANNOES); + + recmov = _tmov->curr(); + + _mov->setkey(1); + _mov->zero(); + _mov->put(MOV_NUMREG, _nreg); + + if (_mov->read() != NOERR) // Se non esiste la testata + { + num_protocollo(); // Riattribuzione numero di protocollo + long ulnum = controlli_primanota(); + + recmov.put(MOV_NUMREG, _nreg); + recmov.put(MOV_PROTIVA, _nprotiva); + recmov.put(MOV_UPROTIVA, _nuprotiva); + + _mov->zero(); + _mov->curr() = recmov; + _mov->write(); + + TString codreg (_tmov->get (MOV_REG)); + TString codcaus (_tmov->get (MOV_CODCAUS)); + TDate datareg (_tmov->get_date(MOV_DATAREG)); + int anno = datareg.year(); + + aggiorna_reg(anno,codreg,ulnum); // Aggiorna il registro + + _sld.set_anno_es(annoes); + _sld.set_movprovv(FALSE); + _sld.set_num_ulmov(_nreg); + _sld.set_data_ulmov(datareg); + char movap = ricerca_causale(codcaus); + if (movap == 'A') + _sld.set_movap(TRUE); + + scrivi_righePN(nreg); + + _sld.registra(); + _sld.reset(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%07ld", nreg); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + } +} + +bool TRic_tab::occasionali(const TString& ocfpi) +{ + TString chiave; + long prog = 1; + bool esiste = FALSE; + + TString nocfpi = _tmov->get("TOCFP"); + nocfpi.trim(); + + if (nocfpi.empty()) + { + _occas->setkey(1); + _occas->zero(); + _occas->put("CFPI", "RIC9999999999999"); + _occas->read(); + _occas->prev(); + TString cfpi = _occas->get(OCC_CFPI); + if (cfpi.mid(0,3) == "RIC") + { + prog = atol(cfpi.mid(3,13)); + prog++; + chiave = format("%3s%13ld", (const char*) "RIC", prog); + } + else + chiave = format("%3s%13ld", (const char*) "RIC", prog); + + esiste = FALSE; + } + else + { + _occas->setkey(1); + _occas->zero(); + _occas->put("CFPI", nocfpi); + _occas->read(); + + esiste = TRUE; + } + + _toccas->setkey(1); + _toccas->zero(); + _toccas->put(OCC_CFPI, ocfpi); + _toccas->read(); + + _occas->curr() = _toccas->curr(); + + if (esiste) + _occas->rewrite(); + else + _occas->write(); + + return TRUE; +} + +void TRic_tab::scrivi_righeIVA(long numreg) +{ + TString str; + + _triva->setkey(1); + _triva->zero(); + _triva->put(RMI_NUMREG, numreg); + TRectype riva (LF_RMOVIVA); + riva = _triva->curr(); + for (_triva->read(); !_triva->eof(); _triva->next()) + { + if (_triva->curr() > riva) break; + + _triva->put(RMI_NUMREG, _nuovareg); + _rmoviva->curr() = _triva->curr(); + _rmoviva->write(); + } +} + +void TRic_tab::ricevi_movIVA(TString& key, char uselab) +{ + TString str; + TRectype recmov (LF_MOV); + + char flag = _tras_file.flg_agg(uselab); + + _tmov->setkey(1); + + if (key.empty()) + _tmov->first(); + else + { + long numreg = atol(key.mid(0,7)); + _tmov->zero(); + _tmov->put(MOV_NUMREG, numreg); + _tmov->read(); + } + + for(; !_tmov->eof(); _tmov->next()) + { + _prog->addstatus(1); + + long nreg = _tmov->get_long(MOV_NUMREG); + + TString codreg = _tmov->get(MOV_REG); + TString codcau = _tmov->get(MOV_CODCAUS); + + if (codreg.empty() || codcau.empty()) continue; + + _nuovareg = _tmov->get_long("TNUMREG"); + TString ocfpi = _tmov->get(MOV_OCFPI); + + if (ocfpi.not_empty()) + occasionali(ocfpi); + + TDate data74ter ( _tmov->get_date(MOV_DATA74TER) ); + TString codval ( _tmov->get (MOV_CODVALI) ); + long codcf = _tmov->get_long(MOV_CODCF); + real totdoc ( _tmov->get_real(MOV_TOTDOC) ); + real cambioi ( _tmov->get_real(MOV_CAMBIOI) ); + real corrlire ( _tmov->get_real(MOV_CORRLIRE) ); + real corrval ( _tmov->get_real(MOV_CORRVALUTA) ); + int annoiva = _tmov->get_int (MOV_ANNOIVA); + + _mov->setkey(1); + _mov->zero(); + _mov->put(MOV_NUMREG, _nuovareg); + + if (_mov->read() == NOERR) // Se non esiste la testata + { + _mov->put(MOV_DATA74TER, data74ter); + _mov->put(MOV_CODVALI, codval); + _mov->put(MOV_CODCF, codcf); + _mov->put(MOV_TOTDOC, totdoc); + _mov->put(MOV_CAMBIOI, cambioi); + _mov->put(MOV_CORRLIRE, corrlire); + _mov->put(MOV_CORRVALUTA, corrval); + _mov->put(MOV_ANNOIVA, annoiva); + _mov->rewrite(); + + scrivi_righeIVA(nreg); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%07ld", nreg); + TString sigla (format("%c", uselab)); + str = _record.overwrite(sigla,240); + str = _record.overwrite(chiave,241); + _tras_file.write_control_rec(str,256); + } +} + +bool TRic_tab::leggi_trasfer() +{ + _nultras = 0; + + _trasf = _tras_file.path(_dittaric); + _trasf << HEADER; + + _tras_file.open(_trasf); + + if (_tras_file.exist()) + { + if (_tras_file.read_control_rec()) + { + _nultras = _tras_file.nultras(); + _dataultras = _tras_file.dataultras(); + _sigle_file = _tras_file.sigle_file(); + _nrec_file = _tras_file.nrec_file(); + _uselab = _tras_file.ult_file(); + _key = _tras_file.key(); + _record = _tras_file.record(); + } + else + return error_box("Rilevati gravi errori negli archivi:procedura interrotta"); + } + else + return error_box("Al momento non presenti trasferimenti attivi sulla ditta selezionata"); + + return TRUE; +} + +bool TRic_tab::video() +{ + TConfig conf(CONFIG_DITTA); + + _std = conf.get("FlStTra"); + + if (!leggi_trasfer()) + return FALSE; + + TMask msk ("cg6600a"); + KEY tasto; + + ditta_ricevente(); + + msk.set(F_CODDITTA, _dittaric); + msk.set(F_RAGSOC, _ragsoc_dittar); + msk.set(F_NULTRAS, _nultras); + TString data1 = _dataultras.string(); + msk.set(F_DATAULTRAS, data1); + msk.set(F_STD, _std); + msk.set(F_USELAB, _uselab); + msk.set(F_STATO, _key); + + tasto = msk.run(); + + if (tasto != K_ENTER) + return FALSE; + + if (!prefix().exist(_dittaric)) + return error_box("Rilevati gravi errori negli archivi: procedura interrotta"); + + if (!controlli()) + return FALSE; + + return TRUE; +} + +void TRic_tab::setta_parametri_record(const TString& sigla,const TString& flag) +{ + TConfig conf (CONFIG_DITTA); + + conf.set("FlStTra", flag); + + leggi_record_controllo(); + _record.overwrite(sigla,240); + + const int size = 256; + + _tras_file.write_control_rec(_record, size); +} + +bool TRic_tab::controllo_pre_ricezione() +{ + TString flag; + + TString sigla = _sigle_file.mid(0,1); + + if (sigla == " ") + { + flag = "*"; + setta_parametri_record(sigla,flag); + fremove(_trasf); + return FALSE; + } + + if (sigla == "Z") + { + flag = "C"; + setta_parametri_record(sigla,flag); + return error_box("Aggiornamento tabelle terminato: proseguire con controllo movimenti"); + } + + if (sigla != "Z") + { + flag = "T"; + setta_parametri_record(sigla,flag); + return TRUE; + } + + return TRUE; +} + +void TRic_tab::ditta_ricevente() +{ + TLocalisamfile nditte (LF_NDITTE); + + nditte.setkey(1); + nditte.zero(); + nditte.put(NDT_CODDITTA, _dittaric); + if (nditte.read() == NOERR) + _ragsoc_dittar = nditte.get(NDT_RAGSOC); +} + +bool TRic_tab::controlli() +{ + if (_scelta == 'T') + { + if (_std == "C") + return error_box("Aggiornamento tabelle gia' effettuato: richiamare Controllo movimenti"); + + if (_std == "M") + return error_box("Aggiornamento tabelle gia' effettuato: richiamare Trasferimento movimenti"); + + if (_std == "*") + { + warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); + _tras_file.remove_all(); + setta_parametri_record(" "," "); + return FALSE; + } + + if (_std != "" && _std != "T") + return error_box("Rilevati gravi errori negli archivi: procedura interrotta"); + + if ( (_std == "" || _std == "T") && (_uselab == "Z" || _uselab == "U") ) + return error_box("Rilevati gravi errori negli archivi: procedura interrotta"); + } + else + if (_scelta == 'M') + { + if (_std == "" || _std == "T") + return error_box("Aggiornamento tabelle NON EFFETTUATO: richiamare il programma relativo"); + + if (_std == "C") + return error_box("Controllo movimenti non effettuato o rilevati errori gravi"); + + if (_std == "M" && (_uselab != "Z" && _uselab != "U" && _uselab != "B") ) + return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); + + if (_std != "*" && _std != "M") + error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); + + if (_std == "*") + { + warning_box("Trasferimento interamente completato: proseguire per cancellare il file"); + _tras_file.remove_all(); + setta_parametri_record(" "," "); + return FALSE; + } + } + + return TRUE; +} + +void TRic_tab::apri_file_temp() +{ + if (_scelta == 'T') + { + TString80 tmpcaus = "%"; + tmpcaus << get_firm_dir(); + tmpcaus << "\\" << TEMP_CAUS; + _tmpcaus = tmpcaus.mid(1); + _tmpcaus << ".dbf"; + if(fexist(_tmpcaus)) + _tcaus = new TIsamtempfile(LF_CAUSALI, tmpcaus, 0); + TString80 tmprcaus = "%"; + tmprcaus << get_firm_dir(); + tmprcaus << "\\" << TEMP_RCAUS; + _tmprcaus = tmprcaus.mid(1); + _tmprcaus << ".dbf"; + if (fexist(_tmprcaus)) + _trcaus = new TIsamtempfile(LF_RCAUSALI, tmprcaus, 0); + TString80 tmpclifo = "%"; + tmpclifo << get_firm_dir(); + tmpclifo << "\\" << TEMP_CLIFO; + _tmpclifo = tmpclifo.mid(1); + _tmpclifo << ".dbf"; + if (fexist(_tmpclifo)) + _tclifo = new TIsamtempfile(LF_CLIFO, tmpclifo, 0); + TString80 tmppcon = "%"; + tmppcon << get_firm_dir(); + tmppcon << "\\" << TEMP_PCON; + _tmpcon = tmppcon.mid(1); + _tmpcon << ".dbf"; + if (fexist(_tmpcon)) + _tpcon = new TIsamtempfile(LF_PCON, tmppcon, 0); + } + else + { + TString80 tmpmov = "%"; + tmpmov << get_firm_dir(); + tmpmov << "\\" << TEMP_MOV; + _tmpmov = tmpmov.mid(1); + _tmpmov << ".dbf"; + if (fexist(_tmpmov)) + _tmov = new TIsamtempfile(LF_MOV, tmpmov, 0); + TString80 tmprmov = "%"; + tmprmov << get_firm_dir(); + tmprmov << "\\" << TEMP_RMOV; + _tmprmov = tmprmov.mid(1); + _tmprmov << ".dbf"; + if (fexist(_tmprmov)) + _trmov = new TIsamtempfile(LF_RMOV, tmprmov, 0); + TString80 tmpriva = "%"; + tmpriva << get_firm_dir(); + tmpriva << "\\" << TEMP_RMOVIVA; + _tmpriva = tmpriva.mid(1); + _tmpriva << ".dbf"; + if (fexist(_tmpriva)) + _triva = new TIsamtempfile(LF_RMOVIVA, tmpriva, 0); + TString80 tmpoccas = "%"; + tmpoccas << get_firm_dir(); + tmpoccas << "\\" << TEMP_OCC; + _tmpoccas = tmpoccas.mid(1); + _tmpoccas << ".dbf"; + if (fexist(_tmpoccas)) + _toccas = new TIsamtempfile(LF_OCCAS, tmpoccas, 0); + } +} + +void TRic_tab::chiudi_file_temp() +{ + if (_scelta == 'T') + { + if (fexist(_tmpcaus)) + delete _tcaus; + if (fexist(_tmprcaus)) + delete _trcaus; + if (fexist(_tmpclifo)) + delete _tclifo; + if (fexist(_tmpcon)) + delete _tpcon; + } + else + { + if (fexist(_tmpmov)) + delete _tmov; + if (fexist(_tmprmov)) + delete _trmov; + if (fexist(_tmpriva)) + delete _triva; + if (fexist(_tmpoccas)) + delete _toccas; + } +} + +bool TRic_tab::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return main_loop(); + return FALSE; +} + +int cg6600 (int argc, char* argv[]) +{ + TRic_tab main_app(*argv[2]); + main_app.run(argc, argv,main_app._titolo); + return TRUE; +} diff --git a/cg/cg6600a.uml b/cg/cg6600a.uml index 3c4bb7e6b..6a6f4b066 100755 --- a/cg/cg6600a.uml +++ b/cg/cg6600a.uml @@ -1,63 +1,63 @@ -#include "cg6600.h" - -PAGE "" -1 -1 70 11 - -NUMBER F_CODDITTA 5 -BEGIN - PROMPT 1 1 "Ditta ricevente " - USE LF_NDITTE KEY 1 - INPUT CODDITTA F_CODDITTA - OUTPUT F_RAGSOC RAGSOC - FLAGS "RDZ" - CHECKTYPE REQUIRED -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 1 2 "Ragione sociale " - FLAGS "D" -END - -NUMBER F_NULTRAS 3 -BEGIN - PROMPT 1 4 "Numero invio " - FLAGS "D" -END - -DATE F_DATAULTRAS -BEGIN - PROMPT 1 5 "Data limite trasferimento " - FLAGS "D" -END - -STRING F_STD 1 -BEGIN - PROMPT 1 6 "Stato del trasferimento " - FLAGS "DU" -END - -STRING F_USELAB 1 -BEGIN - PROMPT 31 6 "" - FLAGS "DU" -END - -STRING F_STATO 15 -BEGIN - PROMPT 35 6 "" - FLAGS "DU" -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -ENDMASK +#include "cg6600.h" + +PAGE "" -1 -1 70 11 + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 1 1 "Ditta ricevente " + USE LF_NDITTE KEY 1 + INPUT CODDITTA F_CODDITTA + OUTPUT F_RAGSOC RAGSOC + FLAGS "RDZ" + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 1 2 "Ragione sociale " + FLAGS "D" +END + +NUMBER F_NULTRAS 3 +BEGIN + PROMPT 1 4 "Numero invio " + FLAGS "D" +END + +DATE F_DATAULTRAS +BEGIN + PROMPT 1 5 "Data limite trasferimento " + FLAGS "D" +END + +STRING F_STD 1 +BEGIN + PROMPT 1 6 "Stato del trasferimento " + FLAGS "DU" +END + +STRING F_USELAB 1 +BEGIN + PROMPT 31 6 "" + FLAGS "DU" +END + +STRING F_STATO 15 +BEGIN + PROMPT 35 6 "" + FLAGS "DU" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/cg/cg6700a.uml b/cg/cg6700a.uml index f8636d0a1..0f29b2ae0 100755 --- a/cg/cg6700a.uml +++ b/cg/cg6700a.uml @@ -1,77 +1,77 @@ -#include "cg6700.h" - -PAGE "" -1 -1 78 17 - -NUMBER F_CODDITTA 5 -BEGIN - PROMPT 2 1 "Ditta ricevente " - FLAGS "FRD" - USE LF_NDITTE KEY 1 - CHECKTYPE REQUIRED - INPUT CODDITTA F_CODDITTA - OUTPUT F_CODDITTA CODDITTA - OUTPUT F_RAGSOC RAGSOC -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 2 2 "Ragione sociale " - FLAGS "D" -END - -RADIOBUTTON F_LISTA 31 -BEGIN - PROMPT 2 4 "Scelta controllo " - HELP "Indicare il tipo di controllo" - ITEM "1|Lista controllo movim. errati" - ITEM "2|Lista controllo tutti movim." -END - -NUMBER F_NUMERO 3 -BEGIN - PROMPT 2 9 "Numero invio " - FLAGS "D" -END - -DATE F_DATALIMITE -BEGIN - PROMPT 2 10 "Data limite trasferimento " - FLAGS "D" -END - -TEXT DLG_NULL -BEGIN - PROMPT 2 11 "Stato ricezione " -END - -STRING F_SDT 1 -BEGIN - PROMPT 31 11 "" - FLAGS "DU" -END - -STRING F_SIGLA 1 -BEGIN - PROMPT 34 11 "" - FLAGS "DU" -END - -STRING F_CHIAVE 15 -BEGIN - PROMPT 37 11 "" - FLAGS "DU" -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - +#include "cg6700.h" + +PAGE "" -1 -1 78 17 + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 2 1 "Ditta ricevente " + FLAGS "FRD" + USE LF_NDITTE KEY 1 + CHECKTYPE REQUIRED + INPUT CODDITTA F_CODDITTA + OUTPUT F_CODDITTA CODDITTA + OUTPUT F_RAGSOC RAGSOC +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 2 2 "Ragione sociale " + FLAGS "D" +END + +RADIOBUTTON F_LISTA 31 +BEGIN + PROMPT 2 4 "Scelta controllo " + HELP "Indicare il tipo di controllo" + ITEM "1|Lista controllo movim. errati" + ITEM "2|Lista controllo tutti movim." +END + +NUMBER F_NUMERO 3 +BEGIN + PROMPT 2 9 "Numero invio " + FLAGS "D" +END + +DATE F_DATALIMITE +BEGIN + PROMPT 2 10 "Data limite trasferimento " + FLAGS "D" +END + +TEXT DLG_NULL +BEGIN + PROMPT 2 11 "Stato ricezione " +END + +STRING F_SDT 1 +BEGIN + PROMPT 31 11 "" + FLAGS "DU" +END + +STRING F_SIGLA 1 +BEGIN + PROMPT 34 11 "" + FLAGS "DU" +END + +STRING F_CHIAVE 15 +BEGIN + PROMPT 37 11 "" + FLAGS "DU" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + ENDMASK \ No newline at end of file diff --git a/cg/cg6801.cpp b/cg/cg6801.cpp index 067f7eff6..dda4e9eb5 100755 --- a/cg/cg6801.cpp +++ b/cg/cg6801.cpp @@ -1,246 +1,246 @@ -#include "cglib04.h" -#include "cg6801.h" - -bool TDitta_ric::create() -{ - TApplication::create(); - - _nditte = new TLocalisamfile (LF_PCON); - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool TDitta_ric::destroy() -{ - delete _nditte; - - return TApplication::destroy(); -} - -bool TDitta_ric::set() -{ - TMask msk ("cg6801a"); - KEY tasto; - - _old_ditta = get_firm(); - - tasto = msk.run(); - - if (tasto != K_ENTER) return FALSE; - - _dittaric = msk.get_int(F_CODDITTA); - set_firm(_dittaric); - - if (!esegui_controlli()) - { - set_firm(_old_ditta); - return FALSE; - } - - //set_firm(_dittaric); - - return FALSE; -} - -bool TDitta_ric::leggi_trasfer() -{ - _trasf = _tras_file.path(_dittaric); - _trasf << HEADER; - - _tras_file.open(_trasf); - - if (_tras_file.exist()) - { - if (_tras_file.read_control_rec()) - { - _control_rec = _tras_file.record(); - _uselab = _tras_file.ult_file(); - _key = _tras_file.key(); - _sigle_file = _tras_file.sigle_file(); - _nrec_file = _tras_file.nrec_file(); - } - else - return error_box("Rilevati gravi errori negli archivi:procedura interrotta"); - } - else - return error_box("Al momento non presenti trasferimenti attivi sulla ditta selezionata"); - - return TRUE; -} - -bool TDitta_ric::esegui_controlli() -{ - TConfig conf(CONFIG_DITTA); - - _std = conf.get("FlStTra"); - - if (!prefix().exist(_dittaric)) - return error_box("Codice ditta NON PRESENTE in archivio oppure NON ATTIVATO in contabilita' generale"); - - if (_std == "") - { - if (!leggi_trasfer()) - return FALSE; - - if (_uselab != "") - return error_box("Ultimo trasferimento NON COMPLETATO: completarlo"); - - if (!controlli()) - return FALSE; - } - - TConfig cfd (CONFIG_DITTA); - - TString std = cfd.get("FlStTra"); - if (std == "") - return error_box ("Non risultano TRASFERIMENTI ATTIVI sulla ditta richiesta"); - - return TRUE; -} - -bool TDitta_ric::controlli() -{ - TString ana_com,pcon_cau,uselab; - bool fatto = FALSE; - - TConfig conf(CONFIG_DITTA); - - ana_com = conf.get("AnCfCm","cg"); - pcon_cau = conf.get("PcTcCm","cg"); - - if (ana_com == "X" || pcon_cau == "X") - { - if (ana_com == "X") - { - int p = _sigle_file.find('A'); - if (p >= 0) - { - _sigle_file.overwrite(" ",p); - _nrec_file.overwrite("000000", p * 6); - } - } - - if (pcon_cau == "X") - { - int p = _sigle_file.find('W'); - if (p >= 0) - { - _sigle_file.overwrite(" ",p); - _nrec_file.overwrite("000000", p * 6); - } - - p = _sigle_file.find('P'); - if (p >= 0) - { - _sigle_file.overwrite(" ",p); - _nrec_file.overwrite("000000", p * 6); - } - } - - _control_rec.overwrite(_sigle_file,41); - _control_rec.overwrite(_nrec_file,50); - _tras_file.write_control_rec(_control_rec,256); - leggi_record_controllo(); - } - - setta_parametri_record("","T",FALSE); - - int k = 0; - - for ( int j = 0; j < _sigle_file.len(); j++) - { - TString sigla = _sigle_file.mid(j,1); - long nrec = atol(_nrec_file.mid(k,6)); - - if (sigla != "Z" && sigla != "U" && sigla != "B") - { - if (nrec != 0) - { - uselab = sigla; - _control_rec.overwrite(uselab,240); - _control_rec.overwrite(" ",241); - fatto = TRUE; - break; - } - } - k += 6; - } - - if (!fatto) - { - int p = _sigle_file.find('Z'); - if (p >= 0) - { - setta_parametri_record("","C",FALSE); - _control_rec.overwrite(" ",240); - _control_rec.overwrite(" ",241); - } - else - { - setta_parametri_record("","*",FALSE); - _control_rec.overwrite(" ",240); - _control_rec.overwrite(" ",241); - fremove(_trasf); - setta_parametri_record(""," ",FALSE); - } - } - - char agg_cau = _control_rec.sub(235,236)[0]; - char agg_clifo = _control_rec.sub(236,237)[0]; - char agg_pcon = _control_rec.sub(237,238)[0]; - - if (agg_cau != ' ') - agg_cau = 'D'; - if (agg_clifo != ' ') - agg_clifo = 'D'; - if (agg_pcon != ' ') - agg_pcon = 'D'; - - TString agg(4); - - agg[0] = agg_cau; - agg[1] = agg_clifo; - agg[2] = agg_pcon; - agg[3] = '\0'; - - _control_rec.overwrite(agg,235); - - const int size = 256; - - if (!_tras_file.write_control_rec(_control_rec, size)) - return FALSE; - - return TRUE; -} - -void TDitta_ric::leggi_record_controllo() -{ - _tras_file.read_control_rec(); - _control_rec = _tras_file.record(); -} - -void TDitta_ric::setta_parametri_record(const TString& sigla,const TString& flag,bool uselab) -{ - TConfig conf (CONFIG_DITTA); - - conf.set("FlStTra", flag); - - if (uselab) - { - leggi_record_controllo(); - _control_rec.overwrite(sigla,240); - - const int size = 256; - - _tras_file.write_control_rec(_control_rec, size); - } -} - -bool TDitta_ric::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return set(); - return FALSE; -} +#include "cglib04.h" +#include "cg6801.h" + +bool TDitta_ric::create() +{ + TApplication::create(); + + _nditte = new TLocalisamfile (LF_PCON); + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool TDitta_ric::destroy() +{ + delete _nditte; + + return TApplication::destroy(); +} + +bool TDitta_ric::set() +{ + TMask msk ("cg6801a"); + KEY tasto; + + _old_ditta = get_firm(); + + tasto = msk.run(); + + if (tasto != K_ENTER) return FALSE; + + _dittaric = msk.get_int(F_CODDITTA); + set_firm(_dittaric); + + if (!esegui_controlli()) + { + set_firm(_old_ditta); + return FALSE; + } + + //set_firm(_dittaric); + + return FALSE; +} + +bool TDitta_ric::leggi_trasfer() +{ + _trasf = _tras_file.path(_dittaric); + _trasf << HEADER; + + _tras_file.open(_trasf); + + if (_tras_file.exist()) + { + if (_tras_file.read_control_rec()) + { + _control_rec = _tras_file.record(); + _uselab = _tras_file.ult_file(); + _key = _tras_file.key(); + _sigle_file = _tras_file.sigle_file(); + _nrec_file = _tras_file.nrec_file(); + } + else + return error_box("Rilevati gravi errori negli archivi:procedura interrotta"); + } + else + return error_box("Al momento non presenti trasferimenti attivi sulla ditta selezionata"); + + return TRUE; +} + +bool TDitta_ric::esegui_controlli() +{ + TConfig conf(CONFIG_DITTA); + + _std = conf.get("FlStTra"); + + if (!prefix().exist(_dittaric)) + return error_box("Codice ditta NON PRESENTE in archivio oppure NON ATTIVATO in contabilita' generale"); + + if (_std == "") + { + if (!leggi_trasfer()) + return FALSE; + + if (_uselab != "") + return error_box("Ultimo trasferimento NON COMPLETATO: completarlo"); + + if (!controlli()) + return FALSE; + } + + TConfig cfd (CONFIG_DITTA); + + TString std = cfd.get("FlStTra"); + if (std == "") + return error_box ("Non risultano TRASFERIMENTI ATTIVI sulla ditta richiesta"); + + return TRUE; +} + +bool TDitta_ric::controlli() +{ + TString ana_com,pcon_cau,uselab; + bool fatto = FALSE; + + TConfig conf(CONFIG_DITTA); + + ana_com = conf.get("AnCfCm","cg"); + pcon_cau = conf.get("PcTcCm","cg"); + + if (ana_com == "X" || pcon_cau == "X") + { + if (ana_com == "X") + { + int p = _sigle_file.find('A'); + if (p >= 0) + { + _sigle_file.overwrite(" ",p); + _nrec_file.overwrite("000000", p * 6); + } + } + + if (pcon_cau == "X") + { + int p = _sigle_file.find('W'); + if (p >= 0) + { + _sigle_file.overwrite(" ",p); + _nrec_file.overwrite("000000", p * 6); + } + + p = _sigle_file.find('P'); + if (p >= 0) + { + _sigle_file.overwrite(" ",p); + _nrec_file.overwrite("000000", p * 6); + } + } + + _control_rec.overwrite(_sigle_file,41); + _control_rec.overwrite(_nrec_file,50); + _tras_file.write_control_rec(_control_rec,256); + leggi_record_controllo(); + } + + setta_parametri_record("","T",FALSE); + + int k = 0; + + for ( int j = 0; j < _sigle_file.len(); j++) + { + TString sigla = _sigle_file.mid(j,1); + long nrec = atol(_nrec_file.mid(k,6)); + + if (sigla != "Z" && sigla != "U" && sigla != "B") + { + if (nrec != 0) + { + uselab = sigla; + _control_rec.overwrite(uselab,240); + _control_rec.overwrite(" ",241); + fatto = TRUE; + break; + } + } + k += 6; + } + + if (!fatto) + { + int p = _sigle_file.find('Z'); + if (p >= 0) + { + setta_parametri_record("","C",FALSE); + _control_rec.overwrite(" ",240); + _control_rec.overwrite(" ",241); + } + else + { + setta_parametri_record("","*",FALSE); + _control_rec.overwrite(" ",240); + _control_rec.overwrite(" ",241); + fremove(_trasf); + setta_parametri_record(""," ",FALSE); + } + } + + char agg_cau = _control_rec.sub(235,236)[0]; + char agg_clifo = _control_rec.sub(236,237)[0]; + char agg_pcon = _control_rec.sub(237,238)[0]; + + if (agg_cau != ' ') + agg_cau = 'D'; + if (agg_clifo != ' ') + agg_clifo = 'D'; + if (agg_pcon != ' ') + agg_pcon = 'D'; + + TString agg(4); + + agg[0] = agg_cau; + agg[1] = agg_clifo; + agg[2] = agg_pcon; + agg[3] = '\0'; + + _control_rec.overwrite(agg,235); + + const int size = 256; + + if (!_tras_file.write_control_rec(_control_rec, size)) + return FALSE; + + return TRUE; +} + +void TDitta_ric::leggi_record_controllo() +{ + _tras_file.read_control_rec(); + _control_rec = _tras_file.record(); +} + +void TDitta_ric::setta_parametri_record(const TString& sigla,const TString& flag,bool uselab) +{ + TConfig conf (CONFIG_DITTA); + + conf.set("FlStTra", flag); + + if (uselab) + { + leggi_record_controllo(); + _control_rec.overwrite(sigla,240); + + const int size = 256; + + _tras_file.write_control_rec(_control_rec, size); + } +} + +bool TDitta_ric::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return set(); + return FALSE; +} diff --git a/cg/cg6803.cpp b/cg/cg6803.cpp index c1be0b7ad..ce7d3f971 100755 --- a/cg/cg6803.cpp +++ b/cg/cg6803.cpp @@ -1,319 +1,319 @@ -#include "cglib04.h" -#include "cg6803.h" - -HIDDEN TVis_ric& app() { return (TVis_ric &) main_app(); } - -bool TVis_ric::create() -{ - TApplication::create(); - - _tab_tra = new TTable ("%TRA"); - - _registra = FALSE; - _ftrasfer = TRUE; - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool TVis_ric::destroy() -{ - delete _tab_tra; - - return TApplication::destroy(); -} - -bool TVis_ric::baipassa(TMask& m, KEY k) -{ - if (k == K_SHIFT+K_F12) - { - m.enable(F_NULTRAS); - m.enable(F_DATAULTRAS); - m.enable(F_STD); - m.enable(F_USELAB); - m.enable(F_STATO); - m.enable(F_AGGCAUSALI); - m.enable(F_AGGCLIFO); - m.enable(F_AGGPCON); - m.enable(F_AGGIVD); - m.enable(F_FATTEM); - m.enable(F_FATTRIC); - - app()._registra = TRUE; - } - - return TRUE; -} - -bool TVis_ric::stato_hnd (TMask_field& f, KEY k) -{ - if (k == K_ENTER) - { - TString std = f.get(); - TString uselab = f.mask().get(F_USELAB); - TString chiave = f.mask().get(F_STATO); - - if (!app()._ftrasfer) //_ftrasfer dice se esiste il file trasfer o il suo record di controllo - { - if (std != "" && std != "*") - return warning_box("Valore non valido per stato ultima ricezione"); - } - else - { - if (std != "" && std != "T" && std != "C" && std != "M" && std != "*") - return warning_box("Valore non valido per stato ultima ricezione"); - - if (uselab != "" && (std == "" || std == "C" || std == "*") ) - return warning_box("Valore non valido per stato ultima ricezione"); - - if (chiave != "" && (std == "" || std == "C" || std == "*") ) - return warning_box("Valore non valido per stato ultima ricezione"); - - } - } - return TRUE; -} - -bool TVis_ric::uselab_hnd (TMask_field& f, KEY k) -{ - if (k == K_ENTER) - { - TString std = f.mask().get(F_STD); - TString uselab = f.get(); - - if (std == "" && uselab != "") - return warning_box("Lo stato ultima ricezione non e' significativo: la sigla ultimo file elaborato non puo' essere significativa"); - } - return TRUE; -} - -bool TVis_ric::chiave_hnd (TMask_field& f, KEY k) -{ - if (k == K_ENTER) - { - TString std = f.mask().get(F_STD); - TString uselab = f.mask().get(F_USELAB); - TString chiave = f.get(); - - if (std == "" && chiave != "") - return warning_box("Lo stato ultima ricezione non e' significativo: la chiave ultimo file elaborato non puo' essere significativa"); - - if (uselab == "" && chiave != "") - return warning_box("La sigla ultimo file elaborato non e' significativa: la chiave ultimo file elaborato non puo' essere significativa"); - } - return TRUE; -} - -bool TVis_ric::video() -{ - if (!esegui_controlli()) - return FALSE; - - TMask msk ("cg6803a"); - KEY tasto; - - ditta_ricevente(); // Cerca la ragione sociale della ditta. - - setta_campi_video(msk); // Setta i campi della maschera con i dati relativi - // alla ditta e alla tabella trasferimenti. - msk.set_handler(baipassa); - msk.set_handler(F_STD, stato_hnd); - msk.set_handler(F_USELAB, uselab_hnd); - msk.set_handler(F_STATO, chiave_hnd); - - tasto = msk.run(); - - if (tasto != K_ENTER) - return FALSE; - - registra(msk); - - return FALSE; -} - -void TVis_ric::setta_campi_video(TMask& msk) -{ - if (_ftrasfer) - { - msk.set(F_CODDITTARIC, _dittaric); - msk.set(F_RAGSOC, _ragsoc_dittar); - msk.set(F_NULTRAS, _nultras); - - if (_nultras != 0) - { - TString data1 = _dataultras.string(); - msk.set(F_DATAULTRAS, data1); - } - msk.set(F_USELAB, _uselab); - msk.set(F_STATO, _key); - msk.set(F_AGGCAUSALI, _agg_cau); - msk.set(F_AGGCLIFO, _agg_clifo); - msk.set(F_AGGPCON, _agg_pcon); - msk.set(F_AGGIVD, _agg_IVdir); - msk.set(F_FATTEM, _riatt_att); - msk.set(F_FATTRIC, _riatt_pas); - } - - msk.set(F_STD, _std); - - msk.disable(F_CODDITTARIC); - msk.disable(F_RAGSOC); - msk.disable(F_NULTRAS); - msk.disable(F_DATAULTRAS); - msk.disable(F_STD); - msk.disable(F_USELAB); - msk.disable(F_STATO); - msk.disable(F_AGGCAUSALI); - msk.disable(F_AGGCLIFO); - msk.disable(F_AGGPCON); - msk.disable(F_AGGIVD); - msk.disable(F_FATTEM); - msk.disable(F_FATTRIC); -} - -void TVis_ric::registra(TMask& m) -{ - if (_registra) - { - TString str; - - str = m.get(F_NULTRAS); - TString nultras = format("%03s", (const char*) str); - str = m.get(F_DATAULTRAS); - TString datault = riconverti(str,TRUE); - char agg_cau = m.get(F_AGGCAUSALI)[0]; - char agg_clf = m.get(F_AGGCLIFO)[0]; - char agg_pco = m.get(F_AGGPCON)[0]; - char agg_IV = m.get(F_AGGIVD)[0]; - char riat_at = m.get(F_FATTEM)[0]; - char riat_pa = m.get(F_FATTRIC)[0]; - if (riat_at =='\0') - riat_at = ' '; - - if (riat_pa == '\0') - riat_pa = ' '; - - TString flags (7); - flags[0] = agg_IV; - flags[1] = agg_cau; - flags[2] = agg_clf; - flags[3] = agg_pco; - flags[4] = riat_at; - flags[5] = riat_pa; - flags[6] = '\0'; - - TString uselab = m.get(F_USELAB); - if (uselab == "") - uselab = " "; - - str = m.get(F_STATO); - TString chiave = format("%-15s", (const char*) str); - - _control_rec.overwrite(nultras,30); - _control_rec.overwrite(datault,33); - _control_rec.overwrite(flags,234); - _control_rec.overwrite(uselab,240); - _control_rec.overwrite(chiave,241); - - const int size = 256; - - _tras_file.write_control_rec(_control_rec, size); - - TString std = m.get(F_STD); - - setta_std(std); - } -} - -void TVis_ric::setta_std(const TString& flag) -{ - TConfig conf (CONFIG_DITTA); - - conf.set("FlStTra", flag); -} - -void TVis_ric::ditta_ricevente() -{ - TLocalisamfile nditte (LF_NDITTE); - - nditte.setkey(1); - nditte.zero(); - nditte.put(NDT_CODDITTA, _dittaric); - if (nditte.read() == NOERR) - _ragsoc_dittar = nditte.get(NDT_RAGSOC); -} -/* -long TVis_ric::leggi_tabella_tras() -{ - TString dep; - long ditta = 0; - - _tab_tra->zero(); - dep = format("%10s%05d", (const char*) _nomeid, _dittainv); - _tab_tra->put("CODTAB", (const char*) dep); - if (_tab_tra->read() == NOERR) - ditta = _tab_tra->get_long("I0"); - - return ditta; -} -*/ -bool TVis_ric::leggi_trasfer() -{ - TString data,tmp; - - _trasf = _tras_file.path(_dittaric); - _trasf << HEADER; - - _tras_file.open(_trasf); - - if (_tras_file.exist()) - { - if (_tras_file.read_control_rec()) - { - _control_rec = _tras_file.record(); - _nomeid = _tras_file.nome_simb(); - _dittainv = _tras_file.ditta(); - _nultras = _tras_file.nultras(); - _dataultras = _tras_file.dataultras(); - _uselab = _tras_file.ult_file(); - _key = _tras_file.key(); - _agg_cau = _control_rec.sub(235,236); - _agg_clifo = _control_rec.sub(236,237); - _agg_pcon = _control_rec.sub(237,238); - _agg_IVdir = _control_rec.sub(234,235); - _riatt_att = _control_rec.sub(238,239); - _riatt_pas = _control_rec.sub(239,240); - } - else - _ftrasfer = FALSE; - } - else - _ftrasfer = FALSE; - - return TRUE; -} - -bool TVis_ric::esegui_controlli() -{ - TConfig conf(CONFIG_DITTA); - - _std = conf.get("FlStTra"); - - _dittaric = get_firm(); - - if (!prefix().exist(_dittaric)) - return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); - - if (!leggi_trasfer()) - return FALSE; - - return TRUE; -} - -bool TVis_ric::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return video(); - return FALSE; -} +#include "cglib04.h" +#include "cg6803.h" + +HIDDEN TVis_ric& app() { return (TVis_ric &) main_app(); } + +bool TVis_ric::create() +{ + TApplication::create(); + + _tab_tra = new TTable ("%TRA"); + + _registra = FALSE; + _ftrasfer = TRUE; + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool TVis_ric::destroy() +{ + delete _tab_tra; + + return TApplication::destroy(); +} + +bool TVis_ric::baipassa(TMask& m, KEY k) +{ + if (k == K_SHIFT+K_F12) + { + m.enable(F_NULTRAS); + m.enable(F_DATAULTRAS); + m.enable(F_STD); + m.enable(F_USELAB); + m.enable(F_STATO); + m.enable(F_AGGCAUSALI); + m.enable(F_AGGCLIFO); + m.enable(F_AGGPCON); + m.enable(F_AGGIVD); + m.enable(F_FATTEM); + m.enable(F_FATTRIC); + + app()._registra = TRUE; + } + + return TRUE; +} + +bool TVis_ric::stato_hnd (TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + TString std = f.get(); + TString uselab = f.mask().get(F_USELAB); + TString chiave = f.mask().get(F_STATO); + + if (!app()._ftrasfer) //_ftrasfer dice se esiste il file trasfer o il suo record di controllo + { + if (std != "" && std != "*") + return warning_box("Valore non valido per stato ultima ricezione"); + } + else + { + if (std != "" && std != "T" && std != "C" && std != "M" && std != "*") + return warning_box("Valore non valido per stato ultima ricezione"); + + if (uselab != "" && (std == "" || std == "C" || std == "*") ) + return warning_box("Valore non valido per stato ultima ricezione"); + + if (chiave != "" && (std == "" || std == "C" || std == "*") ) + return warning_box("Valore non valido per stato ultima ricezione"); + + } + } + return TRUE; +} + +bool TVis_ric::uselab_hnd (TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + TString std = f.mask().get(F_STD); + TString uselab = f.get(); + + if (std == "" && uselab != "") + return warning_box("Lo stato ultima ricezione non e' significativo: la sigla ultimo file elaborato non puo' essere significativa"); + } + return TRUE; +} + +bool TVis_ric::chiave_hnd (TMask_field& f, KEY k) +{ + if (k == K_ENTER) + { + TString std = f.mask().get(F_STD); + TString uselab = f.mask().get(F_USELAB); + TString chiave = f.get(); + + if (std == "" && chiave != "") + return warning_box("Lo stato ultima ricezione non e' significativo: la chiave ultimo file elaborato non puo' essere significativa"); + + if (uselab == "" && chiave != "") + return warning_box("La sigla ultimo file elaborato non e' significativa: la chiave ultimo file elaborato non puo' essere significativa"); + } + return TRUE; +} + +bool TVis_ric::video() +{ + if (!esegui_controlli()) + return FALSE; + + TMask msk ("cg6803a"); + KEY tasto; + + ditta_ricevente(); // Cerca la ragione sociale della ditta. + + setta_campi_video(msk); // Setta i campi della maschera con i dati relativi + // alla ditta e alla tabella trasferimenti. + msk.set_handler(baipassa); + msk.set_handler(F_STD, stato_hnd); + msk.set_handler(F_USELAB, uselab_hnd); + msk.set_handler(F_STATO, chiave_hnd); + + tasto = msk.run(); + + if (tasto != K_ENTER) + return FALSE; + + registra(msk); + + return FALSE; +} + +void TVis_ric::setta_campi_video(TMask& msk) +{ + if (_ftrasfer) + { + msk.set(F_CODDITTARIC, _dittaric); + msk.set(F_RAGSOC, _ragsoc_dittar); + msk.set(F_NULTRAS, _nultras); + + if (_nultras != 0) + { + TString data1 = _dataultras.string(); + msk.set(F_DATAULTRAS, data1); + } + msk.set(F_USELAB, _uselab); + msk.set(F_STATO, _key); + msk.set(F_AGGCAUSALI, _agg_cau); + msk.set(F_AGGCLIFO, _agg_clifo); + msk.set(F_AGGPCON, _agg_pcon); + msk.set(F_AGGIVD, _agg_IVdir); + msk.set(F_FATTEM, _riatt_att); + msk.set(F_FATTRIC, _riatt_pas); + } + + msk.set(F_STD, _std); + + msk.disable(F_CODDITTARIC); + msk.disable(F_RAGSOC); + msk.disable(F_NULTRAS); + msk.disable(F_DATAULTRAS); + msk.disable(F_STD); + msk.disable(F_USELAB); + msk.disable(F_STATO); + msk.disable(F_AGGCAUSALI); + msk.disable(F_AGGCLIFO); + msk.disable(F_AGGPCON); + msk.disable(F_AGGIVD); + msk.disable(F_FATTEM); + msk.disable(F_FATTRIC); +} + +void TVis_ric::registra(TMask& m) +{ + if (_registra) + { + TString str; + + str = m.get(F_NULTRAS); + TString nultras = format("%03s", (const char*) str); + str = m.get(F_DATAULTRAS); + TString datault = riconverti(str,TRUE); + char agg_cau = m.get(F_AGGCAUSALI)[0]; + char agg_clf = m.get(F_AGGCLIFO)[0]; + char agg_pco = m.get(F_AGGPCON)[0]; + char agg_IV = m.get(F_AGGIVD)[0]; + char riat_at = m.get(F_FATTEM)[0]; + char riat_pa = m.get(F_FATTRIC)[0]; + if (riat_at =='\0') + riat_at = ' '; + + if (riat_pa == '\0') + riat_pa = ' '; + + TString flags (7); + flags[0] = agg_IV; + flags[1] = agg_cau; + flags[2] = agg_clf; + flags[3] = agg_pco; + flags[4] = riat_at; + flags[5] = riat_pa; + flags[6] = '\0'; + + TString uselab = m.get(F_USELAB); + if (uselab == "") + uselab = " "; + + str = m.get(F_STATO); + TString chiave = format("%-15s", (const char*) str); + + _control_rec.overwrite(nultras,30); + _control_rec.overwrite(datault,33); + _control_rec.overwrite(flags,234); + _control_rec.overwrite(uselab,240); + _control_rec.overwrite(chiave,241); + + const int size = 256; + + _tras_file.write_control_rec(_control_rec, size); + + TString std = m.get(F_STD); + + setta_std(std); + } +} + +void TVis_ric::setta_std(const TString& flag) +{ + TConfig conf (CONFIG_DITTA); + + conf.set("FlStTra", flag); +} + +void TVis_ric::ditta_ricevente() +{ + TLocalisamfile nditte (LF_NDITTE); + + nditte.setkey(1); + nditte.zero(); + nditte.put(NDT_CODDITTA, _dittaric); + if (nditte.read() == NOERR) + _ragsoc_dittar = nditte.get(NDT_RAGSOC); +} +/* +long TVis_ric::leggi_tabella_tras() +{ + TString dep; + long ditta = 0; + + _tab_tra->zero(); + dep = format("%10s%05d", (const char*) _nomeid, _dittainv); + _tab_tra->put("CODTAB", (const char*) dep); + if (_tab_tra->read() == NOERR) + ditta = _tab_tra->get_long("I0"); + + return ditta; +} +*/ +bool TVis_ric::leggi_trasfer() +{ + TString data,tmp; + + _trasf = _tras_file.path(_dittaric); + _trasf << HEADER; + + _tras_file.open(_trasf); + + if (_tras_file.exist()) + { + if (_tras_file.read_control_rec()) + { + _control_rec = _tras_file.record(); + _nomeid = _tras_file.nome_simb(); + _dittainv = _tras_file.ditta(); + _nultras = _tras_file.nultras(); + _dataultras = _tras_file.dataultras(); + _uselab = _tras_file.ult_file(); + _key = _tras_file.key(); + _agg_cau = _control_rec.sub(235,236); + _agg_clifo = _control_rec.sub(236,237); + _agg_pcon = _control_rec.sub(237,238); + _agg_IVdir = _control_rec.sub(234,235); + _riatt_att = _control_rec.sub(238,239); + _riatt_pas = _control_rec.sub(239,240); + } + else + _ftrasfer = FALSE; + } + else + _ftrasfer = FALSE; + + return TRUE; +} + +bool TVis_ric::esegui_controlli() +{ + TConfig conf(CONFIG_DITTA); + + _std = conf.get("FlStTra"); + + _dittaric = get_firm(); + + if (!prefix().exist(_dittaric)) + return error_box("Rilevati GRAVI ERRORI negli archivi: procedura interrotta"); + + if (!leggi_trasfer()) + return FALSE; + + return TRUE; +} + +bool TVis_ric::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return video(); + return FALSE; +} diff --git a/cg/cg6803.h b/cg/cg6803.h index f546a0f2c..c7565ad1c 100755 --- a/cg/cg6803.h +++ b/cg/cg6803.h @@ -1,56 +1,56 @@ -// Visualizzazione stato ricezione - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cg6800.h" - -//HIDDEN TString80 TP; - -class TVis_ric : public TApplication -{ - TTable* _tab_tra; - TTransfer_file _tras_file; - - TString _trasf,_std,_uselab,_key,_nomeid,_ragsoc_dittar; - TString _agg_cau,_agg_clifo,_agg_pcon,_agg_IVdir,_riatt_att,_riatt_pas; - long _dittaric,_dittainv; - TString _control_rec; - TDate _dataultras; - int _nultras; - bool _registra,_ftrasfer; - -public: - TString _titolo; - - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - - bool video(); - void setta_campi_video(TMask& m); - - void ditta_ricevente(); - long leggi_tabella_tras(); - bool esegui_controlli(); - bool leggi_trasfer(); - void registra(TMask& m); - - void setta_std(const TString& flag); - - static bool baipassa (TMask& m, KEY k); - static bool stato_hnd (TMask_field& f, KEY k); - static bool uselab_hnd (TMask_field& f, KEY k); - static bool chiave_hnd (TMask_field& f, KEY k); - - TVis_ric() {}; -}; +// Visualizzazione stato ricezione + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cg6800.h" + +//HIDDEN TString80 TP; + +class TVis_ric : public TApplication +{ + TTable* _tab_tra; + TTransfer_file _tras_file; + + TString _trasf,_std,_uselab,_key,_nomeid,_ragsoc_dittar; + TString _agg_cau,_agg_clifo,_agg_pcon,_agg_IVdir,_riatt_att,_riatt_pas; + long _dittaric,_dittainv; + TString _control_rec; + TDate _dataultras; + int _nultras; + bool _registra,_ftrasfer; + +public: + TString _titolo; + + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + + bool video(); + void setta_campi_video(TMask& m); + + void ditta_ricevente(); + long leggi_tabella_tras(); + bool esegui_controlli(); + bool leggi_trasfer(); + void registra(TMask& m); + + void setta_std(const TString& flag); + + static bool baipassa (TMask& m, KEY k); + static bool stato_hnd (TMask_field& f, KEY k); + static bool uselab_hnd (TMask_field& f, KEY k); + static bool chiave_hnd (TMask_field& f, KEY k); + + TVis_ric() {}; +}; diff --git a/cg/cg6803a.uml b/cg/cg6803a.uml index cb7ea6bb1..afd60edea 100755 --- a/cg/cg6803a.uml +++ b/cg/cg6803a.uml @@ -1,110 +1,110 @@ -#include "cg6800.h" - -PAGE "" -1 -1 78 20 - -NUMBER F_CODDITTARIC 5 -BEGIN - PROMPT 1 1 "Ditta ricevente " - USE LF_NDITTE KEY 1 - INPUT CODDITTA F_CODDITTARIC - OUTPUT F_RAGSOC RAGSOC - FLAGS "RDZ" - CHECKTYPE REQUIRED -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 1 2 "Ragione sociale " - FLAGS "D" -END - -NUMBER F_NULTRAS 3 -BEGIN - PROMPT 1 4 "Numero ultimo invio ricevuto " - FLAGS "G" -END - -DATE F_DATAULTRAS -BEGIN - PROMPT 1 6 "Data ultimo invio ricevuto " - FLAGS "G" -END - -STRING F_STD 1 -BEGIN - PROMPT 1 8 "Stato del trasferimento " - FLAGS "GU" -END - -STRING F_USELAB 1 -BEGIN - PROMPT 34 8 "" - FLAGS "GU" -END - -STRING F_STATO 15 -BEGIN - PROMPT 38 8 "" - FLAGS "GU" -END - -LIST F_AGGCAUSALI 6 -BEGIN - PROMPT 1 10 "Aggiornamento causali gia' presenti " - ITEM "N|No" - ITEM "D|Descr." - ITEM "T|Tutto" - FLAGS "G" -END - -LIST F_AGGCLIFO 6 -BEGIN - PROMPT 1 11 "Aggiornamento Clienti/Fornitori gia' presenti " - ITEM "N|No" - ITEM "D|Descr." - ITEM "T|Tutto" - FLAGS "G" -END - -LIST F_AGGPCON 6 -BEGIN - PROMPT 1 12 "Aggiornamento voci Piano dei Conti gia' presenti " - ITEM "N|No" - ITEM "D|Descr." - ITEM "T|Tutto" - FLAGS "G" -END - -LIST F_AGGIVD 6 -BEGIN - PROMPT 1 13 "Aggiornamento classi Piano dei Conti " - ITEM "N|No" - ITEM "T|Tutto" - FLAGS "G" -END - -BOOLEAN F_FATTEM -BEGIN - PROMPT 1 14 "Riattribuzione num. protocollo su fatture emesse " - FLAGS "G" -END - -BOOLEAN F_FATTRIC -BEGIN - PROMPT 1 15 "Riattribuzione num. protocollo su fatture ricevute " - FLAGS "G" -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -ENDMASK +#include "cg6800.h" + +PAGE "" -1 -1 78 20 + +NUMBER F_CODDITTARIC 5 +BEGIN + PROMPT 1 1 "Ditta ricevente " + USE LF_NDITTE KEY 1 + INPUT CODDITTA F_CODDITTARIC + OUTPUT F_RAGSOC RAGSOC + FLAGS "RDZ" + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 1 2 "Ragione sociale " + FLAGS "D" +END + +NUMBER F_NULTRAS 3 +BEGIN + PROMPT 1 4 "Numero ultimo invio ricevuto " + FLAGS "G" +END + +DATE F_DATAULTRAS +BEGIN + PROMPT 1 6 "Data ultimo invio ricevuto " + FLAGS "G" +END + +STRING F_STD 1 +BEGIN + PROMPT 1 8 "Stato del trasferimento " + FLAGS "GU" +END + +STRING F_USELAB 1 +BEGIN + PROMPT 34 8 "" + FLAGS "GU" +END + +STRING F_STATO 15 +BEGIN + PROMPT 38 8 "" + FLAGS "GU" +END + +LIST F_AGGCAUSALI 6 +BEGIN + PROMPT 1 10 "Aggiornamento causali gia' presenti " + ITEM "N|No" + ITEM "D|Descr." + ITEM "T|Tutto" + FLAGS "G" +END + +LIST F_AGGCLIFO 6 +BEGIN + PROMPT 1 11 "Aggiornamento Clienti/Fornitori gia' presenti " + ITEM "N|No" + ITEM "D|Descr." + ITEM "T|Tutto" + FLAGS "G" +END + +LIST F_AGGPCON 6 +BEGIN + PROMPT 1 12 "Aggiornamento voci Piano dei Conti gia' presenti " + ITEM "N|No" + ITEM "D|Descr." + ITEM "T|Tutto" + FLAGS "G" +END + +LIST F_AGGIVD 6 +BEGIN + PROMPT 1 13 "Aggiornamento classi Piano dei Conti " + ITEM "N|No" + ITEM "T|Tutto" + FLAGS "G" +END + +BOOLEAN F_FATTEM +BEGIN + PROMPT 1 14 "Riattribuzione num. protocollo su fatture emesse " + FLAGS "G" +END + +BOOLEAN F_FATTRIC +BEGIN + PROMPT 1 15 "Riattribuzione num. protocollo su fatture ricevute " + FLAGS "G" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/cg/cg6900.cpp b/cg/cg6900.cpp index f24badd35..5a4e1df54 100755 --- a/cg/cg6900.cpp +++ b/cg/cg6900.cpp @@ -1,1546 +1,1546 @@ -// Invio contabilita' - -#include "cg6900.h" -#include "cg6900a.h" - -TInv_cont::TInv_cont(char mov) : _scelta(toupper(mov)) -{ - switch (_scelta) - { - case 'S': - _titolo = "Invio a Sistema"; - break; - case 'P': - _titolo = "Invio a PC"; - break; - default: - break; - } -} - -bool TInv_cont::messaggio_hnd(TMask_field& f, KEY k) -{ - if (k == K_TAB) - return message_box("Rilevato STATO DI RIPARTENZA: il trasferimento ripartira' automaticamente"); - - return TRUE; -} - -bool TInv_cont::main_loop() -{ - TString str; - bool ripartenza = FALSE; - - if (!esiste_tabella_studio()) return FALSE; - - if (!esegui_controlli()) return FALSE; - - TMask msk ("cg6900a"); - KEY tasto; - - if (_ditta != 0) - { - msk.set(F_DITTAINV, _ditta); - msk.disable(F_DITTAINV); - codifica_ditta(msk); - msk.set(F_NUMULINV, _num); - msk.set(F_DATAULIN, _data.string()); - msk.set(F_STATO, _stato); - - TString uselab = _tras_file.ult_file(); - TString chiave = _tras_file.key(); - msk.set(F_USELAB, uselab); - msk.set(F_CHIAVE, chiave); - msk.set(F_DATALIM, _data.string()); - msk.disable(F_DATALIM); - - ripartenza = TRUE; - } - - msk.disable(F_NUMULINV); - msk.disable(F_DATAULIN); - msk.disable(F_STATO); - msk.disable(F_USELAB); - msk.disable(F_CHIAVE); - - if (!ripartenza) - msk.set_handler(F_DITTAINV, setta_maschera_hnd); - else - msk.set_handler(F_NUMULINV, messaggio_hnd); - - tasto = msk.run(); - - if (tasto != K_ENTER) return FALSE; - -// Nel caso di invio PC --> SISTEMA eseguo prima la -// Lista controllo archivi per rilevare eventuali -// differenze. - - long ditta = msk.get_long(F_DITTAINV); - set_firm(ditta); - - TConfig conf(CONFIG_DITTA); - TString std = conf.get("FlStInv"); - - if (_scelta == 'S' && std != "D") - { - TString appname = "cg6 -8 L"; - TString corpo = ""; - - TDate data = msk.get(F_DATALIM); - - corpo << data.string(); - - TMessage mess (appname,"",(const char*)corpo); - TMailbox mb; - mb.send(mess); - - TExternal_app a (appname); - a.run(); - - TMailbox m; - TMessage* msg = m.next_s(""); - int subj; - - if (msg != NULL) - { - subj = atoi(msg->body()); - if (subj) - return FALSE; - } - } - - _datalimsk = msk.get(F_DATALIM); - - if (!ripartenza) - { - crea_marker(msk); //Crea il record con le informazioni sul marker - setta_parametri_record(msk,"F"); //Aggiorna parametri contabili ditta - setta_tabella_studio(msk); //Aggiorna la tabella studio per invio - setta_tabella_ditta(msk,"F"); //Aggiorna la tabella ditta per invio - crea_record_controllo(msk); //Crea il record di controllo sul file header - } - else - { - TString str,app; - - int num = msk.get_int(F_NUMULINV); - TString data (msk.get(F_DATALIM)); - app = riconverti(data,FALSE); - str.format("%03d%6s", num, (const char*) app); - aggiorna_marker(str,14); - } - - apri_file_temp(); - - if (!invio_tempfile(msk)) - return FALSE; - -// calcola_totale_record(); -// str.format("%06ld", _tot_rec); - - if (_scelta == 'S') - { -// aggiorna_marker(str,23); - - _trasf = ""; - _trasf = firm2dir(0); - _trasf << "\\trasfer"; - fremove(_trasf); - _tras_file.open(_trasf,TRUE); - -// if (std != "D") - invio_contabilita(); //Costruisce il trasfer nella directory comune - - TMask mask ("cg6900b"); - KEY k; - - k = mask.run(); - - if (k == K_ENTER) - { - int num_disk = calcola_numero_dischi(mask); - char floppy = mask.get(F_FLOPPY)[0]; - - str.format("%02d", num_disk); - aggiorna_marker(str,29); - - const TFilename from(_trasf); // File da splittare - - TFilename work; - work << floppy << ":/" << from.name(); // File su dischetto - - FILE* i = fopen(from, "rb"); - - if (i == NULL) return error_box("Impossibile aprire il file '%s'", from); - - TProgind w(_dim_tot, "Trasferimento su dischetti in corso... Prego attendere", TRUE, TRUE, 60); - - for (int j = 0; j < num_disk; j++) - { - scrivi_disco(floppy,j+1,work,i,w); - } - fclose(i); - - setta_tabella_studio(msk,FALSE); //Aggiorna la tabella studio per invio - setta_tabella_ditta(msk," ",FALSE); //Aggiorna la tabella ditta per invio - setta_parametri_record(msk," "); //Aggiorna parametri contabili ditta - - _tras_file.open(_header); - leggi_record_controllo(); - TString record(256); - record.format("%-256s",(const char*) record); - _control_rec.overwrite(record,0); - _tras_file.write_control_rec(_control_rec,256); - - chiudi_file_temp(); - } - else - return FALSE; - } - else - if (_scelta == 'P') - { - aggiorna_marker(str,24); - - TMask mask ("cg6900b"); - KEY k; - - mask.disable(F_DIM); - - k = mask.run(); - - if (k == K_ENTER) - { - char floppy = mask.get(F_FLOPPY)[0]; - TString flp = mask.get(F_FLOPPY); - TFilename firm; - firm.tempdir(); - firm << "\\ftemp"; - TString desc = ""; - - make_dir(firm); - _tras_file.open(_header); - TString sigle = _tras_file.sigle_file(); - sigle.trim(); - - TString dir = firm2dir(0); - - chiudi_file_temp(); - - _tras_file.temp_dir(dir,firm,sigle); - - _arc.backup(firm, floppy, desc); - - TString orig = dir; orig << "\\marker"; - TString dest = flp << ":"; dest << "\\marker"; - fcopy(orig,dest); - - setta_tabella_studio(msk,FALSE); //Aggiorna la tabella studio per invio - setta_tabella_ditta(msk," ",FALSE); //Aggiorna la tabella ditta per invio - setta_parametri_record(msk," "); //Aggiorna parametri contabili ditta - _tras_file.canc_file_dir_temp(firm); //Cancella i file della directory temporanea ftemp - } - else - return FALSE; - } - - _tras_file.remove_all(FALSE); - fremove(_marker); - _trasf = ""; - _trasf = firm2dir(0); - _trasf << "\\trasfer"; - fremove(_trasf); - - return FALSE; -} - -bool TInv_cont::create() -{ - TApplication::create(); - - _caus = new TLocalisamfile (LF_CAUSALI); - _rcaus = new TLocalisamfile (LF_RCAUSALI); - _clifo = new TLocalisamfile (LF_CLIFO); - _pcon = new TLocalisamfile (LF_PCON); - _mov = new TLocalisamfile (LF_MOV); - _rmov = new TLocalisamfile (LF_RMOV); - _rmoviva = new TLocalisamfile (LF_RMOVIVA); - _occas = new TLocalisamfile (LF_OCCAS); - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool TInv_cont::destroy() -{ - delete _caus; - delete _rcaus; - delete _clifo; - delete _pcon; - delete _mov; - delete _rmov; - delete _rmoviva; - delete _occas; - - return TApplication::destroy(); -} - -void TInv_cont::apri_file_temp() -{ - _tras_file.open(_header); - leggi_record_controllo(); - _sigle = _tras_file.sigle_file(); - _sigle.trim(); - - for (int i = 0; i < _sigle.len(); i++) - { - TString80 tmp; - char sigla = _sigle[i]; - - if (sigla == 'W') - { - TString80 tmpcaus = "%"; - tmpcaus << firm2dir(0); - tmpcaus << "\\" << TEMP_CAUS; - tmp = tmpcaus.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _tcaus = new TIsamtempfile(LF_CAUSALI, tmpcaus, FALSE); - else - _tcaus = new TIsamtempfile(LF_CAUSALI, tmpcaus, TRUE); - TString80 tmprcaus = "%"; - tmprcaus << firm2dir(0); - tmprcaus << "\\" << TEMP_RCAUS; - tmp = tmprcaus.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _trcaus = new TIsamtempfile(LF_RCAUSALI, tmprcaus, FALSE); - else - _trcaus = new TIsamtempfile(LF_RCAUSALI, tmprcaus, TRUE); - } - if (sigla == 'A') - { - TString80 tmpclifo = "%"; - tmpclifo << firm2dir(0); - tmpclifo << "\\" << TEMP_CLIFO; - tmp = tmpclifo.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _tclifo = new TIsamtempfile(LF_CLIFO, tmpclifo, FALSE); - else - _tclifo = new TIsamtempfile(LF_CLIFO, tmpclifo, TRUE); - } - if (sigla == 'P') - { - TString80 tmppcon = "%"; - tmppcon << firm2dir(0); - tmppcon << "\\" << TEMP_PCON; - tmp = tmppcon.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _tpcon = new TIsamtempfile(LF_PCON, tmppcon, FALSE); - else - _tpcon = new TIsamtempfile(LF_PCON, tmppcon, TRUE); - } - if (sigla == 'Z') - { - TString80 tmpmov = "%"; - tmpmov << firm2dir(0); - tmpmov << "\\" << TEMP_MOV; - tmp = tmpmov.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _tmov = new TIsamtempfile(LF_MOV, tmpmov, FALSE); - else - _tmov = new TIsamtempfile(LF_MOV, tmpmov, TRUE); - TString80 tmprmov = "%"; - tmprmov << firm2dir(0); - tmprmov << "\\" << TEMP_RMOV; - tmp = tmprmov.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _trmov = new TIsamtempfile(LF_RMOV, tmprmov, FALSE); - else - _trmov = new TIsamtempfile(LF_RMOV, tmprmov, TRUE); - } - if (sigla == 'U') - { - TString80 tmpriva = "%"; - tmpriva << firm2dir(0); - tmpriva << "\\" << TEMP_RMOVIVA; - tmp = tmpriva.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _triva = new TIsamtempfile(LF_RMOVIVA, tmpriva, FALSE); - else - _triva = new TIsamtempfile(LF_RMOVIVA, tmpriva, TRUE); - TString80 tmpoccas = "%"; - tmpoccas << firm2dir(0); - tmpoccas << "\\" << TEMP_OCC; - tmp = tmpoccas.mid(1); - tmp << ".dbf"; - if (fexist(tmp)) - _toccas = new TIsamtempfile(LF_OCCAS, tmpoccas, FALSE); - else - _toccas = new TIsamtempfile(LF_OCCAS, tmpoccas, TRUE); - } - } -} - -void TInv_cont::chiudi_file_temp() -{ - for (int i = 0; i < _sigle.len(); i++) - { - char sigla = _sigle[i]; - - if (sigla == 'W') - { - delete _tcaus; - delete _trcaus; - } - if (sigla == 'A') - delete _tclifo; - if (sigla == 'P') - delete _tpcon; - if (sigla == 'Z') - { - delete _tmov; - delete _trmov; - } - if (sigla == 'U') - { - delete _triva; - delete _toccas; - } - } -} - -void TInv_cont::leggi_record_controllo() -{ - _tras_file.read_control_rec(); - _control_rec = _tras_file.record(); -} - -bool TInv_cont::esiste_tabella_studio() -{ - TTable ins ("%INS"); - - ins.zero(); - - if (ins.first() == NOERR) - { - if (ins.empty()) - return error_box("Codice STUDIO NON ATTIVATO in tabella invii"); - else - { - _nome_simbolico = ins.get("S0"); - long ditta = ins.get_long("I0"); - if (ditta != 0) - { - _esiste_ditta = TRUE; - _ditta = ditta; - } - else - { - _esiste_ditta = FALSE; - _ditta = 0; - } - } - } - else - return error_box("Codice STUDIO NON ATTIVATO in tabella invii"); - - return TRUE; -} - -bool TInv_cont::leggi_header() -{ - _header = ""; - _header = firm2dir(0); - _header << HEADER; - - _tras_file.open(_header); - - if (_tras_file.exist()) - { - if (_tras_file.read_control_rec()) - { - _control_rec = _tras_file.record(); - if (!record_controllo()) - return FALSE; - } - else - return FALSE; - } - else - return FALSE; - - return TRUE; -} - -bool TInv_cont::record_controllo() -{ - TString tiporecord = _control_rec.sub(0,2); - - if (tiporecord != " 1") - return FALSE; - - return TRUE; -} - -bool TInv_cont::esegui_controlli() -{ - _esiste_record = leggi_header(); - - if (!controlli()) return FALSE; - - return TRUE; -} - -void TInv_cont::setta_parametri_record(TMask& m,const TString& flag) -{ - TConfig conf (CONFIG_DITTA); - conf.set("FlStInv", flag); -} - -bool TInv_cont::controlli() -{ - if (!_esiste_ditta && !_esiste_record) return TRUE; //Mi trovo in una condizione normale - - if (_esiste_ditta && !_esiste_record) - return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto"); - - if (!_esiste_ditta && _esiste_record) - return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto"); - - if (_esiste_ditta && _esiste_record) - { - if (!sub_controlli()) - return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto"); - } - - return TRUE; -} - -bool TInv_cont::sub_controlli() -{ - long ditta_trasfer = _tras_file.ditta(); - - if (_ditta == ditta_trasfer) - { - if (!prefix().exist(_ditta)) - return FALSE; - - if (!tabella_ditta()) - return FALSE; - } - else - return FALSE; - - if (!controlla_stato_invio()) - return FALSE; - - if (!numero_data()) - return FALSE; - - return TRUE; -} - -bool TInv_cont::tabella_ditta() -{ - TTable ind ("%IND"); - TString dep; - - dep.format("%05d", _ditta); - - ind.zero(); - ind.put("CODTAB", dep); - if (ind.read() == NOERR) - { - _stato = ind.get("S6"); - _num = ind.get_int("I0"); - _data = ind.get_date("D0"); - - _files = ""; - if (ind.get_bool("B0")) - _files << "W"; - - if (ind.get_bool("B1")) - _files << "A"; - - if (ind.get_bool("B2")) - _files << "P"; - - if (ind.get_bool("B3")) - _files << "Z"; - - if (ind.get_bool("B4")) - _files << "U"; - - if (ind.get_bool("B5")) - _files << "B"; - - _flag_bollato = ind.get_bool("B7"); - - return TRUE; - } - - return FALSE; -} - -bool TInv_cont::controlla_stato_invio() -{ - set_firm(_ditta); - - TConfig conf(CONFIG_DITTA); - _std = conf.get("FlStInv"); - - if (_stato != _std) - return FALSE; - else - { - TString uselab = _tras_file.ult_file(); - - if (_stato == "D" && uselab != "") - return FALSE; - } - - return TRUE; -} - -bool TInv_cont::numero_data() -{ - int num = _tras_file.nultras(); - TString str = _tras_file.dataultras(); - TDate data (str); - - if (_num != num || data != _data) - return FALSE; - - return TRUE; -} - -void TInv_cont::codifica_ditta(TMask& m) -{ - TLocalisamfile ditte (LF_NDITTE); - - long ditta = m.get_long(F_DITTAINV); - - ditte.setkey(1); - ditte.zero(); - ditte.put(NDT_CODDITTA, ditta); - if (ditte.read() == NOERR) - { - TString ragsoc = ditte.get(NDT_RAGSOC); - m.set(F_RAGSOC, ragsoc); - } -} - -bool TInv_cont::setta_maschera_hnd(TMask_field& f, KEY k) -{ - if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) - { - app()._ditta = f.mask().get_long(F_DITTAINV); - if (!prefix().exist(app()._ditta)) - return error_box("La ditta indicata non e' abilitata alla contabilita'"); - - if (!app().tabella_ditta()) - return error_box("La ditta indicata non e' presente sulla tabella ditta per invio"); - - if (app()._stato != "") - return error_box("Rilevato STATO DI RIPARTENZA NON RECUPERABILE sulla ditta richiesta"); - - f.mask().set(F_DITTAINV, app()._ditta); - app().codifica_ditta(f.mask()); - f.mask().set(F_NUMULINV, app()._num); - f.mask().set(F_DATAULIN, app()._data.string()); - f.mask().set(F_STATO, app()._stato); - } - - return TRUE; -} - -void TInv_cont::crea_marker(TMask& m) -{ - TString str; - - _marker = ""; - _marker = firm2dir(0); - _marker << "\\marker"; - - FILE* i; - - const word size = 64; - TString buffer(size); - buffer.spaces(); - - if ( (i = fopen(_marker,"w+t")) != NULL) - { - if (_scelta == 'S') - { - str = format("%-10s", (const char*) _nome_simbolico); - buffer.overwrite(str,0); - long ditta = m.get_long(F_DITTAINV); - str = format("%04d", ditta); - buffer.overwrite(str,10); - int num = m.get_int(F_NUMULINV); - num++; - str = format("%03d", num); - buffer.overwrite(str,14); - TString data (m.get(F_DATALIM)); - str = riconverti(data,FALSE); - buffer.overwrite(str,17); - } - else - if (_scelta == 'P') - { - str = format("%-10s", (const char*) _nome_simbolico); - buffer.overwrite(str,0); - long ditta = m.get_long(F_DITTAINV); - str = format("%05d", ditta); - buffer.overwrite(str,10); - int num = m.get_int(F_NUMULINV); - num++; - str = format("%03d", num); - buffer.overwrite(str,15); - TString data (m.get(F_DATALIM)); - str = riconverti(data,FALSE); - buffer.overwrite(str,18); - } - - buffer.cut(64); //Sicurezza: le stringhe dimensionate in realta' sono - //leggermente piu' lunghe della dimensione specificata - const word scritti = fwrite((char*)(const char*)buffer,sizeof(char),size,i); - - fclose(i); - } -} - -void TInv_cont::aggiorna_marker(TString& token, int pos) -{ - TString str; - - _marker = ""; - _marker = firm2dir(0); - _marker << "\\marker"; - - FILE* i; - - const word size = 64; - TString buffer(size); - //buffer.spaces(); - - if ( (i = fopen(_marker,"r+t")) != NULL) - { - const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i); - buffer.overwrite(token,pos); - - buffer.cut(64); //Sicurezza: le stringhe dimensionate in realta' sono - //leggermente piu' lunghe della dimensione specificata - fseek(i, 0L, SEEK_SET); - const word scritti = fwrite((char*)(const char*)buffer,sizeof(char),size,i); - - fclose(i); - } -} - -void TInv_cont::calcola_totale_record() -{ - _tras_file.open(_header); - leggi_record_controllo(); - - TString sigle = _tras_file.sigle_file(); - sigle.trim(); - - _tot_rec = 0; - - for (int i = 0; i < sigle.len(); i++) - { - long tot_rec = atol(_control_rec.mid((i * 6) + 50,6)); - _tot_rec += tot_rec; - } - _tot_rec += 1; -} - -void TInv_cont::setta_tabella_studio(TMask& m,bool flag_ditta) -{ - TTable ins ("%INS"); - TString dep; - long ditta; - - if (flag_ditta) - ditta = m.get_long(F_DITTAINV); - else - ditta = 0; - - dep.format("%-3s", (const char*) "INS"); - - ins.zero(); - ins.put("CODTAB", dep); - if (ins.read() == NOERR) - { - ins.put("I0", ditta); - ins.rewrite(); - } - else - warning_box("Tabella studio per invio NON AGGIORNATA"); -} - -void TInv_cont::setta_tabella_ditta(TMask& m,const char* flag, bool comp) -{ - TTable ind ("%IND"); - TString dep; - - long ditta = m.get_long(F_DITTAINV); - - dep.format("%05d", ditta); - - ind.zero(); - ind.put("CODTAB", dep); - if (ind.read() == NOERR) - { - int num = m.get_int(F_NUMULINV); - num++; - TDate data (m.get(F_DATALIM)); - - ind.put("S6", flag); - if (comp) - { - ind.put("I0", (long)num); - ind.put("D0", data); - } - ind.rewrite(); - } - else - warning_box("Tabella ditta per invio NON AGGIORNATA"); -} - -void TInv_cont::crea_record_controllo(TMask& m) -{ - int size = 256; - TString buffer(256); - TString str; - - if (_tras_file.exist()) - _tras_file.open(_header); - else - { - _tras_file.open(_header,TRUE); //Metto il parametro TRUE (che di default e' FALSE), perche' voglio creare un file che non e' ancore esistente - - buffer.spaces(); - buffer.overwrite(" 1",0); //Tipo record - - str = format("%-10s", (const char*) _nome_simbolico); - buffer.overwrite(str,15); //Nome studio - - long ditta = m.get_long(F_DITTAINV); - str = format("%05d", ditta); - buffer.overwrite(str,25); //Ditta inviante - - int num = m.get_int(F_NUMULINV); - num++; - str = format("%03d", num); - buffer.overwrite(str,30); //Numero progr. invio - - TString data (m.get(F_DATALIM)); - str = riconverti(data,TRUE); - buffer.overwrite(str,33); //Data limite invio - - str = format("%-9s", (const char*) _files); - buffer.overwrite(str,41); - - str = _files.sub(0,1); - buffer.overwrite(str,240); - - str = ""; - str.format("%054d", 0); - buffer.overwrite(str,50); - - if (!_tras_file.write_control_rec(buffer, size)) - warning_box("Il record di controllo del file trasfer non e' stato aggiornato correttamente"); - } - _tras_file.close(); -} - -const char* TInv_cont::cerca_provincia(const TString& comcf) -{ - TLocalisamfile comuni(LF_COMUNI); - - comuni.setkey(1); - comuni.zero(); - comuni.put(COM_COM, comcf); - if (comuni.read() == NOERR) - TEMP = comuni.get(COM_PROVCOM); - else - TEMP = ""; - - return TEMP; -} - -bool TInv_cont::invio_tempfile(TMask& m) -{ - char uselab; - TString record(256),key,nrec; - int posiz,i; - char sigla; - - _tras_file.open(_header); - - leggi_record_controllo(); - - uselab = (_tras_file.ult_file())[0]; - - if (uselab == '\0') //Significa che sono in caso di ripartenza ma ho - return TRUE; //gia' trasferito tutti gli archivi e devo solo fare la copia su dischi - - posiz = _files.find(uselab); //Ritorna la posizione della sigla all'interno della schiera - key = _tras_file.key(); - key.trim(); - nrec = _tras_file.nrec_file(); - - for (i = posiz; i < _files.len();i++) - { - sigla = _files[i]; - _numrec = atol(nrec.mid(i * 6,6)); - - switch (sigla) - { - case 'W': - causali2tempfile(key,m); - break; - - case 'A': - clifo2tempfile(key,m); - break; - - case 'P': - pcon2tempfile(key,m); - break; - - case 'Z': - movPN2tempfile(key,m); - break; - - case 'U': - movIVA2tempfile(key,m); - break; - - default: - break; - }; - key = ""; - } - - // Finito di trasferire tutti gli archivi pulisco la sigla ultimo file da elaborare - _tras_file.open(_header); - leggi_record_controllo(); - _control_rec.overwrite(" ",240); - _tras_file.write_control_rec(_control_rec,256); - _tras_file.close(); - - setta_tabella_ditta(m,"D",FALSE); - setta_parametri_record(m,"D"); - - return TRUE; -} - -void TInv_cont::causali2tempfile(TString& key, TMask& m) -{ - int size = 256; - - _tras_file.open(_header); - - long items = _caus->items(); - _prog = new TProgind(items,"Invio tabella causali in corso... Prego attendere.",FALSE); - - _caus->setkey(1); - - if (key.empty()) - _caus->first(); - else - { - TString causale (key.mid(0,3)); - _caus->zero(); - _caus->put(CAU_CODCAUS, causale); - _caus->read(); - } - - for(; !_caus->eof(); _caus->next()) - { - _prog->addstatus(1); - - TString codcaus = _caus->get(CAU_CODCAUS); - - _tcaus->curr() = _caus->curr(); - - if (_tcaus->read() == NOERR) // Esiste la testata - { - scrivi_righe_causali(codcaus,'W'); - - _tcaus->zero(); - _tcaus->curr() = _caus->curr(); - _tcaus->rewrite(); - } - else - { - scrivi_righe_causali(codcaus,'W'); - - _tcaus->zero(); - _tcaus->curr() = _caus->curr(); - _tcaus->write(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%3s",(const char*) codcaus); - _control_rec.overwrite("W",240); - _control_rec.overwrite(chiave,241); - - _tras_file.write_control_rec(_control_rec,size); - } - delete _prog; - - //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare - //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di - //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' - //la chiave e' compilata con i dati del file precedente. - - leggi_record_controllo(); - TString chiave,app,sigla; - app.format("%-15s", (const char*) chiave); - char sigla_p = _tras_file.ult_file()[0]; - int posiz = _files.find(sigla_p); - TString nuova_sigla = " "; - if (posiz < _files.len()) - nuova_sigla = _files.mid(posiz+1,1); - - _control_rec.overwrite(nuova_sigla,240); - _control_rec.overwrite(app,241); - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); - -// setta_tabella_ditta(m,"D",FALSE); -// setta_parametri_record(m,"D"); -} - -void TInv_cont::cancella_righe_causali(TString& codcaus) -{ - _trcaus->setkey(1); - _trcaus->zero(); - _trcaus->put(RCA_CODCAUS, codcaus); - TRectype rcau (LF_RCAUSALI); - rcau = _trcaus->curr(); - for (_trcaus->read(); !_trcaus->eof(); _trcaus->next()) - { - if (_trcaus->curr() > rcau) break; - - _trcaus->remove(); - } -} - -void TInv_cont::scrivi_righe_causali(TString& codcaus, char uselab) -{ - cancella_righe_causali(codcaus); - - _rcaus->setkey(1); - _rcaus->zero(); - _rcaus->put(RCA_CODCAUS, codcaus); - TRectype rcau (LF_RCAUSALI); - rcau = _rcaus->curr(); - for (_rcaus->read(); !_rcaus->eof(); _rcaus->next()) - { - if (_rcaus->curr() > rcau) break; - - _trcaus->curr() = _rcaus->curr(); - _trcaus->write(); - - leggi_record_controllo(); - TString chiave; - chiave.format("%3s",(const char*) codcaus); - TString sigla (format("%c", uselab)); - _control_rec.overwrite(sigla,240); - _control_rec.overwrite(chiave,241); - _tras_file.write_control_rec(_control_rec,256); - } -} - -void TInv_cont::clifo2tempfile(TString& key, TMask& m) -{ - int size = 256; - - _tras_file.open(_header); - - long items = _clifo->items(); - _prog = new TProgind(items,"Invio Clienti / Fornitori in corso... Prego attendere.",FALSE); - - _clifo->setkey(1); - - if (key.empty()) - _clifo->first(); - else - { - char tipo = (key.mid(0,1))[0]; - long codice = atol(key.mid(1,6)); - _clifo->zero(); - _clifo->put(CLI_TIPOCF, tipo); - _clifo->put(CLI_CODCF, codice); - _clifo->read(); - } - - for(; !_clifo->eof(); _clifo->next()) - { - _prog->addstatus(1); - - char tipocf = _clifo->get_char(CLI_TIPOCF); - long codcf = _clifo->get_long(CLI_CODCF); - - _tclifo->curr() = _clifo->curr(); - - if (_tclifo->read() == NOERR) // Esiste gia' il cliente - { - _tclifo->zero(); - _tclifo->curr() = _clifo->curr(); - _tclifo->rewrite(); - } - else - { - _tclifo->zero(); - _tclifo->curr() = _clifo->curr(); - _tclifo->write(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%c%06ld", tipocf, codcf); - TString sigla (format("%c", 'A')); - _control_rec.overwrite(sigla,240); - _control_rec.overwrite(chiave,241); - - _tras_file.write_control_rec(_control_rec,size); - } - delete _prog; - - //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare - //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di - //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' - //la chiave e' compilata con i dati del file precedente. - - leggi_record_controllo(); - TString chiave,app,sigla; - app.format("%-15s", (const char*) chiave); - char sigla_p = _tras_file.ult_file()[0]; - int posiz = _files.find(sigla_p); - TString nuova_sigla = " "; - if (posiz < _files.len()) - nuova_sigla = _files.mid(posiz+1,1); - - _control_rec.overwrite(nuova_sigla,240); - _control_rec.overwrite(app,241); - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); - -// setta_tabella_ditta(m,"D",FALSE); -// setta_parametri_record(m,"D"); -} - - -void TInv_cont::pcon2tempfile(TString& key, TMask& m) -{ - int size = 256; - - _tras_file.open(_header); - - long items = _pcon->items(); - _prog = new TProgind(items,"Invio Piano dei Conti in corso... Prego attendere.",FALSE); - - _pcon->setkey(1); - - if (key.empty()) - _pcon->first(); - else - { - int gruppo = atoi(key.mid(0,3)); - int conto = atoi(key.mid(3,3)); - long sottoc = atol(key.mid(6,6)); - - _pcon->zero(); - _pcon->put(PCN_GRUPPO, gruppo); - if (conto != 0) - _pcon->put(PCN_CONTO, conto); - if (sottoc != 0) - _pcon->put(PCN_SOTTOCONTO, sottoc); - _pcon->read(); - } - - for(; !_pcon->eof(); _pcon->next()) - { - _prog->addstatus(1); - - int g = _pcon->get_int (PCN_GRUPPO); - int c = _pcon->get_int (PCN_CONTO); - long s = _pcon->get_long(PCN_SOTTOCONTO); - - _tpcon->curr() = _pcon->curr(); - - if (_tpcon->read() == NOERR) // Esiste gia' il cliente - { - _tpcon->zero(); - _tpcon->curr() = _pcon->curr(); - _tpcon->rewrite(); - } - else - { - _tpcon->zero(); - _tpcon->curr() = _pcon->curr(); - _tpcon->write(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%3d%3d%6ld", g, c, s); - TString sigla (format("%c", 'P')); - _control_rec.overwrite(sigla,240); - _control_rec.overwrite(chiave,241); - - _tras_file.write_control_rec(_control_rec,size); - } - delete _prog; - - //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare - //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di - //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' - //la chiave e' compilata con i dati del file precedente. - - leggi_record_controllo(); - TString chiave,app,sigla; - app.format("%-15s", (const char*) chiave); - char sigla_p = _tras_file.ult_file()[0]; - int posiz = _files.find(sigla_p); - TString nuova_sigla = " "; - if (posiz < _files.len()) - nuova_sigla = _files.mid(posiz+1,1); - - _control_rec.overwrite(nuova_sigla,240); - _control_rec.overwrite(app,241); - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); - -// setta_tabella_ditta(m,"D",FALSE); -// setta_parametri_record(m,"D"); -} - -void TInv_cont::primanota_inviata(long numreg) -{ - _mov->setkey(1); - _mov->zero(); - _mov->put(MOV_NUMREG, numreg); - if (_mov->read() == NOERR) - { - _mov->put(MOV_INVIATO, "X"); - if (_flag_bollato) - _mov->put(MOV_STAMPATO, "X"); - - _mov->rewrite(); - } -} - -void TInv_cont::scrivi_righePN(long numreg) -{ - int size = 256; - - _tras_file.open(_header); - - _rmov->setkey(1); - _rmov->zero(); - _rmov->put(RMV_NUMREG, numreg); - TRectype rmov (LF_RMOV); - rmov = _rmov->curr(); - for (_rmov->read(); !_rmov->eof(); _rmov->next()) - { - if (_rmov->curr() > rmov) break; - - _trmov->zero(); - _trmov->curr() = _rmov->curr(); - _trmov->write(); - } -} - -void TInv_cont::movPN2tempfile(TString& key, TMask& m) -{ - int size = 256; - - _tras_file.open(_header); - - long items = _mov->items(); - _prog = new TProgind(items,"Invio movimenti di Primanota in corso... Prego attendere.",FALSE); - - _mov->setkey(1); - - if (key.empty()) - _mov->first(); - else - { - long numreg = atol(key.mid(0,7)); - _mov->zero(); - _mov->put(MOV_NUMREG, numreg); - _mov->read(); - } - - for(; !_mov->eof(); _mov->next()) - { - _prog->addstatus(1); - - long nreg = _mov->get_long(MOV_NUMREG); - - TDate datareg (_mov->get_date(MOV_DATAREG)); - - if ( _mov->get_bool(MOV_INVIATO) || datareg > _datalimsk ) continue; - - _tmov->curr() = _mov->curr(); - - if (_tmov->read() == NOERR) - { - _tmov->zero(); - _tmov->curr() = _mov->curr(); - _tmov->rewrite(); - - scrivi_righePN(nreg); - } - else - { - _tmov->zero(); - _tmov->curr() = _mov->curr(); - _tmov->write(); - - scrivi_righePN(nreg); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%07ld", nreg); - TString sigla (format("%c", 'Z')); - _control_rec.overwrite(sigla,240); - _control_rec.overwrite(chiave,241); - _tras_file.write_control_rec(_control_rec,size); - - primanota_inviata(nreg); - } - delete _prog; - - //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare - //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di - //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' - //la chiave e' compilata con i dati del file precedente. - - leggi_record_controllo(); - TString chiave,app,sigla; - app.format("%-15s", (const char*) chiave); - char sigla_p = _tras_file.ult_file()[0]; - int posiz = _files.find(sigla_p); - TString nuova_sigla = " "; - if (posiz < _files.len()) - nuova_sigla = _files.mid(posiz+1,1); - - _control_rec.overwrite(nuova_sigla,240); - _control_rec.overwrite(app,241); - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); - -// setta_tabella_ditta(m,"D",FALSE); -// setta_parametri_record(m,"D"); -} - -bool TInv_cont::occasionali(const TString& cfpi) -{ - TString chiave; - - _occas->setkey(1); - _occas->zero(); - _occas->put("CFPI", cfpi); - _occas->read(); - - _toccas->zero(); - _toccas->curr() = _occas->curr(); - - if (_toccas->read() == NOERR) - { - _toccas->zero(); - _toccas->curr() = _occas->curr(); - _toccas->rewrite(); - } - else - { - _toccas->zero(); - _toccas->curr() = _occas->curr(); - _toccas->write(); - } - - return TRUE; -} - -void TInv_cont::iva_inviata(long numreg) -{ - _mov->setkey(1); - _mov->zero(); - _mov->put(MOV_NUMREG, numreg); - if (_mov->read() == NOERR) - { - _mov->put(MOV_INVIVA, "X"); - if (_flag_bollato) - _mov->put(MOV_REGST, "X"); - - _mov->rewrite(); - } -} - -void TInv_cont::movIVA2tempfile(TString& key, TMask& m) -{ - TString ocfpi; - TDate datareg; - bool inviva; - int size = 256; - - _tras_file.open(_header); - - long items = _rmoviva->items(); - _prog = new TProgind(items,"Invio movimenti Iva in corso... Prego attendere.",FALSE); - - _rmoviva->setkey(1); - - if (key.empty()) - _rmoviva->first(); - else - { - long numreg = atol(key.mid(0,7)); - _rmoviva->zero(); - _rmoviva->put(RMI_NUMREG, numreg); - _rmoviva->put(RMI_NUMRIG, 1); - _rmoviva->read(); - } - - long nreg_p = -1; - - for(; !_rmoviva->eof(); _rmoviva->next()) - { - _prog->addstatus(1); - - long nreg = _rmoviva->get_long(RMI_NUMREG); - - if (nreg != nreg_p) - { - _mov->setkey(1); - _mov->zero(); - _mov->put(MOV_NUMREG, nreg); - if (_mov->read() == NOERR) - { - datareg = _mov->get_date(MOV_DATAREG); - inviva = _mov->get_bool(MOV_INVIVA); - ocfpi = _mov->get (MOV_OCFPI); - } - } - else - inviva = FALSE; - - if ( inviva || datareg > _datalimsk ) continue; - - if (ocfpi.not_empty()) - occasionali(ocfpi); - - _triva->zero(); - _triva->curr() = _rmoviva->curr(); - - if (_triva->read() == NOERR) - { - _triva->zero(); - _triva->curr() = _rmoviva->curr(); - _triva->rewrite(); - } - else - { - _triva->zero(); - _triva->curr() = _rmoviva->curr(); - _triva->write(); - } - - leggi_record_controllo(); - TString chiave; - chiave.format("%07ld", nreg); - TString sigla (format("%c", 'U')); - _control_rec.overwrite(sigla,240); - _control_rec.overwrite(chiave,241); - - _tras_file.write_control_rec(_control_rec,size); - - if (nreg != nreg_p) - iva_inviata(nreg); - - nreg_p = nreg; - } - delete _prog; - - //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare - //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di - //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' - //la chiave e' compilata con i dati del file precedente. - - leggi_record_controllo(); - TString chiave,app,sigla; - app.format("%-15s", (const char*) chiave); - char sigla_p = _tras_file.ult_file()[0]; - int posiz = _files.find(sigla_p); - TString nuova_sigla = " "; - if (posiz < _files.len()) - nuova_sigla = _files.mid(posiz+1,1); - - _control_rec.overwrite(nuova_sigla,240); - _control_rec.overwrite(app,241); - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); - -// setta_tabella_ditta(m,"D",FALSE); -// setta_parametri_record(m,"D"); -} - -bool TInv_cont::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return main_loop(); - return FALSE; -} - -int cg6900 (int argc, char* argv[]) -{ - switch (*argv[2]) - { - case 'S': - { - TInv_cont main_app(*argv[2]); - main_app.run(argc, argv,main_app._titolo); - } - break; - case 'P': - { - TInv_cont main_app(*argv[2]); - main_app.run(argc, argv,main_app._titolo); - } - break; - case 'L': - { - TLista_archivi a; - a.run(argc, argv,"Lista controllo archivi"); - } - break; - case 'R': - { - TRip_flag a; - a.run(argc, argv,"Ripristino flag movimenti"); - } - break; - default: - break; - } - - return TRUE; -} +// Invio contabilita' + +#include "cg6900.h" +#include "cg6900a.h" + +TInv_cont::TInv_cont(char mov) : _scelta(toupper(mov)) +{ + switch (_scelta) + { + case 'S': + _titolo = "Invio a Sistema"; + break; + case 'P': + _titolo = "Invio a PC"; + break; + default: + break; + } +} + +bool TInv_cont::messaggio_hnd(TMask_field& f, KEY k) +{ + if (k == K_TAB) + return message_box("Rilevato STATO DI RIPARTENZA: il trasferimento ripartira' automaticamente"); + + return TRUE; +} + +bool TInv_cont::main_loop() +{ + TString str; + bool ripartenza = FALSE; + + if (!esiste_tabella_studio()) return FALSE; + + if (!esegui_controlli()) return FALSE; + + TMask msk ("cg6900a"); + KEY tasto; + + if (_ditta != 0) + { + msk.set(F_DITTAINV, _ditta); + msk.disable(F_DITTAINV); + codifica_ditta(msk); + msk.set(F_NUMULINV, _num); + msk.set(F_DATAULIN, _data.string()); + msk.set(F_STATO, _stato); + + TString uselab = _tras_file.ult_file(); + TString chiave = _tras_file.key(); + msk.set(F_USELAB, uselab); + msk.set(F_CHIAVE, chiave); + msk.set(F_DATALIM, _data.string()); + msk.disable(F_DATALIM); + + ripartenza = TRUE; + } + + msk.disable(F_NUMULINV); + msk.disable(F_DATAULIN); + msk.disable(F_STATO); + msk.disable(F_USELAB); + msk.disable(F_CHIAVE); + + if (!ripartenza) + msk.set_handler(F_DITTAINV, setta_maschera_hnd); + else + msk.set_handler(F_NUMULINV, messaggio_hnd); + + tasto = msk.run(); + + if (tasto != K_ENTER) return FALSE; + +// Nel caso di invio PC --> SISTEMA eseguo prima la +// Lista controllo archivi per rilevare eventuali +// differenze. + + long ditta = msk.get_long(F_DITTAINV); + set_firm(ditta); + + TConfig conf(CONFIG_DITTA); + TString std = conf.get("FlStInv"); + + if (_scelta == 'S' && std != "D") + { + TString appname = "cg6 -8 L"; + TString corpo = ""; + + TDate data = msk.get(F_DATALIM); + + corpo << data.string(); + + TMessage mess (appname,"",(const char*)corpo); + TMailbox mb; + mb.send(mess); + + TExternal_app a (appname); + a.run(); + + TMailbox m; + TMessage* msg = m.next_s(""); + int subj; + + if (msg != NULL) + { + subj = atoi(msg->body()); + if (subj) + return FALSE; + } + } + + _datalimsk = msk.get(F_DATALIM); + + if (!ripartenza) + { + crea_marker(msk); //Crea il record con le informazioni sul marker + setta_parametri_record(msk,"F"); //Aggiorna parametri contabili ditta + setta_tabella_studio(msk); //Aggiorna la tabella studio per invio + setta_tabella_ditta(msk,"F"); //Aggiorna la tabella ditta per invio + crea_record_controllo(msk); //Crea il record di controllo sul file header + } + else + { + TString str,app; + + int num = msk.get_int(F_NUMULINV); + TString data (msk.get(F_DATALIM)); + app = riconverti(data,FALSE); + str.format("%03d%6s", num, (const char*) app); + aggiorna_marker(str,14); + } + + apri_file_temp(); + + if (!invio_tempfile(msk)) + return FALSE; + +// calcola_totale_record(); +// str.format("%06ld", _tot_rec); + + if (_scelta == 'S') + { +// aggiorna_marker(str,23); + + _trasf = ""; + _trasf = firm2dir(0); + _trasf << "\\trasfer"; + fremove(_trasf); + _tras_file.open(_trasf,TRUE); + +// if (std != "D") + invio_contabilita(); //Costruisce il trasfer nella directory comune + + TMask mask ("cg6900b"); + KEY k; + + k = mask.run(); + + if (k == K_ENTER) + { + int num_disk = calcola_numero_dischi(mask); + char floppy = mask.get(F_FLOPPY)[0]; + + str.format("%02d", num_disk); + aggiorna_marker(str,29); + + const TFilename from(_trasf); // File da splittare + + TFilename work; + work << floppy << ":/" << from.name(); // File su dischetto + + FILE* i = fopen(from, "rb"); + + if (i == NULL) return error_box("Impossibile aprire il file '%s'", from); + + TProgind w(_dim_tot, "Trasferimento su dischetti in corso... Prego attendere", TRUE, TRUE, 60); + + for (int j = 0; j < num_disk; j++) + { + scrivi_disco(floppy,j+1,work,i,w); + } + fclose(i); + + setta_tabella_studio(msk,FALSE); //Aggiorna la tabella studio per invio + setta_tabella_ditta(msk," ",FALSE); //Aggiorna la tabella ditta per invio + setta_parametri_record(msk," "); //Aggiorna parametri contabili ditta + + _tras_file.open(_header); + leggi_record_controllo(); + TString record(256); + record.format("%-256s",(const char*) record); + _control_rec.overwrite(record,0); + _tras_file.write_control_rec(_control_rec,256); + + chiudi_file_temp(); + } + else + return FALSE; + } + else + if (_scelta == 'P') + { + aggiorna_marker(str,24); + + TMask mask ("cg6900b"); + KEY k; + + mask.disable(F_DIM); + + k = mask.run(); + + if (k == K_ENTER) + { + char floppy = mask.get(F_FLOPPY)[0]; + TString flp = mask.get(F_FLOPPY); + TFilename firm; + firm.tempdir(); + firm << "\\ftemp"; + TString desc = ""; + + make_dir(firm); + _tras_file.open(_header); + TString sigle = _tras_file.sigle_file(); + sigle.trim(); + + TString dir = firm2dir(0); + + chiudi_file_temp(); + + _tras_file.temp_dir(dir,firm,sigle); + + _arc.backup(firm, floppy, desc); + + TString orig = dir; orig << "\\marker"; + TString dest = flp << ":"; dest << "\\marker"; + fcopy(orig,dest); + + setta_tabella_studio(msk,FALSE); //Aggiorna la tabella studio per invio + setta_tabella_ditta(msk," ",FALSE); //Aggiorna la tabella ditta per invio + setta_parametri_record(msk," "); //Aggiorna parametri contabili ditta + _tras_file.canc_file_dir_temp(firm); //Cancella i file della directory temporanea ftemp + } + else + return FALSE; + } + + _tras_file.remove_all(FALSE); + fremove(_marker); + _trasf = ""; + _trasf = firm2dir(0); + _trasf << "\\trasfer"; + fremove(_trasf); + + return FALSE; +} + +bool TInv_cont::create() +{ + TApplication::create(); + + _caus = new TLocalisamfile (LF_CAUSALI); + _rcaus = new TLocalisamfile (LF_RCAUSALI); + _clifo = new TLocalisamfile (LF_CLIFO); + _pcon = new TLocalisamfile (LF_PCON); + _mov = new TLocalisamfile (LF_MOV); + _rmov = new TLocalisamfile (LF_RMOV); + _rmoviva = new TLocalisamfile (LF_RMOVIVA); + _occas = new TLocalisamfile (LF_OCCAS); + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool TInv_cont::destroy() +{ + delete _caus; + delete _rcaus; + delete _clifo; + delete _pcon; + delete _mov; + delete _rmov; + delete _rmoviva; + delete _occas; + + return TApplication::destroy(); +} + +void TInv_cont::apri_file_temp() +{ + _tras_file.open(_header); + leggi_record_controllo(); + _sigle = _tras_file.sigle_file(); + _sigle.trim(); + + for (int i = 0; i < _sigle.len(); i++) + { + TString80 tmp; + char sigla = _sigle[i]; + + if (sigla == 'W') + { + TString80 tmpcaus = "%"; + tmpcaus << firm2dir(0); + tmpcaus << "\\" << TEMP_CAUS; + tmp = tmpcaus.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _tcaus = new TIsamtempfile(LF_CAUSALI, tmpcaus, FALSE); + else + _tcaus = new TIsamtempfile(LF_CAUSALI, tmpcaus, TRUE); + TString80 tmprcaus = "%"; + tmprcaus << firm2dir(0); + tmprcaus << "\\" << TEMP_RCAUS; + tmp = tmprcaus.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _trcaus = new TIsamtempfile(LF_RCAUSALI, tmprcaus, FALSE); + else + _trcaus = new TIsamtempfile(LF_RCAUSALI, tmprcaus, TRUE); + } + if (sigla == 'A') + { + TString80 tmpclifo = "%"; + tmpclifo << firm2dir(0); + tmpclifo << "\\" << TEMP_CLIFO; + tmp = tmpclifo.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _tclifo = new TIsamtempfile(LF_CLIFO, tmpclifo, FALSE); + else + _tclifo = new TIsamtempfile(LF_CLIFO, tmpclifo, TRUE); + } + if (sigla == 'P') + { + TString80 tmppcon = "%"; + tmppcon << firm2dir(0); + tmppcon << "\\" << TEMP_PCON; + tmp = tmppcon.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _tpcon = new TIsamtempfile(LF_PCON, tmppcon, FALSE); + else + _tpcon = new TIsamtempfile(LF_PCON, tmppcon, TRUE); + } + if (sigla == 'Z') + { + TString80 tmpmov = "%"; + tmpmov << firm2dir(0); + tmpmov << "\\" << TEMP_MOV; + tmp = tmpmov.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _tmov = new TIsamtempfile(LF_MOV, tmpmov, FALSE); + else + _tmov = new TIsamtempfile(LF_MOV, tmpmov, TRUE); + TString80 tmprmov = "%"; + tmprmov << firm2dir(0); + tmprmov << "\\" << TEMP_RMOV; + tmp = tmprmov.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _trmov = new TIsamtempfile(LF_RMOV, tmprmov, FALSE); + else + _trmov = new TIsamtempfile(LF_RMOV, tmprmov, TRUE); + } + if (sigla == 'U') + { + TString80 tmpriva = "%"; + tmpriva << firm2dir(0); + tmpriva << "\\" << TEMP_RMOVIVA; + tmp = tmpriva.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _triva = new TIsamtempfile(LF_RMOVIVA, tmpriva, FALSE); + else + _triva = new TIsamtempfile(LF_RMOVIVA, tmpriva, TRUE); + TString80 tmpoccas = "%"; + tmpoccas << firm2dir(0); + tmpoccas << "\\" << TEMP_OCC; + tmp = tmpoccas.mid(1); + tmp << ".dbf"; + if (fexist(tmp)) + _toccas = new TIsamtempfile(LF_OCCAS, tmpoccas, FALSE); + else + _toccas = new TIsamtempfile(LF_OCCAS, tmpoccas, TRUE); + } + } +} + +void TInv_cont::chiudi_file_temp() +{ + for (int i = 0; i < _sigle.len(); i++) + { + char sigla = _sigle[i]; + + if (sigla == 'W') + { + delete _tcaus; + delete _trcaus; + } + if (sigla == 'A') + delete _tclifo; + if (sigla == 'P') + delete _tpcon; + if (sigla == 'Z') + { + delete _tmov; + delete _trmov; + } + if (sigla == 'U') + { + delete _triva; + delete _toccas; + } + } +} + +void TInv_cont::leggi_record_controllo() +{ + _tras_file.read_control_rec(); + _control_rec = _tras_file.record(); +} + +bool TInv_cont::esiste_tabella_studio() +{ + TTable ins ("%INS"); + + ins.zero(); + + if (ins.first() == NOERR) + { + if (ins.empty()) + return error_box("Codice STUDIO NON ATTIVATO in tabella invii"); + else + { + _nome_simbolico = ins.get("S0"); + long ditta = ins.get_long("I0"); + if (ditta != 0) + { + _esiste_ditta = TRUE; + _ditta = ditta; + } + else + { + _esiste_ditta = FALSE; + _ditta = 0; + } + } + } + else + return error_box("Codice STUDIO NON ATTIVATO in tabella invii"); + + return TRUE; +} + +bool TInv_cont::leggi_header() +{ + _header = ""; + _header = firm2dir(0); + _header << HEADER; + + _tras_file.open(_header); + + if (_tras_file.exist()) + { + if (_tras_file.read_control_rec()) + { + _control_rec = _tras_file.record(); + if (!record_controllo()) + return FALSE; + } + else + return FALSE; + } + else + return FALSE; + + return TRUE; +} + +bool TInv_cont::record_controllo() +{ + TString tiporecord = _control_rec.sub(0,2); + + if (tiporecord != " 1") + return FALSE; + + return TRUE; +} + +bool TInv_cont::esegui_controlli() +{ + _esiste_record = leggi_header(); + + if (!controlli()) return FALSE; + + return TRUE; +} + +void TInv_cont::setta_parametri_record(TMask& m,const TString& flag) +{ + TConfig conf (CONFIG_DITTA); + conf.set("FlStInv", flag); +} + +bool TInv_cont::controlli() +{ + if (!_esiste_ditta && !_esiste_record) return TRUE; //Mi trovo in una condizione normale + + if (_esiste_ditta && !_esiste_record) + return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto"); + + if (!_esiste_ditta && _esiste_record) + return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto"); + + if (_esiste_ditta && _esiste_record) + { + if (!sub_controlli()) + return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto"); + } + + return TRUE; +} + +bool TInv_cont::sub_controlli() +{ + long ditta_trasfer = _tras_file.ditta(); + + if (_ditta == ditta_trasfer) + { + if (!prefix().exist(_ditta)) + return FALSE; + + if (!tabella_ditta()) + return FALSE; + } + else + return FALSE; + + if (!controlla_stato_invio()) + return FALSE; + + if (!numero_data()) + return FALSE; + + return TRUE; +} + +bool TInv_cont::tabella_ditta() +{ + TTable ind ("%IND"); + TString dep; + + dep.format("%05d", _ditta); + + ind.zero(); + ind.put("CODTAB", dep); + if (ind.read() == NOERR) + { + _stato = ind.get("S6"); + _num = ind.get_int("I0"); + _data = ind.get_date("D0"); + + _files = ""; + if (ind.get_bool("B0")) + _files << "W"; + + if (ind.get_bool("B1")) + _files << "A"; + + if (ind.get_bool("B2")) + _files << "P"; + + if (ind.get_bool("B3")) + _files << "Z"; + + if (ind.get_bool("B4")) + _files << "U"; + + if (ind.get_bool("B5")) + _files << "B"; + + _flag_bollato = ind.get_bool("B7"); + + return TRUE; + } + + return FALSE; +} + +bool TInv_cont::controlla_stato_invio() +{ + set_firm(_ditta); + + TConfig conf(CONFIG_DITTA); + _std = conf.get("FlStInv"); + + if (_stato != _std) + return FALSE; + else + { + TString uselab = _tras_file.ult_file(); + + if (_stato == "D" && uselab != "") + return FALSE; + } + + return TRUE; +} + +bool TInv_cont::numero_data() +{ + int num = _tras_file.nultras(); + TString str = _tras_file.dataultras(); + TDate data (str); + + if (_num != num || data != _data) + return FALSE; + + return TRUE; +} + +void TInv_cont::codifica_ditta(TMask& m) +{ + TLocalisamfile ditte (LF_NDITTE); + + long ditta = m.get_long(F_DITTAINV); + + ditte.setkey(1); + ditte.zero(); + ditte.put(NDT_CODDITTA, ditta); + if (ditte.read() == NOERR) + { + TString ragsoc = ditte.get(NDT_RAGSOC); + m.set(F_RAGSOC, ragsoc); + } +} + +bool TInv_cont::setta_maschera_hnd(TMask_field& f, KEY k) +{ + if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running()) + { + app()._ditta = f.mask().get_long(F_DITTAINV); + if (!prefix().exist(app()._ditta)) + return error_box("La ditta indicata non e' abilitata alla contabilita'"); + + if (!app().tabella_ditta()) + return error_box("La ditta indicata non e' presente sulla tabella ditta per invio"); + + if (app()._stato != "") + return error_box("Rilevato STATO DI RIPARTENZA NON RECUPERABILE sulla ditta richiesta"); + + f.mask().set(F_DITTAINV, app()._ditta); + app().codifica_ditta(f.mask()); + f.mask().set(F_NUMULINV, app()._num); + f.mask().set(F_DATAULIN, app()._data.string()); + f.mask().set(F_STATO, app()._stato); + } + + return TRUE; +} + +void TInv_cont::crea_marker(TMask& m) +{ + TString str; + + _marker = ""; + _marker = firm2dir(0); + _marker << "\\marker"; + + FILE* i; + + const word size = 64; + TString buffer(size); + buffer.spaces(); + + if ( (i = fopen(_marker,"w+t")) != NULL) + { + if (_scelta == 'S') + { + str = format("%-10s", (const char*) _nome_simbolico); + buffer.overwrite(str,0); + long ditta = m.get_long(F_DITTAINV); + str = format("%04d", ditta); + buffer.overwrite(str,10); + int num = m.get_int(F_NUMULINV); + num++; + str = format("%03d", num); + buffer.overwrite(str,14); + TString data (m.get(F_DATALIM)); + str = riconverti(data,FALSE); + buffer.overwrite(str,17); + } + else + if (_scelta == 'P') + { + str = format("%-10s", (const char*) _nome_simbolico); + buffer.overwrite(str,0); + long ditta = m.get_long(F_DITTAINV); + str = format("%05d", ditta); + buffer.overwrite(str,10); + int num = m.get_int(F_NUMULINV); + num++; + str = format("%03d", num); + buffer.overwrite(str,15); + TString data (m.get(F_DATALIM)); + str = riconverti(data,FALSE); + buffer.overwrite(str,18); + } + + buffer.cut(64); //Sicurezza: le stringhe dimensionate in realta' sono + //leggermente piu' lunghe della dimensione specificata + const word scritti = fwrite((char*)(const char*)buffer,sizeof(char),size,i); + + fclose(i); + } +} + +void TInv_cont::aggiorna_marker(TString& token, int pos) +{ + TString str; + + _marker = ""; + _marker = firm2dir(0); + _marker << "\\marker"; + + FILE* i; + + const word size = 64; + TString buffer(size); + //buffer.spaces(); + + if ( (i = fopen(_marker,"r+t")) != NULL) + { + const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i); + buffer.overwrite(token,pos); + + buffer.cut(64); //Sicurezza: le stringhe dimensionate in realta' sono + //leggermente piu' lunghe della dimensione specificata + fseek(i, 0L, SEEK_SET); + const word scritti = fwrite((char*)(const char*)buffer,sizeof(char),size,i); + + fclose(i); + } +} + +void TInv_cont::calcola_totale_record() +{ + _tras_file.open(_header); + leggi_record_controllo(); + + TString sigle = _tras_file.sigle_file(); + sigle.trim(); + + _tot_rec = 0; + + for (int i = 0; i < sigle.len(); i++) + { + long tot_rec = atol(_control_rec.mid((i * 6) + 50,6)); + _tot_rec += tot_rec; + } + _tot_rec += 1; +} + +void TInv_cont::setta_tabella_studio(TMask& m,bool flag_ditta) +{ + TTable ins ("%INS"); + TString dep; + long ditta; + + if (flag_ditta) + ditta = m.get_long(F_DITTAINV); + else + ditta = 0; + + dep.format("%-3s", (const char*) "INS"); + + ins.zero(); + ins.put("CODTAB", dep); + if (ins.read() == NOERR) + { + ins.put("I0", ditta); + ins.rewrite(); + } + else + warning_box("Tabella studio per invio NON AGGIORNATA"); +} + +void TInv_cont::setta_tabella_ditta(TMask& m,const char* flag, bool comp) +{ + TTable ind ("%IND"); + TString dep; + + long ditta = m.get_long(F_DITTAINV); + + dep.format("%05d", ditta); + + ind.zero(); + ind.put("CODTAB", dep); + if (ind.read() == NOERR) + { + int num = m.get_int(F_NUMULINV); + num++; + TDate data (m.get(F_DATALIM)); + + ind.put("S6", flag); + if (comp) + { + ind.put("I0", (long)num); + ind.put("D0", data); + } + ind.rewrite(); + } + else + warning_box("Tabella ditta per invio NON AGGIORNATA"); +} + +void TInv_cont::crea_record_controllo(TMask& m) +{ + int size = 256; + TString buffer(256); + TString str; + + if (_tras_file.exist()) + _tras_file.open(_header); + else + { + _tras_file.open(_header,TRUE); //Metto il parametro TRUE (che di default e' FALSE), perche' voglio creare un file che non e' ancore esistente + + buffer.spaces(); + buffer.overwrite(" 1",0); //Tipo record + + str = format("%-10s", (const char*) _nome_simbolico); + buffer.overwrite(str,15); //Nome studio + + long ditta = m.get_long(F_DITTAINV); + str = format("%05d", ditta); + buffer.overwrite(str,25); //Ditta inviante + + int num = m.get_int(F_NUMULINV); + num++; + str = format("%03d", num); + buffer.overwrite(str,30); //Numero progr. invio + + TString data (m.get(F_DATALIM)); + str = riconverti(data,TRUE); + buffer.overwrite(str,33); //Data limite invio + + str = format("%-9s", (const char*) _files); + buffer.overwrite(str,41); + + str = _files.sub(0,1); + buffer.overwrite(str,240); + + str = ""; + str.format("%054d", 0); + buffer.overwrite(str,50); + + if (!_tras_file.write_control_rec(buffer, size)) + warning_box("Il record di controllo del file trasfer non e' stato aggiornato correttamente"); + } + _tras_file.close(); +} + +const char* TInv_cont::cerca_provincia(const TString& comcf) +{ + TLocalisamfile comuni(LF_COMUNI); + + comuni.setkey(1); + comuni.zero(); + comuni.put(COM_COM, comcf); + if (comuni.read() == NOERR) + TEMP = comuni.get(COM_PROVCOM); + else + TEMP = ""; + + return TEMP; +} + +bool TInv_cont::invio_tempfile(TMask& m) +{ + char uselab; + TString record(256),key,nrec; + int posiz,i; + char sigla; + + _tras_file.open(_header); + + leggi_record_controllo(); + + uselab = (_tras_file.ult_file())[0]; + + if (uselab == '\0') //Significa che sono in caso di ripartenza ma ho + return TRUE; //gia' trasferito tutti gli archivi e devo solo fare la copia su dischi + + posiz = _files.find(uselab); //Ritorna la posizione della sigla all'interno della schiera + key = _tras_file.key(); + key.trim(); + nrec = _tras_file.nrec_file(); + + for (i = posiz; i < _files.len();i++) + { + sigla = _files[i]; + _numrec = atol(nrec.mid(i * 6,6)); + + switch (sigla) + { + case 'W': + causali2tempfile(key,m); + break; + + case 'A': + clifo2tempfile(key,m); + break; + + case 'P': + pcon2tempfile(key,m); + break; + + case 'Z': + movPN2tempfile(key,m); + break; + + case 'U': + movIVA2tempfile(key,m); + break; + + default: + break; + }; + key = ""; + } + + // Finito di trasferire tutti gli archivi pulisco la sigla ultimo file da elaborare + _tras_file.open(_header); + leggi_record_controllo(); + _control_rec.overwrite(" ",240); + _tras_file.write_control_rec(_control_rec,256); + _tras_file.close(); + + setta_tabella_ditta(m,"D",FALSE); + setta_parametri_record(m,"D"); + + return TRUE; +} + +void TInv_cont::causali2tempfile(TString& key, TMask& m) +{ + int size = 256; + + _tras_file.open(_header); + + long items = _caus->items(); + _prog = new TProgind(items,"Invio tabella causali in corso... Prego attendere.",FALSE); + + _caus->setkey(1); + + if (key.empty()) + _caus->first(); + else + { + TString causale (key.mid(0,3)); + _caus->zero(); + _caus->put(CAU_CODCAUS, causale); + _caus->read(); + } + + for(; !_caus->eof(); _caus->next()) + { + _prog->addstatus(1); + + TString codcaus = _caus->get(CAU_CODCAUS); + + _tcaus->curr() = _caus->curr(); + + if (_tcaus->read() == NOERR) // Esiste la testata + { + scrivi_righe_causali(codcaus,'W'); + + _tcaus->zero(); + _tcaus->curr() = _caus->curr(); + _tcaus->rewrite(); + } + else + { + scrivi_righe_causali(codcaus,'W'); + + _tcaus->zero(); + _tcaus->curr() = _caus->curr(); + _tcaus->write(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%3s",(const char*) codcaus); + _control_rec.overwrite("W",240); + _control_rec.overwrite(chiave,241); + + _tras_file.write_control_rec(_control_rec,size); + } + delete _prog; + + //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare + //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di + //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' + //la chiave e' compilata con i dati del file precedente. + + leggi_record_controllo(); + TString chiave,app,sigla; + app.format("%-15s", (const char*) chiave); + char sigla_p = _tras_file.ult_file()[0]; + int posiz = _files.find(sigla_p); + TString nuova_sigla = " "; + if (posiz < _files.len()) + nuova_sigla = _files.mid(posiz+1,1); + + _control_rec.overwrite(nuova_sigla,240); + _control_rec.overwrite(app,241); + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); + +// setta_tabella_ditta(m,"D",FALSE); +// setta_parametri_record(m,"D"); +} + +void TInv_cont::cancella_righe_causali(TString& codcaus) +{ + _trcaus->setkey(1); + _trcaus->zero(); + _trcaus->put(RCA_CODCAUS, codcaus); + TRectype rcau (LF_RCAUSALI); + rcau = _trcaus->curr(); + for (_trcaus->read(); !_trcaus->eof(); _trcaus->next()) + { + if (_trcaus->curr() > rcau) break; + + _trcaus->remove(); + } +} + +void TInv_cont::scrivi_righe_causali(TString& codcaus, char uselab) +{ + cancella_righe_causali(codcaus); + + _rcaus->setkey(1); + _rcaus->zero(); + _rcaus->put(RCA_CODCAUS, codcaus); + TRectype rcau (LF_RCAUSALI); + rcau = _rcaus->curr(); + for (_rcaus->read(); !_rcaus->eof(); _rcaus->next()) + { + if (_rcaus->curr() > rcau) break; + + _trcaus->curr() = _rcaus->curr(); + _trcaus->write(); + + leggi_record_controllo(); + TString chiave; + chiave.format("%3s",(const char*) codcaus); + TString sigla (format("%c", uselab)); + _control_rec.overwrite(sigla,240); + _control_rec.overwrite(chiave,241); + _tras_file.write_control_rec(_control_rec,256); + } +} + +void TInv_cont::clifo2tempfile(TString& key, TMask& m) +{ + int size = 256; + + _tras_file.open(_header); + + long items = _clifo->items(); + _prog = new TProgind(items,"Invio Clienti / Fornitori in corso... Prego attendere.",FALSE); + + _clifo->setkey(1); + + if (key.empty()) + _clifo->first(); + else + { + char tipo = (key.mid(0,1))[0]; + long codice = atol(key.mid(1,6)); + _clifo->zero(); + _clifo->put(CLI_TIPOCF, tipo); + _clifo->put(CLI_CODCF, codice); + _clifo->read(); + } + + for(; !_clifo->eof(); _clifo->next()) + { + _prog->addstatus(1); + + char tipocf = _clifo->get_char(CLI_TIPOCF); + long codcf = _clifo->get_long(CLI_CODCF); + + _tclifo->curr() = _clifo->curr(); + + if (_tclifo->read() == NOERR) // Esiste gia' il cliente + { + _tclifo->zero(); + _tclifo->curr() = _clifo->curr(); + _tclifo->rewrite(); + } + else + { + _tclifo->zero(); + _tclifo->curr() = _clifo->curr(); + _tclifo->write(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%c%06ld", tipocf, codcf); + TString sigla (format("%c", 'A')); + _control_rec.overwrite(sigla,240); + _control_rec.overwrite(chiave,241); + + _tras_file.write_control_rec(_control_rec,size); + } + delete _prog; + + //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare + //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di + //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' + //la chiave e' compilata con i dati del file precedente. + + leggi_record_controllo(); + TString chiave,app,sigla; + app.format("%-15s", (const char*) chiave); + char sigla_p = _tras_file.ult_file()[0]; + int posiz = _files.find(sigla_p); + TString nuova_sigla = " "; + if (posiz < _files.len()) + nuova_sigla = _files.mid(posiz+1,1); + + _control_rec.overwrite(nuova_sigla,240); + _control_rec.overwrite(app,241); + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); + +// setta_tabella_ditta(m,"D",FALSE); +// setta_parametri_record(m,"D"); +} + + +void TInv_cont::pcon2tempfile(TString& key, TMask& m) +{ + int size = 256; + + _tras_file.open(_header); + + long items = _pcon->items(); + _prog = new TProgind(items,"Invio Piano dei Conti in corso... Prego attendere.",FALSE); + + _pcon->setkey(1); + + if (key.empty()) + _pcon->first(); + else + { + int gruppo = atoi(key.mid(0,3)); + int conto = atoi(key.mid(3,3)); + long sottoc = atol(key.mid(6,6)); + + _pcon->zero(); + _pcon->put(PCN_GRUPPO, gruppo); + if (conto != 0) + _pcon->put(PCN_CONTO, conto); + if (sottoc != 0) + _pcon->put(PCN_SOTTOCONTO, sottoc); + _pcon->read(); + } + + for(; !_pcon->eof(); _pcon->next()) + { + _prog->addstatus(1); + + int g = _pcon->get_int (PCN_GRUPPO); + int c = _pcon->get_int (PCN_CONTO); + long s = _pcon->get_long(PCN_SOTTOCONTO); + + _tpcon->curr() = _pcon->curr(); + + if (_tpcon->read() == NOERR) // Esiste gia' il cliente + { + _tpcon->zero(); + _tpcon->curr() = _pcon->curr(); + _tpcon->rewrite(); + } + else + { + _tpcon->zero(); + _tpcon->curr() = _pcon->curr(); + _tpcon->write(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%3d%3d%6ld", g, c, s); + TString sigla (format("%c", 'P')); + _control_rec.overwrite(sigla,240); + _control_rec.overwrite(chiave,241); + + _tras_file.write_control_rec(_control_rec,size); + } + delete _prog; + + //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare + //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di + //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' + //la chiave e' compilata con i dati del file precedente. + + leggi_record_controllo(); + TString chiave,app,sigla; + app.format("%-15s", (const char*) chiave); + char sigla_p = _tras_file.ult_file()[0]; + int posiz = _files.find(sigla_p); + TString nuova_sigla = " "; + if (posiz < _files.len()) + nuova_sigla = _files.mid(posiz+1,1); + + _control_rec.overwrite(nuova_sigla,240); + _control_rec.overwrite(app,241); + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); + +// setta_tabella_ditta(m,"D",FALSE); +// setta_parametri_record(m,"D"); +} + +void TInv_cont::primanota_inviata(long numreg) +{ + _mov->setkey(1); + _mov->zero(); + _mov->put(MOV_NUMREG, numreg); + if (_mov->read() == NOERR) + { + _mov->put(MOV_INVIATO, "X"); + if (_flag_bollato) + _mov->put(MOV_STAMPATO, "X"); + + _mov->rewrite(); + } +} + +void TInv_cont::scrivi_righePN(long numreg) +{ + int size = 256; + + _tras_file.open(_header); + + _rmov->setkey(1); + _rmov->zero(); + _rmov->put(RMV_NUMREG, numreg); + TRectype rmov (LF_RMOV); + rmov = _rmov->curr(); + for (_rmov->read(); !_rmov->eof(); _rmov->next()) + { + if (_rmov->curr() > rmov) break; + + _trmov->zero(); + _trmov->curr() = _rmov->curr(); + _trmov->write(); + } +} + +void TInv_cont::movPN2tempfile(TString& key, TMask& m) +{ + int size = 256; + + _tras_file.open(_header); + + long items = _mov->items(); + _prog = new TProgind(items,"Invio movimenti di Primanota in corso... Prego attendere.",FALSE); + + _mov->setkey(1); + + if (key.empty()) + _mov->first(); + else + { + long numreg = atol(key.mid(0,7)); + _mov->zero(); + _mov->put(MOV_NUMREG, numreg); + _mov->read(); + } + + for(; !_mov->eof(); _mov->next()) + { + _prog->addstatus(1); + + long nreg = _mov->get_long(MOV_NUMREG); + + TDate datareg (_mov->get_date(MOV_DATAREG)); + + if ( _mov->get_bool(MOV_INVIATO) || datareg > _datalimsk ) continue; + + _tmov->curr() = _mov->curr(); + + if (_tmov->read() == NOERR) + { + _tmov->zero(); + _tmov->curr() = _mov->curr(); + _tmov->rewrite(); + + scrivi_righePN(nreg); + } + else + { + _tmov->zero(); + _tmov->curr() = _mov->curr(); + _tmov->write(); + + scrivi_righePN(nreg); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%07ld", nreg); + TString sigla (format("%c", 'Z')); + _control_rec.overwrite(sigla,240); + _control_rec.overwrite(chiave,241); + _tras_file.write_control_rec(_control_rec,size); + + primanota_inviata(nreg); + } + delete _prog; + + //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare + //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di + //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' + //la chiave e' compilata con i dati del file precedente. + + leggi_record_controllo(); + TString chiave,app,sigla; + app.format("%-15s", (const char*) chiave); + char sigla_p = _tras_file.ult_file()[0]; + int posiz = _files.find(sigla_p); + TString nuova_sigla = " "; + if (posiz < _files.len()) + nuova_sigla = _files.mid(posiz+1,1); + + _control_rec.overwrite(nuova_sigla,240); + _control_rec.overwrite(app,241); + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); + +// setta_tabella_ditta(m,"D",FALSE); +// setta_parametri_record(m,"D"); +} + +bool TInv_cont::occasionali(const TString& cfpi) +{ + TString chiave; + + _occas->setkey(1); + _occas->zero(); + _occas->put("CFPI", cfpi); + _occas->read(); + + _toccas->zero(); + _toccas->curr() = _occas->curr(); + + if (_toccas->read() == NOERR) + { + _toccas->zero(); + _toccas->curr() = _occas->curr(); + _toccas->rewrite(); + } + else + { + _toccas->zero(); + _toccas->curr() = _occas->curr(); + _toccas->write(); + } + + return TRUE; +} + +void TInv_cont::iva_inviata(long numreg) +{ + _mov->setkey(1); + _mov->zero(); + _mov->put(MOV_NUMREG, numreg); + if (_mov->read() == NOERR) + { + _mov->put(MOV_INVIVA, "X"); + if (_flag_bollato) + _mov->put(MOV_REGST, "X"); + + _mov->rewrite(); + } +} + +void TInv_cont::movIVA2tempfile(TString& key, TMask& m) +{ + TString ocfpi; + TDate datareg; + bool inviva; + int size = 256; + + _tras_file.open(_header); + + long items = _rmoviva->items(); + _prog = new TProgind(items,"Invio movimenti Iva in corso... Prego attendere.",FALSE); + + _rmoviva->setkey(1); + + if (key.empty()) + _rmoviva->first(); + else + { + long numreg = atol(key.mid(0,7)); + _rmoviva->zero(); + _rmoviva->put(RMI_NUMREG, numreg); + _rmoviva->put(RMI_NUMRIG, 1); + _rmoviva->read(); + } + + long nreg_p = -1; + + for(; !_rmoviva->eof(); _rmoviva->next()) + { + _prog->addstatus(1); + + long nreg = _rmoviva->get_long(RMI_NUMREG); + + if (nreg != nreg_p) + { + _mov->setkey(1); + _mov->zero(); + _mov->put(MOV_NUMREG, nreg); + if (_mov->read() == NOERR) + { + datareg = _mov->get_date(MOV_DATAREG); + inviva = _mov->get_bool(MOV_INVIVA); + ocfpi = _mov->get (MOV_OCFPI); + } + } + else + inviva = FALSE; + + if ( inviva || datareg > _datalimsk ) continue; + + if (ocfpi.not_empty()) + occasionali(ocfpi); + + _triva->zero(); + _triva->curr() = _rmoviva->curr(); + + if (_triva->read() == NOERR) + { + _triva->zero(); + _triva->curr() = _rmoviva->curr(); + _triva->rewrite(); + } + else + { + _triva->zero(); + _triva->curr() = _rmoviva->curr(); + _triva->write(); + } + + leggi_record_controllo(); + TString chiave; + chiave.format("%07ld", nreg); + TString sigla (format("%c", 'U')); + _control_rec.overwrite(sigla,240); + _control_rec.overwrite(chiave,241); + + _tras_file.write_control_rec(_control_rec,size); + + if (nreg != nreg_p) + iva_inviata(nreg); + + nreg_p = nreg; + } + delete _prog; + + //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare + //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di + //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche' + //la chiave e' compilata con i dati del file precedente. + + leggi_record_controllo(); + TString chiave,app,sigla; + app.format("%-15s", (const char*) chiave); + char sigla_p = _tras_file.ult_file()[0]; + int posiz = _files.find(sigla_p); + TString nuova_sigla = " "; + if (posiz < _files.len()) + nuova_sigla = _files.mid(posiz+1,1); + + _control_rec.overwrite(nuova_sigla,240); + _control_rec.overwrite(app,241); + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); + +// setta_tabella_ditta(m,"D",FALSE); +// setta_parametri_record(m,"D"); +} + +bool TInv_cont::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return main_loop(); + return FALSE; +} + +int cg6900 (int argc, char* argv[]) +{ + switch (*argv[2]) + { + case 'S': + { + TInv_cont main_app(*argv[2]); + main_app.run(argc, argv,main_app._titolo); + } + break; + case 'P': + { + TInv_cont main_app(*argv[2]); + main_app.run(argc, argv,main_app._titolo); + } + break; + case 'L': + { + TLista_archivi a; + a.run(argc, argv,"Lista controllo archivi"); + } + break; + case 'R': + { + TRip_flag a; + a.run(argc, argv,"Ripristino flag movimenti"); + } + break; + default: + break; + } + + return TRUE; +} diff --git a/cg/cg6900.h b/cg/cg6900.h index f8a7dcdf8..2a1b85c52 100755 --- a/cg/cg6900.h +++ b/cg/cg6900.h @@ -1,157 +1,157 @@ -// Invio contabilita' -#define STRICT -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cg6901.h" -#include "cg6903.h" -#include "cglib04.h" - -class TInv_cont : public TApplication -{ - enum { BUFSIZE = 4096 }; - - TTransfer_file _tras_file; - TProgind* _prog; - TLocalisamfile* _caus; - TLocalisamfile* _rcaus; - TLocalisamfile* _clifo; - TLocalisamfile* _pcon; - TLocalisamfile* _mov; - TLocalisamfile* _rmov; - TLocalisamfile* _rmoviva; - TLocalisamfile* _occas; - TIsamtempfile* _tcaus; - TIsamtempfile* _trcaus; - TIsamtempfile* _tclifo; - TIsamtempfile* _tpcon; - TIsamtempfile* _tmov; - TIsamtempfile* _trmov; - TIsamtempfile* _triva; - TIsamtempfile* _toccas; - TArchive _arc; - - char _scelta; - - TString _control_rec, _header, _trasf, _std, _stato, _marker, _nome_simbolico; - TString _files, _codcaus, _numdoc, _reg, _codpag, _tipodoc, _codcausm, _sigle; - TString _ocfpi, _ragsococc, _indocc, _capocc, _localocc, _provocc, _codvali; - bool _esiste_ditta, _esiste_record, _inviato, _flag_bollato; - long _ditta, _protiva, _uprotiva, _codcf, _numrec, _tot_rec; - long _dim_tot, _dim_disk; - long _numrec_cau,_numrec_clifo,_numrec_pcon,_numrec_pn,_numrec_iva; - int _num,_annoes; - TDate _data, _datadoc, _data74ter,_datalimsk,_dataregiva,_datareg; - real _corrlire, _cambioi, _corrval; - -public: - TString _titolo; - - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - - bool main_loop(); - - bool esiste_tabella_studio(); - bool record_controllo(); - bool esegui_controlli(); - bool leggi_header(); - bool controlli(); - bool sub_controlli(); - bool tabella_ditta(); - bool controlla_stato_invio(); - bool numero_data(); - void leggi_record_controllo(); - void codifica_ditta (TMask& m); - void testata_mov_PN (); - void testata_trasfer(long nreg, int nrig, TString& record); - void sola_iva(TString& record); - bool testata_mov_IVA(long numreg); - void cerca_occasionale(); - void cerca_comune_occas(const TString& com); - - void apri_file_temp(); - void chiudi_file_temp(); - - void crea_marker(TMask& m); - void setta_parametri_record(TMask& m,const TString& flag); - void setta_tabella_studio(TMask& m, bool flag_ditta = TRUE); - void setta_tabella_ditta(TMask& m, const char* flag, bool comp = TRUE); - void crea_record_controllo(TMask& m); - - bool invio_tempfile(TMask& m); - void causali2tempfile(TString& key,TMask& m); - void cancella_righe_causali(TString& codcaus); - void scrivi_righe_causali(TString& codcaus, char uselab); - void clifo2tempfile(TString& key,TMask& m); - void pcon2tempfile(TString& key,TMask& m); - - void movPN2tempfile(TString& key,TMask& m); - void scrivi_righePN(long numreg); - void primanota_inviata(long numreg); - - void movIVA2tempfile(TString& key,TMask& m); - bool occasionali(const TString& ocfpi); - void iva_inviata(long numreg); - - bool invio_contabilita(); - bool invio_tab_cau(); - bool invio_clifo (); - bool invio_pcon (); - bool invio_mov_PN (); - bool invio_mov_IVA(); - - void aggiorna_header(TString& files); - void aggiorna_trasfer(TString& files); - - void negPC2negAS(TString& numero); - void dec2integer(real& val, long dec); - - void aggiorna_marker(TString& token, int pos); - void calcola_totale_record(); - void scrivi_telefono(TString& app); - - const char* cerca_provincia(const TString& comcf); - - static bool setta_maschera_hnd(TMask_field& f, KEY k); - static bool messaggio_hnd (TMask_field& f, KEY k); - - int calcola_numero_dischi(TMask& m); - FILE* chiedi_disco(const char* name, int disk, char floppy, bool lettura); - bool scrivi_disco(char floppy, int disk, const char* work, FILE* i, TProgind& w); - - TInv_cont(char mov); -}; - -HIDDEN TInv_cont& app() { return (TInv_cont &) main_app(); } - +// Invio contabilita' +#define STRICT +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cg6901.h" +#include "cg6903.h" +#include "cglib04.h" + +class TInv_cont : public TApplication +{ + enum { BUFSIZE = 4096 }; + + TTransfer_file _tras_file; + TProgind* _prog; + TLocalisamfile* _caus; + TLocalisamfile* _rcaus; + TLocalisamfile* _clifo; + TLocalisamfile* _pcon; + TLocalisamfile* _mov; + TLocalisamfile* _rmov; + TLocalisamfile* _rmoviva; + TLocalisamfile* _occas; + TIsamtempfile* _tcaus; + TIsamtempfile* _trcaus; + TIsamtempfile* _tclifo; + TIsamtempfile* _tpcon; + TIsamtempfile* _tmov; + TIsamtempfile* _trmov; + TIsamtempfile* _triva; + TIsamtempfile* _toccas; + TArchive _arc; + + char _scelta; + + TString _control_rec, _header, _trasf, _std, _stato, _marker, _nome_simbolico; + TString _files, _codcaus, _numdoc, _reg, _codpag, _tipodoc, _codcausm, _sigle; + TString _ocfpi, _ragsococc, _indocc, _capocc, _localocc, _provocc, _codvali; + bool _esiste_ditta, _esiste_record, _inviato, _flag_bollato; + long _ditta, _protiva, _uprotiva, _codcf, _numrec, _tot_rec; + long _dim_tot, _dim_disk; + long _numrec_cau,_numrec_clifo,_numrec_pcon,_numrec_pn,_numrec_iva; + int _num,_annoes; + TDate _data, _datadoc, _data74ter,_datalimsk,_dataregiva,_datareg; + real _corrlire, _cambioi, _corrval; + +public: + TString _titolo; + + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + + bool main_loop(); + + bool esiste_tabella_studio(); + bool record_controllo(); + bool esegui_controlli(); + bool leggi_header(); + bool controlli(); + bool sub_controlli(); + bool tabella_ditta(); + bool controlla_stato_invio(); + bool numero_data(); + void leggi_record_controllo(); + void codifica_ditta (TMask& m); + void testata_mov_PN (); + void testata_trasfer(long nreg, int nrig, TString& record); + void sola_iva(TString& record); + bool testata_mov_IVA(long numreg); + void cerca_occasionale(); + void cerca_comune_occas(const TString& com); + + void apri_file_temp(); + void chiudi_file_temp(); + + void crea_marker(TMask& m); + void setta_parametri_record(TMask& m,const TString& flag); + void setta_tabella_studio(TMask& m, bool flag_ditta = TRUE); + void setta_tabella_ditta(TMask& m, const char* flag, bool comp = TRUE); + void crea_record_controllo(TMask& m); + + bool invio_tempfile(TMask& m); + void causali2tempfile(TString& key,TMask& m); + void cancella_righe_causali(TString& codcaus); + void scrivi_righe_causali(TString& codcaus, char uselab); + void clifo2tempfile(TString& key,TMask& m); + void pcon2tempfile(TString& key,TMask& m); + + void movPN2tempfile(TString& key,TMask& m); + void scrivi_righePN(long numreg); + void primanota_inviata(long numreg); + + void movIVA2tempfile(TString& key,TMask& m); + bool occasionali(const TString& ocfpi); + void iva_inviata(long numreg); + + bool invio_contabilita(); + bool invio_tab_cau(); + bool invio_clifo (); + bool invio_pcon (); + bool invio_mov_PN (); + bool invio_mov_IVA(); + + void aggiorna_header(TString& files); + void aggiorna_trasfer(TString& files); + + void negPC2negAS(TString& numero); + void dec2integer(real& val, long dec); + + void aggiorna_marker(TString& token, int pos); + void calcola_totale_record(); + void scrivi_telefono(TString& app); + + const char* cerca_provincia(const TString& comcf); + + static bool setta_maschera_hnd(TMask_field& f, KEY k); + static bool messaggio_hnd (TMask_field& f, KEY k); + + int calcola_numero_dischi(TMask& m); + FILE* chiedi_disco(const char* name, int disk, char floppy, bool lettura); + bool scrivi_disco(char floppy, int disk, const char* work, FILE* i, TProgind& w); + + TInv_cont(char mov); +}; + +HIDDEN TInv_cont& app() { return (TInv_cont &) main_app(); } + diff --git a/cg/cg6900a.uml b/cg/cg6900a.uml index 98b5c12ff..eb37a61eb 100755 --- a/cg/cg6900a.uml +++ b/cg/cg6900a.uml @@ -1,62 +1,62 @@ -#include "cg6900a.h" - -PAGE "Invio contabilita'" -1 -1 76 11 - -NUMBER F_DITTAINV 5 -BEGIN - PROMPT 2 1 "Codice ditta inviante " - FLAGS "Z" - CHECKTYPE REQUIRED -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 2 2 "Ragione sociale " - FLAGS "D" -END - -NUMBER F_NUMULINV 3 -BEGIN - PROMPT 2 4 "Numero ultimo invio " - FLAGS "RG" -END - -DATE F_DATAULIN -BEGIN - PROMPT 44 4 "Data ultimo invio " -END - -STRING F_STATO 1 -BEGIN - PROMPT 2 5 "Stato ultimo invio " -END - -STRING F_USELAB 1 -BEGIN - PROMPT 27 5 "" -END - -STRING F_CHIAVE 15 -BEGIN - PROMPT 30 5 "" -END - -DATE F_DATALIM -BEGIN - PROMPT 2 7 "Data limite invio " - CHECKTYPE REQUIRED -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -ENDMASK +#include "cg6900a.h" + +PAGE "Invio contabilita'" -1 -1 76 11 + +NUMBER F_DITTAINV 5 +BEGIN + PROMPT 2 1 "Codice ditta inviante " + FLAGS "Z" + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 2 2 "Ragione sociale " + FLAGS "D" +END + +NUMBER F_NUMULINV 3 +BEGIN + PROMPT 2 4 "Numero ultimo invio " + FLAGS "RG" +END + +DATE F_DATAULIN +BEGIN + PROMPT 44 4 "Data ultimo invio " +END + +STRING F_STATO 1 +BEGIN + PROMPT 2 5 "Stato ultimo invio " +END + +STRING F_USELAB 1 +BEGIN + PROMPT 27 5 "" +END + +STRING F_CHIAVE 15 +BEGIN + PROMPT 30 5 "" +END + +DATE F_DATALIM +BEGIN + PROMPT 2 7 "Data limite invio " + CHECKTYPE REQUIRED +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/cg/cg6901.cpp b/cg/cg6901.cpp index 6fad82981..b56deff79 100755 --- a/cg/cg6901.cpp +++ b/cg/cg6901.cpp @@ -1,967 +1,967 @@ -#include "cglib04.h" -#include "cg6901.h" - -HIDDEN inline TLista_archivi& app() { return (TLista_archivi&)main_app();} - -bool TLista_archivi::create() -{ - _ditte = new TLocalisamfile (LF_NDITTE); - _caus = new TLocalisamfile (LF_CAUSALI); - _rcaus = new TLocalisamfile (LF_RCAUSALI); - _clifo = new TLocalisamfile (LF_CLIFO); - _pcon = new TLocalisamfile (LF_PCON); - _mov = new TLocalisamfile (LF_MOV); - _rmov = new TLocalisamfile (LF_RMOV); - _rmoviva = new TLocalisamfile (LF_RMOVIVA); - - _errore_grave = FALSE; - _risposta = 0; - - TMailbox m; - TMessage* msg = m.next_s(""); - TString subj; - - if (msg != NULL) - { - subj = msg->body(); - _datalimite = subj; - } - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool TLista_archivi::destroy() -{ - printer().close(); - - if (_risposta == 1) - message_box("Rilevati errori gravi durante il controllo archivi: \n trasferimento interrotto"); - - TString appname = "cg6 -8 S"; - TString body = ""; - - body << _risposta; - - TMessage msg (appname,"",(const char*)body); - TMailbox mb; - mb.send(msg); - - delete _ditte; - delete _caus; - delete _rcaus; - delete _clifo; - delete _pcon; - delete _mov; - delete _rmov; - delete _rmoviva; - - return TApplication::destroy(); -} - -bool TLista_archivi::tabella_ditta() -{ - TTable ind ("%IND"); - TString dep; - - dep.format("%05d", _ditta); - - ind.zero(); - ind.put("CODTAB", dep); - if (ind.read() == NOERR) - { - _files = ""; - if (ind.get_bool("B0")) - _files << "W"; - - if (ind.get_bool("B1")) - _files << "A"; - - if (ind.get_bool("B2")) - _files << "P"; - - if (ind.get_bool("B3")) - _files << "Z"; - - if (ind.get_bool("B4")) - _files << "U"; - - if (ind.get_bool("B5")) - _files << "B"; - - return TRUE; - } - - return FALSE; -} - -bool TLista_archivi::set() -{ -//**************************************** -//****** Apro la finestra di stampa ****** -//**************************************** - - printer().set_printtype(winprinter); - - if (!(printer().isopen ())) - if (!printer().open ()) - return FALSE; - -//**************************************** - - _ditta = get_firm(); - - _ditte->zero(); - _ditte->put(NDT_CODDITTA, _ditta); - if (_ditte->read() == NOERR) - _ragsoc = _ditte->get(NDT_RAGSOC); - - if (!tabella_ditta()) return FALSE; - - if (_files.find('W') != -1) - controlla_causali('W'); - - if (_files.find('A') != -1) - controlla_clifo('A'); - - if (_files.find('P') != -1) - controlla_pcon('P'); - - if (_files.find('Z') != -1) - controlla_PNIVA('Z'); - - if (_files.find('B') != -1) - controlla_fatture('B'); - - return FALSE; -} - -bool TLista_archivi::controlla_valore(const TString& val,int lim) -{ - if (real::is_natural(val)) - { - int app = atoi(val); - if (app > lim) - return FALSE; - } - else - if (val.len() > 1) - return FALSE; - - return TRUE; -} - -void TLista_archivi::controlla_causali(char file) -{ - TPrintrow row; - TString str; - bool errore = FALSE; - bool salto = FALSE; - bool intesta = TRUE; - TString_array stampa(50); - int num; - - _caus->setkey(1); - _caus->zero(); - - for (_caus->first(); !_caus->eof(); _caus->next()) - { - const char* codcau = _caus->get(CAU_CODCAUS); - TString codcaus = codcau; - if (codcau && *codcau && !real::is_natural(codcau) ) - { - errore = TRUE; - stampa.add(" - Rilevato codice causale alfanumerico"); - } - - TString reg = _caus->get(CAU_REG); - if (!controlla_valore(reg,9)) - { - errore = TRUE; - stampa.add(" - Rilevato registro IVA con lunghezza superiore a 1"); - } - - const char* codcausim = _caus->get(CAU_CODCAUSIM); - if (codcausim && *codcausim && !real::is_natural(codcausim) ) - { - errore = TRUE; - stampa.add(" - Rilevato codice causale per incasso immediato alfanumerico"); - } - - num = 0; - - _rcaus->setkey(1); - _rcaus->zero(); - _rcaus->put(RCA_CODCAUS, codcaus); - - TRectype rcau (_rcaus->curr()); - - for (_rcaus->read(); !_rcaus->eof(); _rcaus->next()) - { - bool tit_riga = FALSE; - - if (_rcaus->curr() > rcau) break; - - num++; - - if (num > 15) - { - errore = TRUE; - stampa.add(" - Rilevata causale con numero righe superiore a 15"); - } - - int g = _rcaus->get_int (RCA_GRUPPO); - int c = _rcaus->get_int (RCA_CONTO); - int nr = _rcaus->get_int (RCA_NRIGA); - - if (g > 99) - { - errore = TRUE; - TString app; - app.format("%9s%03d", (const char*)"@b - Riga ", nr); - app << " " << "@rRilevato un gruppo composto da 3 cifre"; - stampa.add(app); - tit_riga = TRUE; - } - - if (c > 99) - { - errore = TRUE; - TString app; - if (tit_riga) - app << " Rilevato un conto composto da 3 cifre"; - else - { - app.format("%9s%03d", (const char*)"@b - Riga ", nr); - app << " " << "@rRilevato un conto composto da 3 cifre"; - } - stampa.add(app); - } - } - - if (errore) - { - if (intesta) - { - setta_intestazione(file); - intesta = FALSE; - } - - TString app; - app << "@b- Codice causale " << codcaus; - row.put(app,0); - printer().print(row); - row.reset(); - - long items = stampa.items(); - - for (int i = 0; i < items; i++) - { - str = stampa.row(i); - row.put(str,0); - printer().print(row); - row.reset(); - } - - row.put(" ",0); - printer().print(row); - row.reset(); - - errore = FALSE; - salto = TRUE; - _risposta = 1; - } - stampa.destroy(); - } - if (salto) - printer().formfeed(); -} - -void TLista_archivi::controlla_clifo(char file) -{ - TPrintrow row; - TString str; - bool errore = FALSE; - bool salto = FALSE; - bool intesta = TRUE; - TString_array stampa(10); - - _clifo->setkey(1); - _clifo->zero(); - - for (_clifo->first(); !_clifo->eof(); _clifo->next()) - { - str = ""; - - char tipo = _clifo->get_char(CLI_TIPOCF); - long codice = _clifo->get_long(CLI_CODCF); - - TString paiv = _clifo->get(CLI_PAIV); - if (paiv.len() > 11) - { - errore = TRUE; - stampa.add(" - Rilevata partita IVA con piu' di 11 caratteri"); - } - -/* TString ptel = _clifo->get(CLI_PTEL); - TString tel = _clifo->get(CLI_TEL); - TString appoggio; - appoggio << ptel << " " << tel; - if (appoggio.len() > 12) - { - errore = TRUE; - stampa.add(" - Rilevato numero telefonico troppo lungo"); - } -*/ - int gruppo = _clifo->get_int(CLI_GRUPPORIC); - int conto = _clifo->get_int(CLI_CONTORIC); - - if (gruppo > 99) - { - errore = TRUE; - stampa.add(" - Rilevato gruppo costo/ricavo composto da 3 cifre"); - } - - if (conto > 99) - { - errore = TRUE; - stampa.add(" - Rilevato conto costo/ricavo composto da 3 cifre"); - } - - TString codpag = _clifo->get(CLI_CODPAG); - if (!controlla_valore(codpag,99)) - { - errore = TRUE; - stampa.add(" - Rilevato un codice di pagamento composto da 3 o piu' cifre"); - } - - if (errore) - { - TString app; - - if (intesta) - { - setta_intestazione(file); - intesta = FALSE; - } - - str << "@b- Codice "; - app.format("%c %06ld", tipo, codice); - str << app; - - row.put(str,0); - printer().print(row); - row.reset(); - str = ""; - - long items = stampa.items(); - - for (int i = 0; i < items; i++) - { - str = stampa.row(i); - row.put(str,0); - printer().print(row); - row.reset(); - } - - row.put(" ",0); - printer().print(row); - row.reset(); - - errore = FALSE; - salto = TRUE; - _risposta = 1; - } - stampa.destroy(); - } - if (salto) - printer().formfeed(); -} - -void TLista_archivi::controlla_pcon(char file) -{ - TPrintrow row; - TString str; - bool errore = FALSE; - bool salto = FALSE; - bool intesta = TRUE; - TString_array stampa(10); - - _pcon->setkey(1); - _pcon->zero(); - - for (_pcon->first(); !_pcon->eof(); _pcon->next()) - { - str = ""; - - int gruppo = _pcon->get_int (PCN_GRUPPO); - int conto = _pcon->get_int (PCN_CONTO); - long sottoc = _pcon->get_long(PCN_SOTTOCONTO); - - if (gruppo > 99) - { - errore = TRUE; - stampa.add(" - Rilevato un gruppo composto da 3 cifre"); - } - - if (conto > 99) - { - errore = TRUE; - stampa.add(" - Rilevato un conto composto da 3 cifre"); - } - - if (errore) - { - TString app; - - if (intesta) - { - setta_intestazione(file); - intesta = FALSE; - } - - str << "@b- Conto "; - app.format("%3d %3d %6ld", gruppo, conto, sottoc); - str << app; - - row.put(str,0); - printer().print(row); - row.reset(); - str = ""; - - long items = stampa.items(); - - for (int i = 0; i < items; i++) - { - str = stampa.row(i); - row.put(str,0); - printer().print(row); - row.reset(); - } - - row.put(" ",0); - printer().print(row); - row.reset(); - - errore = FALSE; - salto = TRUE; - _risposta = 1; - } - stampa.destroy(); - } - if (salto) - printer().formfeed(); -} - -void TLista_archivi::controlla_PNIVA(char file) -{ - TPrintrow row; - TString str; - bool errore = FALSE; - bool salto = FALSE; - bool intesta = TRUE; - bool tit_riga = FALSE; - TString_array stampa(50); - int num; - long nreg_p = 0; - - _mov->setkey(1); - _mov->zero(); - - for (_mov->first(); !_mov->eof(); _mov->next()) - { - bool soliva = TRUE; - - long nreg = _mov->get_long(MOV_NUMREG); - TDate datareg = _mov->get_date(MOV_DATAREG); - bool inviato = _mov->get_bool(MOV_INVIATO); - bool inviva = _mov->get_bool(MOV_INVIVA); - - if (inviato && inviva) continue; //Se il movimento e' gia' stato inviato non lo posso piu' inviare - //cosi' come le sue righe di primanota e iva - - if (datareg > _datalimite) continue; - - if (nreg > 999999) - { - errore = TRUE; - stampa.add(" - Rilevato un numero di registrazione composto da 7"); - } - - TString reg = _mov->get(MOV_REG); - if (!controlla_valore(reg,9)) - { - errore = TRUE; - stampa.add(" - Rilevato un codice registro IVA composto da 2 o piu' cifre"); - } - - const char* codcaus = _mov->get(MOV_CODCAUS); - if (codcaus && *codcaus) - if (!real::is_natural(codcaus)) - { - errore = TRUE; - stampa.add(" - Rilevato un codice causale alfanumerico"); - } - - TString codpag = _mov->get(MOV_CODPAG); - if (!controlla_valore(codpag,99)) - { - errore = TRUE; - stampa.add(" - Rilevato un codice di pagamento composto da 3 o piu' cifre"); - } - - num = 0; - - bool prima = TRUE; - - _rmov->setkey(1); - _rmov->zero(); - _rmov->put(RMV_NUMREG, nreg); - - TRectype rmov (_rmov->curr()); - - for (_rmov->read(); !_rmov->eof(); _rmov->next()) - { - - if (_rmov->curr() > rmov) break; - - tit_riga = FALSE; - - soliva = FALSE; - - num++; - - if (num > 99) - { - errore = TRUE; - stampa.add(" - Rilevato movimento di Primanota con numero righe superiore a 99"); - } - - int nr = _rmov->get_int (RMV_NUMRIG); - int g = _rmov->get_int (RMV_GRUPPO); - int c = _rmov->get_int (RMV_CONTO); - int gc = _rmov->get_int (RMV_GRUPPOC); - int cc = _rmov->get_int (RMV_CONTOC); - - if (nr > 99) - { - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - errore = TRUE; - TString app; - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato numero di riga con piu' di due cifre"; - stampa.add(app); - tit_riga = TRUE; - } - - if (g > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un gruppo di partita composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un gruppo di partita composto da 3 cifre"; - } - stampa.add(app); - tit_riga = TRUE; - } - - if (c > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un conto di partita composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un conto di partita composto da 3 cifre"; - } - stampa.add(app); - } - - if (gc > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un gruppo di contropartita composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un gruppo di contropartita composto da 3 cifre"; - } - stampa.add(app); - tit_riga = TRUE; - } - - if (cc > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un conto di contropartita composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un conto di contropartita composto da 3 cifre"; - } - stampa.add(app); - } - } - - if (soliva) - { - TLocalisamfile rcaus (LF_RCAUSALI); - int g = 0; - int c = 0; - bool tit_riga = FALSE; - bool prima = TRUE; - int nr = 1; - - rcaus.setkey(1); - rcaus.zero(); - rcaus.put(RCA_CODCAUS, codcaus); - rcaus.read(); - TString codcau = rcaus.get(RCA_CODCAUS); - if (codcau == codcaus) - { - g = rcaus.get_int (RCA_GRUPPO); - c = rcaus.get_int (RCA_CONTO); - } - - - if (g > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un gruppo di partita composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un gruppo di partita composto da 3 cifre"; - } - stampa.add(app); - tit_riga = TRUE; - } - - if (c > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe primanota"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un conto di partita composto da 3 cifre"; - else - { - app.format("5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un conto di partita composto da 3 cifre"; - } - stampa.add(app); - } - } - - num = 0; - - if (_files.find('U') != -1) - { - nreg_p = 0; - _rmoviva->setkey(1); - _rmoviva->zero(); - _rmoviva->put(RMI_NUMREG, nreg); - - TRectype rmoviva (_rmoviva->curr()); - - prima = TRUE; - - for (_rmoviva->read(); !_rmoviva->eof(); _rmoviva->next()) - { - if (_rmoviva->curr() > rmoviva) break; - - num++; - - if (num > 9) - { - errore = TRUE; - stampa.add(" - Rilevato movimento Iva con numero righe superiore a 9"); - } - - int nr = _rmoviva->get_int (RMI_NUMRIG); - int g = _rmoviva->get_int (RMI_GRUPPO); - int c = _rmoviva->get_int (RMI_CONTO); - - if (nr > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe iva"); - stampa.add(" "); - prima = FALSE; - } - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato numero di riga con piu' di due cifre"; - stampa.add(app); - tit_riga = TRUE; - } - - if (g > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe iva"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un gruppo composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un gruppo composto da 3 cifre"; - } - stampa.add(app); - tit_riga = TRUE; - } - - if (c > 99) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe iva"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un conto composto da 3 cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un conto composto da 3 cifre"; - } - stampa.add(app); - } - const char* ci = _rmoviva->get (RMI_CODIVA); - if ( ci && *ci && !real::is_natural(ci) ) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe iva"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un codice IVA alfanumerico"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un codice IVA alfanumerico"; - } - stampa.add(app); - tit_riga = TRUE; - } - - if (!controlla_valore(ci,99)) - { - errore = TRUE; - TString app; - if (prima) - { - stampa.add(" "); - stampa.add("Righe iva"); - stampa.add(" "); - prima = FALSE; - } - if (tit_riga) - app << "@r Rilevato un codice IVA composto da 3 o piu' cifre"; - else - { - app.format("%5s%03d", (const char*)"@b - ", nr); - app << " " << "@rRilevato un codice IVA composto da 3 o piu' cifre"; - } - stampa.add(app); - tit_riga = TRUE; - } - } - } - - if (errore) - { - TString app; - - if (intesta) - { - setta_intestazione(file); - intesta = FALSE; - } - - app << "@b- Registrazione numero " << nreg; - row.put(app,0); - printer().print(row); - row.reset(); - - long items = stampa.items(); - - for (int i = 0; i < items; i++) - { - str = stampa.row(i); - row.put(str,0); - printer().print(row); - row.reset(); - } - - row.put(" ",0); - printer().print(row); - row.reset(); - - errore = FALSE; - salto = TRUE; - _risposta = 1; - } - stampa.destroy(); - } - if (salto) - printer().formfeed(); -} - -void TLista_archivi::controlla_fatture(char file) -{ - -} - -void TLista_archivi::setta_intestazione(char sigla) -{ - TPrintrow row; - TString sep(132); - TString titolo; - - switch (sigla) - { - case 'W': - titolo = "Tabella Causali"; - break; - - case 'A': - titolo = "Anagrafica Clienti/Fornitori"; - break; - - case 'P': - titolo = "Anagrafica Piano dei Conti"; - break; - - case 'Z': - titolo = "Movimenti"; - break; - - default: - break; - } - - printer().resetheader(); - - sep << "Ditta " << _ditta; - sep << " " << _ragsoc; - sep.left_just(132); - - row.put(sep,0); - printer().setheaderline(1,row); - row.reset(); - - sep = ""; - sep << "Data @< Pag. @#"; - sep.right_just(127); - sep.overwrite ("LISTA DI CONTROLLO ARCHIVI IN TRASFERIMENTO"); - row.put(sep,0); - printer().setheaderline(2,row); - row.reset(); - - sep = ""; - sep.fill('-'); - row.put(sep,0); - printer().setheaderline(3,row); - row.reset(); - - row.put(titolo,0); - printer().setheaderline(4,row); - row.reset(); - - sep = ""; - sep.fill('-'); - row.put(sep,0); - printer().setheaderline(5,row); - row.reset(); - - row.put(" ",0); - printer().setheaderline(6,row); - row.reset(); -} - -bool TLista_archivi::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return set(); - return FALSE; -} +#include "cglib04.h" +#include "cg6901.h" + +HIDDEN inline TLista_archivi& app() { return (TLista_archivi&)main_app();} + +bool TLista_archivi::create() +{ + _ditte = new TLocalisamfile (LF_NDITTE); + _caus = new TLocalisamfile (LF_CAUSALI); + _rcaus = new TLocalisamfile (LF_RCAUSALI); + _clifo = new TLocalisamfile (LF_CLIFO); + _pcon = new TLocalisamfile (LF_PCON); + _mov = new TLocalisamfile (LF_MOV); + _rmov = new TLocalisamfile (LF_RMOV); + _rmoviva = new TLocalisamfile (LF_RMOVIVA); + + _errore_grave = FALSE; + _risposta = 0; + + TMailbox m; + TMessage* msg = m.next_s(""); + TString subj; + + if (msg != NULL) + { + subj = msg->body(); + _datalimite = subj; + } + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool TLista_archivi::destroy() +{ + printer().close(); + + if (_risposta == 1) + message_box("Rilevati errori gravi durante il controllo archivi: \n trasferimento interrotto"); + + TString appname = "cg6 -8 S"; + TString body = ""; + + body << _risposta; + + TMessage msg (appname,"",(const char*)body); + TMailbox mb; + mb.send(msg); + + delete _ditte; + delete _caus; + delete _rcaus; + delete _clifo; + delete _pcon; + delete _mov; + delete _rmov; + delete _rmoviva; + + return TApplication::destroy(); +} + +bool TLista_archivi::tabella_ditta() +{ + TTable ind ("%IND"); + TString dep; + + dep.format("%05d", _ditta); + + ind.zero(); + ind.put("CODTAB", dep); + if (ind.read() == NOERR) + { + _files = ""; + if (ind.get_bool("B0")) + _files << "W"; + + if (ind.get_bool("B1")) + _files << "A"; + + if (ind.get_bool("B2")) + _files << "P"; + + if (ind.get_bool("B3")) + _files << "Z"; + + if (ind.get_bool("B4")) + _files << "U"; + + if (ind.get_bool("B5")) + _files << "B"; + + return TRUE; + } + + return FALSE; +} + +bool TLista_archivi::set() +{ +//**************************************** +//****** Apro la finestra di stampa ****** +//**************************************** + + printer().set_printtype(winprinter); + + if (!(printer().isopen ())) + if (!printer().open ()) + return FALSE; + +//**************************************** + + _ditta = get_firm(); + + _ditte->zero(); + _ditte->put(NDT_CODDITTA, _ditta); + if (_ditte->read() == NOERR) + _ragsoc = _ditte->get(NDT_RAGSOC); + + if (!tabella_ditta()) return FALSE; + + if (_files.find('W') != -1) + controlla_causali('W'); + + if (_files.find('A') != -1) + controlla_clifo('A'); + + if (_files.find('P') != -1) + controlla_pcon('P'); + + if (_files.find('Z') != -1) + controlla_PNIVA('Z'); + + if (_files.find('B') != -1) + controlla_fatture('B'); + + return FALSE; +} + +bool TLista_archivi::controlla_valore(const TString& val,int lim) +{ + if (real::is_natural(val)) + { + int app = atoi(val); + if (app > lim) + return FALSE; + } + else + if (val.len() > 1) + return FALSE; + + return TRUE; +} + +void TLista_archivi::controlla_causali(char file) +{ + TPrintrow row; + TString str; + bool errore = FALSE; + bool salto = FALSE; + bool intesta = TRUE; + TString_array stampa(50); + int num; + + _caus->setkey(1); + _caus->zero(); + + for (_caus->first(); !_caus->eof(); _caus->next()) + { + const char* codcau = _caus->get(CAU_CODCAUS); + TString codcaus = codcau; + if (codcau && *codcau && !real::is_natural(codcau) ) + { + errore = TRUE; + stampa.add(" - Rilevato codice causale alfanumerico"); + } + + TString reg = _caus->get(CAU_REG); + if (!controlla_valore(reg,9)) + { + errore = TRUE; + stampa.add(" - Rilevato registro IVA con lunghezza superiore a 1"); + } + + const char* codcausim = _caus->get(CAU_CODCAUSIM); + if (codcausim && *codcausim && !real::is_natural(codcausim) ) + { + errore = TRUE; + stampa.add(" - Rilevato codice causale per incasso immediato alfanumerico"); + } + + num = 0; + + _rcaus->setkey(1); + _rcaus->zero(); + _rcaus->put(RCA_CODCAUS, codcaus); + + TRectype rcau (_rcaus->curr()); + + for (_rcaus->read(); !_rcaus->eof(); _rcaus->next()) + { + bool tit_riga = FALSE; + + if (_rcaus->curr() > rcau) break; + + num++; + + if (num > 15) + { + errore = TRUE; + stampa.add(" - Rilevata causale con numero righe superiore a 15"); + } + + int g = _rcaus->get_int (RCA_GRUPPO); + int c = _rcaus->get_int (RCA_CONTO); + int nr = _rcaus->get_int (RCA_NRIGA); + + if (g > 99) + { + errore = TRUE; + TString app; + app.format("%9s%03d", (const char*)"@b - Riga ", nr); + app << " " << "@rRilevato un gruppo composto da 3 cifre"; + stampa.add(app); + tit_riga = TRUE; + } + + if (c > 99) + { + errore = TRUE; + TString app; + if (tit_riga) + app << " Rilevato un conto composto da 3 cifre"; + else + { + app.format("%9s%03d", (const char*)"@b - Riga ", nr); + app << " " << "@rRilevato un conto composto da 3 cifre"; + } + stampa.add(app); + } + } + + if (errore) + { + if (intesta) + { + setta_intestazione(file); + intesta = FALSE; + } + + TString app; + app << "@b- Codice causale " << codcaus; + row.put(app,0); + printer().print(row); + row.reset(); + + long items = stampa.items(); + + for (int i = 0; i < items; i++) + { + str = stampa.row(i); + row.put(str,0); + printer().print(row); + row.reset(); + } + + row.put(" ",0); + printer().print(row); + row.reset(); + + errore = FALSE; + salto = TRUE; + _risposta = 1; + } + stampa.destroy(); + } + if (salto) + printer().formfeed(); +} + +void TLista_archivi::controlla_clifo(char file) +{ + TPrintrow row; + TString str; + bool errore = FALSE; + bool salto = FALSE; + bool intesta = TRUE; + TString_array stampa(10); + + _clifo->setkey(1); + _clifo->zero(); + + for (_clifo->first(); !_clifo->eof(); _clifo->next()) + { + str = ""; + + char tipo = _clifo->get_char(CLI_TIPOCF); + long codice = _clifo->get_long(CLI_CODCF); + + TString paiv = _clifo->get(CLI_PAIV); + if (paiv.len() > 11) + { + errore = TRUE; + stampa.add(" - Rilevata partita IVA con piu' di 11 caratteri"); + } + +/* TString ptel = _clifo->get(CLI_PTEL); + TString tel = _clifo->get(CLI_TEL); + TString appoggio; + appoggio << ptel << " " << tel; + if (appoggio.len() > 12) + { + errore = TRUE; + stampa.add(" - Rilevato numero telefonico troppo lungo"); + } +*/ + int gruppo = _clifo->get_int(CLI_GRUPPORIC); + int conto = _clifo->get_int(CLI_CONTORIC); + + if (gruppo > 99) + { + errore = TRUE; + stampa.add(" - Rilevato gruppo costo/ricavo composto da 3 cifre"); + } + + if (conto > 99) + { + errore = TRUE; + stampa.add(" - Rilevato conto costo/ricavo composto da 3 cifre"); + } + + TString codpag = _clifo->get(CLI_CODPAG); + if (!controlla_valore(codpag,99)) + { + errore = TRUE; + stampa.add(" - Rilevato un codice di pagamento composto da 3 o piu' cifre"); + } + + if (errore) + { + TString app; + + if (intesta) + { + setta_intestazione(file); + intesta = FALSE; + } + + str << "@b- Codice "; + app.format("%c %06ld", tipo, codice); + str << app; + + row.put(str,0); + printer().print(row); + row.reset(); + str = ""; + + long items = stampa.items(); + + for (int i = 0; i < items; i++) + { + str = stampa.row(i); + row.put(str,0); + printer().print(row); + row.reset(); + } + + row.put(" ",0); + printer().print(row); + row.reset(); + + errore = FALSE; + salto = TRUE; + _risposta = 1; + } + stampa.destroy(); + } + if (salto) + printer().formfeed(); +} + +void TLista_archivi::controlla_pcon(char file) +{ + TPrintrow row; + TString str; + bool errore = FALSE; + bool salto = FALSE; + bool intesta = TRUE; + TString_array stampa(10); + + _pcon->setkey(1); + _pcon->zero(); + + for (_pcon->first(); !_pcon->eof(); _pcon->next()) + { + str = ""; + + int gruppo = _pcon->get_int (PCN_GRUPPO); + int conto = _pcon->get_int (PCN_CONTO); + long sottoc = _pcon->get_long(PCN_SOTTOCONTO); + + if (gruppo > 99) + { + errore = TRUE; + stampa.add(" - Rilevato un gruppo composto da 3 cifre"); + } + + if (conto > 99) + { + errore = TRUE; + stampa.add(" - Rilevato un conto composto da 3 cifre"); + } + + if (errore) + { + TString app; + + if (intesta) + { + setta_intestazione(file); + intesta = FALSE; + } + + str << "@b- Conto "; + app.format("%3d %3d %6ld", gruppo, conto, sottoc); + str << app; + + row.put(str,0); + printer().print(row); + row.reset(); + str = ""; + + long items = stampa.items(); + + for (int i = 0; i < items; i++) + { + str = stampa.row(i); + row.put(str,0); + printer().print(row); + row.reset(); + } + + row.put(" ",0); + printer().print(row); + row.reset(); + + errore = FALSE; + salto = TRUE; + _risposta = 1; + } + stampa.destroy(); + } + if (salto) + printer().formfeed(); +} + +void TLista_archivi::controlla_PNIVA(char file) +{ + TPrintrow row; + TString str; + bool errore = FALSE; + bool salto = FALSE; + bool intesta = TRUE; + bool tit_riga = FALSE; + TString_array stampa(50); + int num; + long nreg_p = 0; + + _mov->setkey(1); + _mov->zero(); + + for (_mov->first(); !_mov->eof(); _mov->next()) + { + bool soliva = TRUE; + + long nreg = _mov->get_long(MOV_NUMREG); + TDate datareg = _mov->get_date(MOV_DATAREG); + bool inviato = _mov->get_bool(MOV_INVIATO); + bool inviva = _mov->get_bool(MOV_INVIVA); + + if (inviato && inviva) continue; //Se il movimento e' gia' stato inviato non lo posso piu' inviare + //cosi' come le sue righe di primanota e iva + + if (datareg > _datalimite) continue; + + if (nreg > 999999) + { + errore = TRUE; + stampa.add(" - Rilevato un numero di registrazione composto da 7"); + } + + TString reg = _mov->get(MOV_REG); + if (!controlla_valore(reg,9)) + { + errore = TRUE; + stampa.add(" - Rilevato un codice registro IVA composto da 2 o piu' cifre"); + } + + const char* codcaus = _mov->get(MOV_CODCAUS); + if (codcaus && *codcaus) + if (!real::is_natural(codcaus)) + { + errore = TRUE; + stampa.add(" - Rilevato un codice causale alfanumerico"); + } + + TString codpag = _mov->get(MOV_CODPAG); + if (!controlla_valore(codpag,99)) + { + errore = TRUE; + stampa.add(" - Rilevato un codice di pagamento composto da 3 o piu' cifre"); + } + + num = 0; + + bool prima = TRUE; + + _rmov->setkey(1); + _rmov->zero(); + _rmov->put(RMV_NUMREG, nreg); + + TRectype rmov (_rmov->curr()); + + for (_rmov->read(); !_rmov->eof(); _rmov->next()) + { + + if (_rmov->curr() > rmov) break; + + tit_riga = FALSE; + + soliva = FALSE; + + num++; + + if (num > 99) + { + errore = TRUE; + stampa.add(" - Rilevato movimento di Primanota con numero righe superiore a 99"); + } + + int nr = _rmov->get_int (RMV_NUMRIG); + int g = _rmov->get_int (RMV_GRUPPO); + int c = _rmov->get_int (RMV_CONTO); + int gc = _rmov->get_int (RMV_GRUPPOC); + int cc = _rmov->get_int (RMV_CONTOC); + + if (nr > 99) + { + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + errore = TRUE; + TString app; + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato numero di riga con piu' di due cifre"; + stampa.add(app); + tit_riga = TRUE; + } + + if (g > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un gruppo di partita composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un gruppo di partita composto da 3 cifre"; + } + stampa.add(app); + tit_riga = TRUE; + } + + if (c > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un conto di partita composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un conto di partita composto da 3 cifre"; + } + stampa.add(app); + } + + if (gc > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un gruppo di contropartita composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un gruppo di contropartita composto da 3 cifre"; + } + stampa.add(app); + tit_riga = TRUE; + } + + if (cc > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un conto di contropartita composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un conto di contropartita composto da 3 cifre"; + } + stampa.add(app); + } + } + + if (soliva) + { + TLocalisamfile rcaus (LF_RCAUSALI); + int g = 0; + int c = 0; + bool tit_riga = FALSE; + bool prima = TRUE; + int nr = 1; + + rcaus.setkey(1); + rcaus.zero(); + rcaus.put(RCA_CODCAUS, codcaus); + rcaus.read(); + TString codcau = rcaus.get(RCA_CODCAUS); + if (codcau == codcaus) + { + g = rcaus.get_int (RCA_GRUPPO); + c = rcaus.get_int (RCA_CONTO); + } + + + if (g > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un gruppo di partita composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un gruppo di partita composto da 3 cifre"; + } + stampa.add(app); + tit_riga = TRUE; + } + + if (c > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe primanota"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un conto di partita composto da 3 cifre"; + else + { + app.format("5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un conto di partita composto da 3 cifre"; + } + stampa.add(app); + } + } + + num = 0; + + if (_files.find('U') != -1) + { + nreg_p = 0; + _rmoviva->setkey(1); + _rmoviva->zero(); + _rmoviva->put(RMI_NUMREG, nreg); + + TRectype rmoviva (_rmoviva->curr()); + + prima = TRUE; + + for (_rmoviva->read(); !_rmoviva->eof(); _rmoviva->next()) + { + if (_rmoviva->curr() > rmoviva) break; + + num++; + + if (num > 9) + { + errore = TRUE; + stampa.add(" - Rilevato movimento Iva con numero righe superiore a 9"); + } + + int nr = _rmoviva->get_int (RMI_NUMRIG); + int g = _rmoviva->get_int (RMI_GRUPPO); + int c = _rmoviva->get_int (RMI_CONTO); + + if (nr > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe iva"); + stampa.add(" "); + prima = FALSE; + } + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato numero di riga con piu' di due cifre"; + stampa.add(app); + tit_riga = TRUE; + } + + if (g > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe iva"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un gruppo composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un gruppo composto da 3 cifre"; + } + stampa.add(app); + tit_riga = TRUE; + } + + if (c > 99) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe iva"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un conto composto da 3 cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un conto composto da 3 cifre"; + } + stampa.add(app); + } + const char* ci = _rmoviva->get (RMI_CODIVA); + if ( ci && *ci && !real::is_natural(ci) ) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe iva"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un codice IVA alfanumerico"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un codice IVA alfanumerico"; + } + stampa.add(app); + tit_riga = TRUE; + } + + if (!controlla_valore(ci,99)) + { + errore = TRUE; + TString app; + if (prima) + { + stampa.add(" "); + stampa.add("Righe iva"); + stampa.add(" "); + prima = FALSE; + } + if (tit_riga) + app << "@r Rilevato un codice IVA composto da 3 o piu' cifre"; + else + { + app.format("%5s%03d", (const char*)"@b - ", nr); + app << " " << "@rRilevato un codice IVA composto da 3 o piu' cifre"; + } + stampa.add(app); + tit_riga = TRUE; + } + } + } + + if (errore) + { + TString app; + + if (intesta) + { + setta_intestazione(file); + intesta = FALSE; + } + + app << "@b- Registrazione numero " << nreg; + row.put(app,0); + printer().print(row); + row.reset(); + + long items = stampa.items(); + + for (int i = 0; i < items; i++) + { + str = stampa.row(i); + row.put(str,0); + printer().print(row); + row.reset(); + } + + row.put(" ",0); + printer().print(row); + row.reset(); + + errore = FALSE; + salto = TRUE; + _risposta = 1; + } + stampa.destroy(); + } + if (salto) + printer().formfeed(); +} + +void TLista_archivi::controlla_fatture(char file) +{ + +} + +void TLista_archivi::setta_intestazione(char sigla) +{ + TPrintrow row; + TString sep(132); + TString titolo; + + switch (sigla) + { + case 'W': + titolo = "Tabella Causali"; + break; + + case 'A': + titolo = "Anagrafica Clienti/Fornitori"; + break; + + case 'P': + titolo = "Anagrafica Piano dei Conti"; + break; + + case 'Z': + titolo = "Movimenti"; + break; + + default: + break; + } + + printer().resetheader(); + + sep << "Ditta " << _ditta; + sep << " " << _ragsoc; + sep.left_just(132); + + row.put(sep,0); + printer().setheaderline(1,row); + row.reset(); + + sep = ""; + sep << "Data @< Pag. @#"; + sep.right_just(127); + sep.overwrite ("LISTA DI CONTROLLO ARCHIVI IN TRASFERIMENTO"); + row.put(sep,0); + printer().setheaderline(2,row); + row.reset(); + + sep = ""; + sep.fill('-'); + row.put(sep,0); + printer().setheaderline(3,row); + row.reset(); + + row.put(titolo,0); + printer().setheaderline(4,row); + row.reset(); + + sep = ""; + sep.fill('-'); + row.put(sep,0); + printer().setheaderline(5,row); + row.reset(); + + row.put(" ",0); + printer().setheaderline(6,row); + row.reset(); +} + +bool TLista_archivi::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return set(); + return FALSE; +} diff --git a/cg/cg6901.h b/cg/cg6901.h index ceddd81d4..6f5155c61 100755 --- a/cg/cg6901.h +++ b/cg/cg6901.h @@ -1,54 +1,54 @@ -// Lista controllo archivi - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class TLista_archivi : public TApplication -{ - TLocalisamfile* _ditte; - TLocalisamfile* _caus; - TLocalisamfile* _rcaus; - TLocalisamfile* _clifo; - TLocalisamfile* _pcon; - TLocalisamfile* _mov; - TLocalisamfile* _rmov; - TLocalisamfile* _rmoviva; - - TString _files, _ragsoc; - TDate _datalimite; - long _ditta; - bool _errore_grave; - int _risposta; - -public: - TString _titolo; - - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - - bool set(); - bool tabella_ditta(); - void controlla_causali (char sigla); - void controlla_clifo (char sigla); - void controlla_pcon (char sigla); - void controlla_PNIVA (char sigla); - void controlla_fatture (char sigla); - void setta_intestazione(char sigla); - bool controlla_valore (const TString& val,int lim); - - TLista_archivi() {}; -}; +// Lista controllo archivi + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TLista_archivi : public TApplication +{ + TLocalisamfile* _ditte; + TLocalisamfile* _caus; + TLocalisamfile* _rcaus; + TLocalisamfile* _clifo; + TLocalisamfile* _pcon; + TLocalisamfile* _mov; + TLocalisamfile* _rmov; + TLocalisamfile* _rmoviva; + + TString _files, _ragsoc; + TDate _datalimite; + long _ditta; + bool _errore_grave; + int _risposta; + +public: + TString _titolo; + + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + + bool set(); + bool tabella_ditta(); + void controlla_causali (char sigla); + void controlla_clifo (char sigla); + void controlla_pcon (char sigla); + void controlla_PNIVA (char sigla); + void controlla_fatture (char sigla); + void setta_intestazione(char sigla); + bool controlla_valore (const TString& val,int lim); + + TLista_archivi() {}; +}; diff --git a/cg/cg6902.cpp b/cg/cg6902.cpp index fd349d322..78c034b28 100755 --- a/cg/cg6902.cpp +++ b/cg/cg6902.cpp @@ -1,1303 +1,1303 @@ -#include "cg6900.h" -#include "cg6900a.h" -#include - -FILE* TInv_cont::chiedi_disco(const char* name, int disk, char floppy, bool lettura) -{ - message_box("Inserire il disco %d nel drive %c:", disk, floppy); - - // name.ext(format("%03d", disk)); - - FILE* f = NULL; - bool retry = TRUE; - while (retry) - { - f = fopen(name, lettura ? "rb" : "wb"); - if (f == NULL) - retry = yesno_box("Il file %s non e' accessibile: riprovare?", (const char*)name); - else - { - retry = FALSE; - fclose(f); - } - } - - return f; -} - -bool TInv_cont::scrivi_disco(char floppy, int disk, const char* work, - FILE* i, TProgind& w) -{ - chiedi_disco(work, disk, floppy, FALSE); - - TString str; - str.format("%02d", disk); - aggiorna_marker(str,31); // Aggiorna il num. progr. disco su marker - - TString path_m; - path_m << floppy << ":\\marker"; - -// TString path_h; -// path_h << floppy << ":\\header"; - - TString path_t; - path_t << floppy << ":\\trasfer"; - - fcopy(_marker,path_m); // Copia il marker su disco -// if (disk == 1) -// fcopy(_header,path_h); // Copia il record di controllo solo sul primo disco - - FILE* o = fopen(path_t, "wb"); - - TString buffer(BUFSIZE); - - long tot_scritti = BUFSIZE; - - while (tot_scritti <= _dim_disk) - { - const word letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i); - - long scritti = fwrite((char*)(const char*)buffer, letti, 1, o); - - tot_scritti += letti; - - if (letti < BUFSIZE) break; - - w.addstatus(letti); - } - - fclose(o); - - return TRUE; -} - -int TInv_cont::calcola_numero_dischi(TMask& msk) -{ - int numdisc = 0; - - FILE* t = fopen(_trasf, "rb"); - if (t == NULL) return error_box("Impossibile aprire il file '%s'", _trasf); - - long dim_t = _tras_file.determina_dimensione(t); //Determina la dimensione del trasfer - fclose(t); - -// FILE* h = fopen(_header, "rb"); -// if (h == NULL) return error_box("Impossibile aprire il file '%s'", _header); - -// long dim_h = determina_dimensione(h); //Determina la dimensione del trasfer -// fclose(h); - - FILE* m = fopen(_marker, "rb"); - if (m == NULL) return error_box("Impossibile aprire il file '%s'", _marker); - - long dim_m = _tras_file.determina_dimensione(m); // Determina la dimensione del marker - fclose(m); - - _dim_tot = dim_t + dim_m; //+dim_h; // Determina la dimensione totale - - int item = msk.get_int(F_DIM); - - switch (item) - { - case 1 : - _dim_disk = 1400000L; - break; - case 2 : - _dim_disk = 1200000L; - break; - case 3 : - _dim_disk = 720000L; - break; - case 4 : - _dim_disk = 360000L; - break; - default : - break; - }; - - if (_dim_tot < _dim_disk) - numdisc = 1; - else - { - numdisc = int(_dim_tot / _dim_disk); - if ( (_dim_tot % _dim_disk) != 0) - numdisc += 1; - } - - return numdisc; -} - -bool TInv_cont::invio_contabilita() -{ - char sigla; - TString nrec,files; - bool header = TRUE; - int size = 256; - - _numrec_cau = 0; - _numrec_clifo = 0; - _numrec_pcon = 0; - _numrec_pn = 0; - _numrec_iva = 0; - - _tras_file.open(_header); - - leggi_record_controllo(); - - files = _tras_file.sigle_file(); - nrec = _tras_file.nrec_file(); - files.trim(); - - _tras_file.open(_trasf,TRUE); - - for (int i = 0; i < files.len();i++) - { - sigla = files[i]; - //_numrec = atol(nrec.mid(i * 6,6)); - - if (header) - { - TString app1 = _control_rec.mid(0,25); - TString app2 = _control_rec.mid(26,7); - TString app3 = _control_rec.mid(35); - _control_rec = app1 << app2 << app3; - _control_rec.insert(" ",232); - _tras_file.write_control_rec(_control_rec,size); - header = FALSE; - } - - switch (sigla) - { - case 'W': - if (!invio_tab_cau()) - return FALSE; - break; - - case 'A': - if (!invio_clifo()) - return FALSE; - break; - - case 'P': - if (!invio_pcon()) - return FALSE; - break; - - case 'Z': - if (!invio_mov_PN()) - return FALSE; - break; - - case 'U': - if (!invio_mov_IVA()) - return FALSE; - break; - - default: - break; - }; - } - - aggiorna_header(files); - aggiorna_trasfer(files); - - TString str; - - calcola_totale_record(); - str.format("%06ld", _tot_rec); - aggiorna_marker(str,23); - - return TRUE; -} - -void TInv_cont::aggiorna_header(TString& files) -{ - char sigla; - int size = 256; - - _tras_file.open(_header); - leggi_record_controllo(); - - for (int i = 0; i < files.len();i++) - { - sigla = files[i]; - - switch (sigla) - { - case 'W': - { - TString app; - app.format("%06ld", _numrec_cau); - _control_rec.overwrite(app,((i * 6) + 50)); - } - break; - - case 'A': - { - TString app; - app.format("%06ld", _numrec_clifo); - _control_rec.overwrite(app,((i * 6) + 50)); - } - break; - - case 'P': - { - TString app; - app.format("%06ld", _numrec_pcon); - _control_rec.overwrite(app,((i * 6) + 50)); - } - break; - - case 'Z': - { - TString app; - app.format("%06ld", _numrec_pn); - _control_rec.overwrite(app,((i * 6) + 50)); - } - break; - - case 'U': - { - TString app; - app.format("%06ld", _numrec_iva); - _control_rec.overwrite(app,((i * 6) + 50)); - } - break; - - default: - break; - }; - } - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); -} - -void TInv_cont::aggiorna_trasfer(TString& files) -{ - char sigla; - int size = 256; - - _tras_file.open(_trasf); - leggi_record_controllo(); - - for (int i = 0; i < files.len();i++) - { - sigla = files[i]; - - switch (sigla) - { - case 'W': - { - TString app; - app.format("%06ld", _numrec_cau); - _control_rec.overwrite(app,((i * 6) + 47)); - } - break; - - case 'A': - { - TString app; - app.format("%06ld", _numrec_clifo); - _control_rec.overwrite(app,((i * 6) + 47)); - } - break; - - case 'P': - { - TString app; - app.format("%06ld", _numrec_pcon); - _control_rec.overwrite(app,((i * 6) + 47)); - } - break; - - case 'Z': - { - TString app; - app.format("%06ld", _numrec_pn); - _control_rec.overwrite(app,((i * 6) + 47)); - } - break; - - case 'U': - { - TString app; - app.format("%06ld", _numrec_iva); - _control_rec.overwrite(app,((i * 6) + 47)); - } - break; - - default: - break; - }; - } - _tras_file.write_control_rec(_control_rec,size); - _tras_file.close(); -} - -bool TInv_cont::invio_tab_cau() -{ - int size = 256; - TString record(size); - TString cod; - - long cicli = _tcaus->items(); - _prog = new TProgind(cicli,"Tabella Causali: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); - - _tras_file.open(_trasf,TRUE); - - for (_tcaus->first(); !_tcaus->eof(); _tcaus->next()) - { - TString str; - - _prog->addstatus(1); - - record.spaces(); - - const char* codcau = _tcaus->get(CAU_CODCAUS); - str.format("%03s", codcau); - record.overwrite("W1",0); //Tipo record - record.overwrite(str,2); //Codice causale - - TString descr = _tcaus->get(CAU_DESCR); - descr.format("%-.20s", (const char*) descr); - record.overwrite(descr,15); //Descrizione - - TString tipodoc = _tcaus->get(CAU_TIPODOC); - record.overwrite(tipodoc,35); //Tipo documento - - TString reg = _tcaus->get(CAU_REG); - if (real::is_natural(reg)) - { - int app = atoi(reg); - reg.format("%d", app); - } - record.overwrite(reg,37); //Registro IVA - - bool alleg = _tcaus->get_bool(CAU_ALLEG); - if (alleg) - record.overwrite("X",38); - else //Flag esclusione tipo documento da allegato - record.overwrite(" ",38); - - int m770 = atoi(_tcaus->get(CAU_M770)); - str = format("%1d", m770); - record.overwrite(str,39); //Collegamento modello 770 - - TString cespiti = _tcaus->get(CAU_COLLCESP); - record.overwrite(cespiti,40); //Collegamento cespiti - - bool numdoc = _tcaus->get_bool(CAU_NUMDOC); - if (numdoc) - record.overwrite("1",206); - else //Flag immissione numero documento - record.overwrite("0",206); - - bool datadoc = _tcaus->get_bool(CAU_DATADOC); - if (datadoc) - record.overwrite("1",207); - else //Flag immissione data documento - record.overwrite("0",207); - - const char* codcausim = _tcaus->get(CAU_CODCAUSIM); - str.format("%03s", codcausim); - record.overwrite(str,209); //Codice causale per incasso immediato - - bool intracom = _tcaus->get_bool(CAU_INTRACOM); - if (intracom) - record.overwrite("X",246); - else //Flag per operazioni intracomunitarie - record.overwrite(" ",246); - - bool valintra = _tcaus->get_bool(CAU_VALINTRA); - if (valintra) - record.overwrite("X",247); - else //Gestione valuta per oper. intracomunitarie - record.overwrite(" ",247); - - bool ritfatt = _tcaus->get_bool(CAU_RITFATT); - if (ritfatt) - record.overwrite("X",248); - else //Flag causale per fattura ricevuta in ritardo - record.overwrite(" ",248); - - bool autofatt = _tcaus->get_bool(CAU_AUTOFATT); - if (autofatt) - record.overwrite("X",249); - else //Autofattura art.34 - record.overwrite(" ",249); - - - int num = 0; - int pos_gcs = 41; - int pos_sez = 191; - _codcaus = _tcaus->get(CAU_CODCAUS); - - do - { - num++; - - _trcaus->setkey(1); - _trcaus->zero(); - _trcaus->put(RCA_CODCAUS, _codcaus); - _trcaus->put(RCA_NRIGA, num); - - if (_trcaus->read() == NOERR) - { - int g = _trcaus->get_int (RCA_GRUPPO); - int c = _trcaus->get_int (RCA_CONTO); - long s = _trcaus->get_long(RCA_SOTTOCONTO); - TString sez = _trcaus->get (RCA_SEZIONE); - - str = format("%02d", g); - record.overwrite(str,pos_gcs); //Gruppo - pos_gcs += 2; - str = format("%02d", c); - record.overwrite(str,pos_gcs); //Conto - pos_gcs += 2; - str = format("%06ld", s); - record.overwrite(str,pos_gcs); //Sottoconto - pos_gcs += 6; - - record.overwrite(sez,pos_sez); //Sezione - pos_sez++; - } - else - { - int g = 0; - int c = 0; - long s = 0; - TString sez = " "; - - str = format("%02d", g); - record.overwrite(str,pos_gcs); //Gruppo - pos_gcs += 2; - str = format("%02d", c); - record.overwrite(str,pos_gcs); //Conto - pos_gcs += 2; - str = format("%06ld", s); - record.overwrite(str,pos_gcs); //Sottoconto - pos_gcs += 6; - - record.overwrite(sez,pos_sez); //Sezione - pos_sez++; - } - } - while (num < 15); - - _numrec_cau++; - - _tras_file.write_control_rec(record,size); - } - delete _prog; - - _tras_file.close(); - - return TRUE; -} - -void TInv_cont::scrivi_telefono(TString& appoggio) -{ - TString ptel; - TString tel; - - if (_tclifo->get(CLI_TEL).not_empty()) - { - ptel = _tclifo->get(CLI_PTEL); - tel = _tclifo->get(CLI_TEL); - } - else - if (_tclifo->get(CLI_TEL2).not_empty()) - { - ptel = _tclifo->get(CLI_PTEL2); - tel = _tclifo->get(CLI_TEL2); - } - else - if (_tclifo->get(CLI_TEL3).not_empty()) - { - ptel = _tclifo->get(CLI_PTEL3); - tel = _tclifo->get(CLI_TEL3); - } - - if (real::is_natural(ptel)) - { - appoggio << ptel; - if (ptel.not_empty()) - appoggio << "/" << tel; - else - appoggio << tel; - } - else - appoggio << tel; -} - -bool TInv_cont::invio_clifo() -{ - int size = 256; - TString record(size); - - long cicli = _tclifo->items(); - _prog = new TProgind(cicli,"Anagrafica Clienti/Fornitori: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); - - _tras_file.open(_trasf,TRUE); - - for (_tclifo->first(); !_tclifo->eof(); _tclifo->next()) - { - TString str; - - _prog->addstatus(1); - - record.spaces(); - - // Il tipocf su PC e' C = cliente F = fornitore. - // Il tipocf su AS400 e' 1 = cliente 2 = fornitore. - TString tipo_cod; - - char tipo = _tclifo->get_char(CLI_TIPOCF); - if (tipo == 'C') - tipo_cod = "1"; - else - if (tipo == 'F') - tipo_cod = "2"; - - record.overwrite("A1",0); //Tipo record - record.overwrite(tipo_cod,2); //Tipo cliente/fornitore - - long codice = _tclifo->get_long(CLI_CODCF); - str.format("%06ld", codice); - record.overwrite(str,3); //Codice cliente/fornitore - - //Il tipo persona su PC e' F = fisica G = giuridica - //Il tipo persona su AS400 e' 0 = giuridica 1 = fisica - char tipop = _tclifo->get_char(CLI_TIPOPERS); - TString tipopers; - - if (tipop == 'F') - tipopers = "1"; - else - if (tipop == 'G') - tipopers = "0"; - - record.overwrite(tipopers,15); //Tipo persona - - TString ragsoc = _tclifo->get(CLI_RAGSOC); - TString cognome = ragsoc.mid(0,30); - TString nome = ragsoc.mid(30,20); - str.format("%-30s", (const char*) cognome); //Cognome o I ragione sociale - record.overwrite(str,16); - str.format("%-20s", (const char*) nome); - record.overwrite(str,46); //Nome o II ragione sociale - - TString paiv = _tclifo->get(CLI_PAIV); - str.format("%011s", (const char*) paiv); - record.overwrite(str,66); //Partita IVA - - TString cofi = _tclifo->get(CLI_COFI); - str.format("%-16s", (const char*) cofi); - record.overwrite(str,77); //Codice fiscale - - TString indcf = _tclifo->get(CLI_INDCF); - TString civcf = _tclifo->get(CLI_CIVCF); - int lind = indcf.len(); - int lciv = civcf.len(); - int totlen = lind + lciv + 1; - if (totlen < 36) - indcf << " " << civcf; - - str.format("%-35s", (const char*) indcf); - record.overwrite(str,93); //Indirizzo - - TString capcf = _tclifo->get(CLI_CAPCF); - str.format("%05s", (const char*) capcf); - record.overwrite(str,128); //Codice di avviamento postale - - TString localita = _tclifo->get(CLI_LOCCF); - str.format("%-.20s", (const char*) localita); - record.overwrite(str,133); //Localita' - - TString comcf = _tclifo->get(CLI_COMCF); - TString provincia = ""; - if (comcf.not_empty()) - provincia = cerca_provincia(comcf); - str.format("%-2s", (const char*) provincia); - record.overwrite(str,153); //Provincia - -/* TString ptel = _tclifo->get(CLI_PTEL); - TString tel = _tclifo->get(CLI_TEL); - TString appoggio; - appoggio << ptel << " " << tel; - record.overwrite(appoggio,155); -*/ - TString appoggio = ""; - scrivi_telefono(appoggio); - appoggio.format("%-12s", (const char*) appoggio); - appoggio.cut(12); - record.overwrite(appoggio,155); - - TString alleg = _tclifo->get(CLI_ALLEG); - record.overwrite(alleg,167); //Flag gestione allegato - - int gruppo = _tclifo->get_int(CLI_GRUPPORIC); - int conto = _tclifo->get_int(CLI_CONTORIC); - long sottoc = _tclifo->get_long(CLI_SOTTOCRIC); - str.format("%02d", gruppo); - record.overwrite(str,168); //Gruppo di costo/ricavo - str.format("%02d", conto); - record.overwrite(str,170); //Conto di costo/ricavo - str.format("%06ld", sottoc); - record.overwrite(str,172); //sottoconto di costo/ricavo - - long codalleg = _tclifo->get_long(CLI_CODALLEG); - str.format("%06ld", codalleg); - record.overwrite(str,179); - - TString codpag = _tclifo->get(CLI_CODPAG); - str.format("%-2s", (const char*) codpag); - - _numrec_clifo++; - - _tras_file.write_control_rec(record,size); - } - delete _prog; - - _tras_file.close(); - - return TRUE; -} - -bool TInv_cont::invio_pcon() -{ - int size = 256; - TString record(size); - - long cicli = _tpcon->items(); - _prog = new TProgind(cicli,"Anagrafica Piano Conti: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); - - _tras_file.open(_trasf,TRUE); - - for (_tpcon->first(); !_tpcon->eof(); _tpcon->next()) - { - TString str; - - _prog->addstatus(1); - - record.spaces(); - - int g = _tpcon->get_int (PCN_GRUPPO); - int c = _tpcon->get_int (PCN_CONTO); - long s = _tpcon->get_long(PCN_SOTTOCONTO); - - // Se si tratta di un GRUPPO - - if (g != 0 && c == 0 && s == 0) - { - record.overwrite("P1",0); //Tipo record - str.format("%02d", g); - record.overwrite(str,2); //Gruppo - - TString descr (_tpcon->get(PCN_DESCR)); - str.format("%-.30s", (const char*) descr); - record.overwrite(str,15); //Descrizione gruppo - } - - // Se si tratta di un CONTO - - if (g != 0 && c != 0 && s == 0) - { - record.overwrite("P2",0); //Tipo record - str.format("%02d", g); - record.overwrite(str,2); //Gruppo - - str.format("%02d", c); - record.overwrite(str,4); //Conto - - TString descr (_tpcon->get(PCN_DESCR)); - str.format("%-.30s", (const char*) descr); - record.overwrite(str,15); //Descrizione conto - - int indbil = _tpcon->get_int(PCN_INDBIL); - str.format("%d", indbil); - record.overwrite(str,45); //Indicatore di bilancio - - TString tmcf = _tpcon->get(PCN_TMCF); - record.overwrite(tmcf,46); //Flag conto cliente/fornitore - - bool stsottbil = _tpcon->get_bool(PCN_STSOTTBIL); - if (stsottbil) - str = "1"; - else - str = "0"; - record.overwrite(str,47); //Flag stampa dettaglio sottoconti su bilancio - - // Classe IV direttiva CEE - - TString sez = _tpcon->get(PCN_SEZIVD); - if (sez == "0") - sez = " "; - record.overwrite(sez,48); //Sezione IV dir - - TString let = _tpcon->get(PCN_LETTIVD); - record.overwrite(let,49); //Lettera IV dir - - int numrom = atoi(_tpcon->get(PCN_NUMRIVD)); - str.format("%03d", numrom); - record.overwrite(str,60); //Numero arabo corrispondente al numero romano - TString numr = itor(numrom); - str.format("%-8s", (const char*) numr); - record.overwrite(str,50); //Numero romano IV dir - - int num = _tpcon->get_int(PCN_NUMIVD); - str.format("%02d", num); - record.overwrite(str,58); //Numero arabo IV dir - - // Classe IV direttiva CEE di segno opposto - - TString sezop = _tpcon->get(PCN_SEZIVDOPP); - if (sezop == "0") - sezop = " "; - record.overwrite(sezop,63); //Sezione IV dir - - TString letop = _tpcon->get(PCN_LETTIVDOPP); - record.overwrite(letop,64); //Lettera IV dir - - int numromop = atoi(_tpcon->get(PCN_NUMRIVDOPP)); - str.format("%03d", numromop); - record.overwrite(str,75); //Numero arabo corrispondente al numero romano - TString numrop = itor(numromop); - str.format("%-8s", (const char*) numrop); - record.overwrite(str,65); //Numero romano IV dir - - int numop = _tpcon->get_int(PCN_NUMIVDOPP); - str.format("%02d", numop); - record.overwrite(str,73); //Numero arabo IV dir - } - - // Se si tratta di un SOTTOCONTO - - if (g != 0 && c != 0 && s != 0) - { - record.overwrite("P3",0); //Tipo record - str.format("%02d", g); - record.overwrite(str,2); //Gruppo - - str.format("%02d", c); - record.overwrite(str,4); //Conto - - str.format("%06ld", s); - record.overwrite(str,6); //Sottoconto - - TString descr (_tpcon->get(PCN_DESCR)); - str.format("%-.30s", (const char*) descr); - record.overwrite(str,15); //Descrizione sottoconto - - int tipospric = _tpcon->get_int(PCN_TIPOSPRIC); - str.format("%d", tipospric); - record.overwrite(str,45); //Tipo costo/ricavo - - int ricser = _tpcon->get_int(PCN_RICSER); - if (ricser == 0) - str = " "; - else - str.format("%d", ricser); - record.overwrite(str,46); //Tipo attivita' - - // Classe IV direttiva CEE - - TString sez = _tpcon->get(PCN_SEZIVD); - if (sez == "0") - sez = " "; - record.overwrite(sez,47); //Sezione IV dir - - TString let = _tpcon->get(PCN_LETTIVD); - record.overwrite(let,48); //Lettera IV dir - - int numrom = atoi(_tpcon->get(PCN_NUMRIVD)); - str.format("%03d", numrom); - record.overwrite(str,59); //Numero arabo corrispondente al numero romano - TString numr = itor(numrom); - str.format("%-8s", (const char*) numr); - record.overwrite(str,49); //Numero romano IV dir - - int num = _tpcon->get_int(PCN_NUMIVD); - str.format("%02d", num); - record.overwrite(str,57); //Numero arabo IV dir - - // Classe IV direttiva CEE di segno opposto - - TString sezop = _tpcon->get(PCN_SEZIVDOPP); - if (sezop == "0") - sezop = " "; - record.overwrite(sezop,62); //Sezione IV dir - - TString letop = _tpcon->get(PCN_LETTIVDOPP); - record.overwrite(letop,63); //Lettera IV dir - - int numromop = atoi(_tpcon->get(PCN_NUMRIVDOPP)); - str.format("%03d", numromop); - record.overwrite(str,74); //Numero arabo corrispondente al numero romano - TString numrop = itor(numromop); - str.format("%-8s", (const char*) numrop); - record.overwrite(str,64); //Numero romano IV dir - - int numop = _tpcon->get_int(PCN_NUMIVDOPP); - str.format("%02d", numop); - record.overwrite(str,72); //Numero arabo IV dir - } - - _numrec_pcon++; - - _tras_file.write_control_rec(record,size); - } - delete _prog; - - _tras_file.close(); - - return TRUE; -} - -void TInv_cont::testata_mov_PN() -{ - _annoes = _tmov->get_int (MOV_ANNOES); - _datareg = _tmov->get_date(MOV_DATAREG); - _datadoc = _tmov->get_date(MOV_DATADOC); - _numdoc = _tmov->get (MOV_NUMDOC); - _reg = _tmov->get (MOV_REG); - _codcausm = _tmov->get (MOV_CODCAUS); - _codpag = _tmov->get (MOV_CODPAG); -// _tipodoc = _tmov->get (MOV_TIPODOC); - _protiva = _tmov->get_long(MOV_PROTIVA); - _uprotiva = _tmov->get_long(MOV_UPROTIVA); - _inviato = _tmov->get_bool(MOV_INVIATO); -} - -void TInv_cont::testata_trasfer(long nreg, int nrig, TString& record) -{ - TString str; - - record.overwrite("Z1",0); //Tipo record - - str.format("%06ld", nreg); - record.overwrite(str,2); //Numero di registrazione - - str.format("%02d", nrig); - record.overwrite(str,8); //Numero di riga - - TString datastr = _datareg.string(); - str = riconverti(datastr,FALSE); - str.format("%06s", (const char*) str); - record.overwrite(str,15); //Data di registrazione - - //Determino il segnalino della competenza - int segnalino; - - int anno = date2esc(_datareg); - if (_annoes == anno) - segnalino = 0; - else - segnalino = 1; - str.format("%d", segnalino); - record.overwrite(str,21); //Segnalino della competenza - - TString datadocstr = _datadoc.string(); - str = riconverti(datadocstr,FALSE); - str.format("%06s", (const char*) str); - record.overwrite(str,22); //Data documento - - str.format("%-7s", (const char*) _numdoc); - record.overwrite(str,28); - - TString reg; - if (real::is_natural(_reg)) - { - int app = atoi(_reg); - reg.format("%d", app); - } - else - reg = _reg.trim(); - - record.overwrite(reg,35); //Codice registro IVA - - str.format("%05d", _protiva); - record.overwrite(str,36); //Numero protocollo IVA - - const char* cod_causm = (const char*)_codcausm; - str.format("%03s", (const char*)_codcausm); - record.overwrite(str,41); //Codice causale - - str.format("%-2s", (const char*) _codpag); - record.overwrite(str,95); //Codice di pagamento - - str.format("%05d", _uprotiva); - record.overwrite(str,108); //Ultimo numero di protocollo IVA - - record.overwrite("0",218); //Flag di solo sezionale -} - -void TInv_cont::sola_iva(TString& record) -{ - TString str; - TLocalisamfile rcaus (LF_RCAUSALI); - int gruppo = 0; - int conto = 0; - long sottoc = 0; - - rcaus.setkey(1); - rcaus.zero(); - rcaus.put(RCA_CODCAUS, _codcausm); - rcaus.read(); - TString codcau = rcaus.get(RCA_CODCAUS); - if (codcau == _codcausm) - { - gruppo = rcaus.get_int (RCA_GRUPPO); - conto = rcaus.get_int (RCA_CONTO); - sottoc = _tmov->get_long(MOV_CODCF); - } - - str.format("%02d", gruppo); - record.overwrite(str,74); //Gruppo di partita - str.format("%02d", conto); - record.overwrite(str,76); //Conto di partita - str.format("%06ld", sottoc); - record.overwrite(str,78); //Sottoconto di partita - - record.overwrite("0000000000",85); //Sottoconto di contropartita - - record.overwrite("00000000000",97); //Importo -} - -bool TInv_cont::invio_mov_PN() -{ - int size = 256; - TString record(size); - bool almeno_una_riga = FALSE; - - long cicli = _tmov->items(); - _prog = new TProgind(cicli,"Movimenti di Prima nota: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); - - _tras_file.open(_trasf,TRUE); - - for (_tmov->first(); !_tmov->eof(); _tmov->next()) - { - TString str; - - _prog->addstatus(1); - - record.spaces(); - - long nreg = _tmov->get_long(RMV_NUMREG); - - testata_mov_PN(); - - _trmov->setkey(1); - _trmov->zero(); - _trmov->put(RMV_NUMREG, nreg); - TRectype trmov(LF_RMOV); - trmov = _trmov->curr(); - - for (_trmov->read(); !_trmov->eof(); _trmov->next()) - { - if (_trmov->curr() > trmov) break; - - record = ""; - record.spaces(); - - almeno_una_riga = TRUE; - - int nrig = _trmov->get_int (RMV_NUMRIG); - - testata_trasfer(nreg,nrig,record); - - TString descr = _trmov->get(RMV_DESCR); - str.format("%-.30s", (const char*) descr); - record.overwrite(str,44); //Descrizione riga di movimento - - int gruppo = _trmov->get_int(RMV_GRUPPO); - str.format("%02d", gruppo); - record.overwrite(str,74); //Gruppo di partita - - int conto = _trmov->get_int(RMV_CONTO); - str.format("%02d", conto); - record.overwrite(str,76); //Conto di partita - - long sottoc = _trmov->get_long(RMV_SOTTOCONTO); - str.format("%06ld", sottoc); - record.overwrite(str,78); //Sottoconto di partita - - TString sez = _trmov->get(RMV_SEZIONE); - str.format("%s", (const char*) sez); - record.overwrite(str,84); //Sezione importo - - int gruppoc = _trmov->get_int(RMV_GRUPPOC); - str.format("%02d", gruppoc); - record.overwrite(str,85); //Gruppo di contropartita - - int contoc = _trmov->get_int(RMV_CONTOC); - str.format("%02d", contoc); - record.overwrite(str,87); //Conto di contropartita - - long sottocc = _trmov->get_long(RMV_SOTTOCONTOC); - str.format("%06ld", sottocc); - record.overwrite(str,89); //Sottoconto di contropartita - - real importo (_trmov->get_real(RMV_IMPORTO)); - TString numero = importo.string(); - if (importo.sign() < 0) - negPC2negAS(numero); - str.format("%011s", (const char*) numero); - record.overwrite(str,97); //Importo riga di movimento - -// TString tipoc = _trmov->get(RMV_TIPOC); -// record.overwrite(tipoc,219); //Flag cliente/fornitore - - _tras_file.write_control_rec(record,size); - _numrec_pn++; - } - - if (!almeno_una_riga) - { - int nrig = 1; - testata_trasfer(nreg,nrig,record); - sola_iva(record); - _numrec_pn++; - _tras_file.write_control_rec(record,size); - } - else - almeno_una_riga = FALSE; - } - delete _prog; - - _tras_file.close(); - - return TRUE; -} - -bool TInv_cont::testata_mov_IVA(long numreg) -{ - _tmov->setkey(1); - _tmov->zero(); - _tmov->put(MOV_NUMREG, numreg); - if (_tmov->read() == NOERR) - { - _codcf = _tmov->get_long(MOV_CODCF); - _data74ter = _tmov->get_date(MOV_DATA74TER); - _corrlire = _tmov->get_real(MOV_CORRLIRE); - _codvali = _tmov->get (MOV_CODVALI); - _cambioi = _tmov->get_real(MOV_CAMBIOI); - _corrval = _tmov->get_real(MOV_CORRVALUTA); - _ocfpi = _tmov->get (MOV_OCFPI); - _dataregiva = _tmov->get_date(MOV_DATAREG); - _inviato = _tmov->get_bool(MOV_INVIVA); - if (_ocfpi.not_empty()) - cerca_occasionale(); - } - else - return FALSE; - - return TRUE; -} - -void TInv_cont::cerca_occasionale() -{ - _toccas->setkey(1); - _toccas->zero(); - _toccas->put(OCC_CFPI, _ocfpi); - if (_toccas->read() == NOERR) - { - _ragsococc = _toccas->get(OCC_RAGSOC); - _indocc = _toccas->get(OCC_INDIR); - _capocc = _toccas->get(OCC_CAP); - TString com = _toccas->get(OCC_COM); - cerca_comune_occas(com); - } - else - { - _ragsococc = ""; - _indocc = ""; - _capocc = ""; - _localocc = ""; - _provocc = ""; - } -} - -void TInv_cont::cerca_comune_occas(const TString& com) -{ - TLocalisamfile comuni (LF_COMUNI); - - comuni.setkey(1); - comuni.zero(); - comuni.put(COM_COM, com); - if (comuni.read() == NOERR) - { - _localocc = comuni.get(COM_DENCOM); - _provocc = comuni.get(COM_PROVCOM); - } -} - -bool TInv_cont::invio_mov_IVA() -{ - int size = 256; - TString record(size); - long nreg_p; - int numero_righe = 0; - - nreg_p = -1; - - long cicli = _triva->items(); - _prog = new TProgind(cicli,"Movimenti Iva: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); - - _tras_file.open(_trasf,TRUE); - - for (_triva->first(); !_triva->eof(); _triva->next()) - { - TString str; - - _prog->addstatus(1); - - record.spaces(); - - long nreg = _triva->get_long(RMI_NUMREG); - int nrig = _triva->get_int (RMI_NUMRIG); - - if (nreg != nreg_p) - { - numero_righe = 0; - if (!testata_mov_IVA(nreg)) - return error_box("Rilevata riga mancante di testata: impossibile proseguire. /n Registrazione %07d Riga %03d",nreg,nrig); - } - - record.overwrite("U1",0); //Tipo record - - str.format("%06ld", nreg); - record.overwrite(str,2); //Numero di registrazione - - str.format("%02d", nrig); - record.overwrite(str,8); //Numero di riga - - nreg_p = nreg; - - str.format("%06ld", _codcf); - record.overwrite(str,15); //Codice cliente/fornitore - - real imponibile (_triva->get_real(RMI_IMPONIBILE)); - TString numero = imponibile.string(); - if (imponibile.sign() < 0) - negPC2negAS(numero); - str.format("%011s", (const char*) numero); - record.overwrite(str,21); //Imponibile - - TString codiva (_triva->get(RMI_CODIVA)); - str.format("%02s", (const char*) codiva); - record.overwrite(str,32); //Codice iva - - real imposta (_triva->get_real(RMI_IMPOSTA)); - numero = imposta.string(); - if (imposta.sign() < 0) - negPC2negAS(numero); - str.format("%09s", (const char*) numero); - record.overwrite(str,34); //Imposta - - int tipocr = _triva->get_int(RMI_TIPOCR); - str.format("%01d", tipocr); - record.overwrite(str,43); //Tipo costo/ricavo - - int tipodet = _triva->get_int(RMI_TIPODET); - str.format("%01d", tipodet); - record.overwrite(str,44); //Tipo detraibilita' - - int gruppo = _triva->get_int(RMI_GRUPPO); - str.format("%02d", gruppo); - record.overwrite(str,45); //Gruppo - - int conto = _triva->get_int(RMI_CONTO); - str.format("%02d", conto); - record.overwrite(str,47); //Conto - - long sottoc = _triva->get_long(RMI_SOTTOCONTO); - str.format("%06ld", sottoc); - record.overwrite(str,49); //Sottoconto - - TString data74terstr = _data74ter.string(); - str = riconverti(data74terstr,FALSE); - str.format("%06s", (const char*) str); - record.overwrite(str,55); //Data per registri 74 TER - - if (_ocfpi.not_empty()) - { - str.format("%-.25s", (const char*) _ragsococc); - record.overwrite(str,61); //Ragione sociale cliente occasionale - - str.format("%-.22s", (const char*) _indocc); - record.overwrite(str,86); //indirizzo cliente occasionale - - str.format("%-.18s", (const char*) _localocc); - record.overwrite(str,108); //Localita cliente occasionale - - str.format("%05s", (const char*) _capocc); - record.overwrite(str,126); //Codice avviamento postale cliente occasionale - - str.format("%-.2s", (const char*) _provocc); - record.overwrite(str,131); //Provincia cliente occasionale - } - - int tipoatt = _triva->get_int(RMI_TIPOATT); - str.format("%01d", tipoatt); - record.overwrite(str,133); //Tipo attivita' - - bool intra = _triva->get_bool(RMI_INTRA); - if (intra) - record.overwrite("X",134); - else - record.overwrite(" ",134); //Flag causale x acquisti intracomunitari - - TString corrlire = _corrlire.string(); - if (_corrlire.sign() < 0) - negPC2negAS(corrlire); - str.format("%011s", (const char*) corrlire); - record.overwrite(str,135); //Corrispettivo in lire - - record.overwrite(_codvali,146); //Codice valuta - - dec2integer(_cambioi,100000); - TString cambioi = _cambioi.string(); - if (_cambioi.sign() < 0) - negPC2negAS(cambioi); - str.format("%011s", (const char*) cambioi); - record.overwrite(str,149); //Cambio - - dec2integer(_corrval,1000); - TString corrval = _corrval.string(); - if (_corrval.sign() < 0) - negPC2negAS(corrval); - str.format("%014s", (const char*) corrval); - record.overwrite(str,160); //Corrispettivo in valuta - - _numrec_iva++; - - _tras_file.write_control_rec(record,size); - - iva_inviata(nreg); - } - delete _prog; - - _tras_file.close(); - - return TRUE; -} - -void TInv_cont::negPC2negAS(TString& numero) -{ - numero.trim(); - numero = numero.mid(1); // Considero il numero senza il segno - - - int len = numero.len(); - int cifra = atoi(numero.mid(len -1 ,1)); // Considero l'ultima cifra - - char carattere = _tabella[cifra]; - - numero = numero.mid(0,len -1); // Considero il numero senza l'ultima cifra - numero << carattere; -} - -void TInv_cont::dec2integer(real& val, long dec) -{ - val = val * dec; -} +#include "cg6900.h" +#include "cg6900a.h" +#include + +FILE* TInv_cont::chiedi_disco(const char* name, int disk, char floppy, bool lettura) +{ + message_box("Inserire il disco %d nel drive %c:", disk, floppy); + + // name.ext(format("%03d", disk)); + + FILE* f = NULL; + bool retry = TRUE; + while (retry) + { + f = fopen(name, lettura ? "rb" : "wb"); + if (f == NULL) + retry = yesno_box("Il file %s non e' accessibile: riprovare?", (const char*)name); + else + { + retry = FALSE; + fclose(f); + } + } + + return f; +} + +bool TInv_cont::scrivi_disco(char floppy, int disk, const char* work, + FILE* i, TProgind& w) +{ + chiedi_disco(work, disk, floppy, FALSE); + + TString str; + str.format("%02d", disk); + aggiorna_marker(str,31); // Aggiorna il num. progr. disco su marker + + TString path_m; + path_m << floppy << ":\\marker"; + +// TString path_h; +// path_h << floppy << ":\\header"; + + TString path_t; + path_t << floppy << ":\\trasfer"; + + fcopy(_marker,path_m); // Copia il marker su disco +// if (disk == 1) +// fcopy(_header,path_h); // Copia il record di controllo solo sul primo disco + + FILE* o = fopen(path_t, "wb"); + + TString buffer(BUFSIZE); + + long tot_scritti = BUFSIZE; + + while (tot_scritti <= _dim_disk) + { + const word letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i); + + long scritti = fwrite((char*)(const char*)buffer, letti, 1, o); + + tot_scritti += letti; + + if (letti < BUFSIZE) break; + + w.addstatus(letti); + } + + fclose(o); + + return TRUE; +} + +int TInv_cont::calcola_numero_dischi(TMask& msk) +{ + int numdisc = 0; + + FILE* t = fopen(_trasf, "rb"); + if (t == NULL) return error_box("Impossibile aprire il file '%s'", _trasf); + + long dim_t = _tras_file.determina_dimensione(t); //Determina la dimensione del trasfer + fclose(t); + +// FILE* h = fopen(_header, "rb"); +// if (h == NULL) return error_box("Impossibile aprire il file '%s'", _header); + +// long dim_h = determina_dimensione(h); //Determina la dimensione del trasfer +// fclose(h); + + FILE* m = fopen(_marker, "rb"); + if (m == NULL) return error_box("Impossibile aprire il file '%s'", _marker); + + long dim_m = _tras_file.determina_dimensione(m); // Determina la dimensione del marker + fclose(m); + + _dim_tot = dim_t + dim_m; //+dim_h; // Determina la dimensione totale + + int item = msk.get_int(F_DIM); + + switch (item) + { + case 1 : + _dim_disk = 1400000L; + break; + case 2 : + _dim_disk = 1200000L; + break; + case 3 : + _dim_disk = 720000L; + break; + case 4 : + _dim_disk = 360000L; + break; + default : + break; + }; + + if (_dim_tot < _dim_disk) + numdisc = 1; + else + { + numdisc = int(_dim_tot / _dim_disk); + if ( (_dim_tot % _dim_disk) != 0) + numdisc += 1; + } + + return numdisc; +} + +bool TInv_cont::invio_contabilita() +{ + char sigla; + TString nrec,files; + bool header = TRUE; + int size = 256; + + _numrec_cau = 0; + _numrec_clifo = 0; + _numrec_pcon = 0; + _numrec_pn = 0; + _numrec_iva = 0; + + _tras_file.open(_header); + + leggi_record_controllo(); + + files = _tras_file.sigle_file(); + nrec = _tras_file.nrec_file(); + files.trim(); + + _tras_file.open(_trasf,TRUE); + + for (int i = 0; i < files.len();i++) + { + sigla = files[i]; + //_numrec = atol(nrec.mid(i * 6,6)); + + if (header) + { + TString app1 = _control_rec.mid(0,25); + TString app2 = _control_rec.mid(26,7); + TString app3 = _control_rec.mid(35); + _control_rec = app1 << app2 << app3; + _control_rec.insert(" ",232); + _tras_file.write_control_rec(_control_rec,size); + header = FALSE; + } + + switch (sigla) + { + case 'W': + if (!invio_tab_cau()) + return FALSE; + break; + + case 'A': + if (!invio_clifo()) + return FALSE; + break; + + case 'P': + if (!invio_pcon()) + return FALSE; + break; + + case 'Z': + if (!invio_mov_PN()) + return FALSE; + break; + + case 'U': + if (!invio_mov_IVA()) + return FALSE; + break; + + default: + break; + }; + } + + aggiorna_header(files); + aggiorna_trasfer(files); + + TString str; + + calcola_totale_record(); + str.format("%06ld", _tot_rec); + aggiorna_marker(str,23); + + return TRUE; +} + +void TInv_cont::aggiorna_header(TString& files) +{ + char sigla; + int size = 256; + + _tras_file.open(_header); + leggi_record_controllo(); + + for (int i = 0; i < files.len();i++) + { + sigla = files[i]; + + switch (sigla) + { + case 'W': + { + TString app; + app.format("%06ld", _numrec_cau); + _control_rec.overwrite(app,((i * 6) + 50)); + } + break; + + case 'A': + { + TString app; + app.format("%06ld", _numrec_clifo); + _control_rec.overwrite(app,((i * 6) + 50)); + } + break; + + case 'P': + { + TString app; + app.format("%06ld", _numrec_pcon); + _control_rec.overwrite(app,((i * 6) + 50)); + } + break; + + case 'Z': + { + TString app; + app.format("%06ld", _numrec_pn); + _control_rec.overwrite(app,((i * 6) + 50)); + } + break; + + case 'U': + { + TString app; + app.format("%06ld", _numrec_iva); + _control_rec.overwrite(app,((i * 6) + 50)); + } + break; + + default: + break; + }; + } + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); +} + +void TInv_cont::aggiorna_trasfer(TString& files) +{ + char sigla; + int size = 256; + + _tras_file.open(_trasf); + leggi_record_controllo(); + + for (int i = 0; i < files.len();i++) + { + sigla = files[i]; + + switch (sigla) + { + case 'W': + { + TString app; + app.format("%06ld", _numrec_cau); + _control_rec.overwrite(app,((i * 6) + 47)); + } + break; + + case 'A': + { + TString app; + app.format("%06ld", _numrec_clifo); + _control_rec.overwrite(app,((i * 6) + 47)); + } + break; + + case 'P': + { + TString app; + app.format("%06ld", _numrec_pcon); + _control_rec.overwrite(app,((i * 6) + 47)); + } + break; + + case 'Z': + { + TString app; + app.format("%06ld", _numrec_pn); + _control_rec.overwrite(app,((i * 6) + 47)); + } + break; + + case 'U': + { + TString app; + app.format("%06ld", _numrec_iva); + _control_rec.overwrite(app,((i * 6) + 47)); + } + break; + + default: + break; + }; + } + _tras_file.write_control_rec(_control_rec,size); + _tras_file.close(); +} + +bool TInv_cont::invio_tab_cau() +{ + int size = 256; + TString record(size); + TString cod; + + long cicli = _tcaus->items(); + _prog = new TProgind(cicli,"Tabella Causali: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); + + _tras_file.open(_trasf,TRUE); + + for (_tcaus->first(); !_tcaus->eof(); _tcaus->next()) + { + TString str; + + _prog->addstatus(1); + + record.spaces(); + + const char* codcau = _tcaus->get(CAU_CODCAUS); + str.format("%03s", codcau); + record.overwrite("W1",0); //Tipo record + record.overwrite(str,2); //Codice causale + + TString descr = _tcaus->get(CAU_DESCR); + descr.format("%-.20s", (const char*) descr); + record.overwrite(descr,15); //Descrizione + + TString tipodoc = _tcaus->get(CAU_TIPODOC); + record.overwrite(tipodoc,35); //Tipo documento + + TString reg = _tcaus->get(CAU_REG); + if (real::is_natural(reg)) + { + int app = atoi(reg); + reg.format("%d", app); + } + record.overwrite(reg,37); //Registro IVA + + bool alleg = _tcaus->get_bool(CAU_ALLEG); + if (alleg) + record.overwrite("X",38); + else //Flag esclusione tipo documento da allegato + record.overwrite(" ",38); + + int m770 = atoi(_tcaus->get(CAU_M770)); + str = format("%1d", m770); + record.overwrite(str,39); //Collegamento modello 770 + + TString cespiti = _tcaus->get(CAU_COLLCESP); + record.overwrite(cespiti,40); //Collegamento cespiti + + bool numdoc = _tcaus->get_bool(CAU_NUMDOC); + if (numdoc) + record.overwrite("1",206); + else //Flag immissione numero documento + record.overwrite("0",206); + + bool datadoc = _tcaus->get_bool(CAU_DATADOC); + if (datadoc) + record.overwrite("1",207); + else //Flag immissione data documento + record.overwrite("0",207); + + const char* codcausim = _tcaus->get(CAU_CODCAUSIM); + str.format("%03s", codcausim); + record.overwrite(str,209); //Codice causale per incasso immediato + + bool intracom = _tcaus->get_bool(CAU_INTRACOM); + if (intracom) + record.overwrite("X",246); + else //Flag per operazioni intracomunitarie + record.overwrite(" ",246); + + bool valintra = _tcaus->get_bool(CAU_VALINTRA); + if (valintra) + record.overwrite("X",247); + else //Gestione valuta per oper. intracomunitarie + record.overwrite(" ",247); + + bool ritfatt = _tcaus->get_bool(CAU_RITFATT); + if (ritfatt) + record.overwrite("X",248); + else //Flag causale per fattura ricevuta in ritardo + record.overwrite(" ",248); + + bool autofatt = _tcaus->get_bool(CAU_AUTOFATT); + if (autofatt) + record.overwrite("X",249); + else //Autofattura art.34 + record.overwrite(" ",249); + + + int num = 0; + int pos_gcs = 41; + int pos_sez = 191; + _codcaus = _tcaus->get(CAU_CODCAUS); + + do + { + num++; + + _trcaus->setkey(1); + _trcaus->zero(); + _trcaus->put(RCA_CODCAUS, _codcaus); + _trcaus->put(RCA_NRIGA, num); + + if (_trcaus->read() == NOERR) + { + int g = _trcaus->get_int (RCA_GRUPPO); + int c = _trcaus->get_int (RCA_CONTO); + long s = _trcaus->get_long(RCA_SOTTOCONTO); + TString sez = _trcaus->get (RCA_SEZIONE); + + str = format("%02d", g); + record.overwrite(str,pos_gcs); //Gruppo + pos_gcs += 2; + str = format("%02d", c); + record.overwrite(str,pos_gcs); //Conto + pos_gcs += 2; + str = format("%06ld", s); + record.overwrite(str,pos_gcs); //Sottoconto + pos_gcs += 6; + + record.overwrite(sez,pos_sez); //Sezione + pos_sez++; + } + else + { + int g = 0; + int c = 0; + long s = 0; + TString sez = " "; + + str = format("%02d", g); + record.overwrite(str,pos_gcs); //Gruppo + pos_gcs += 2; + str = format("%02d", c); + record.overwrite(str,pos_gcs); //Conto + pos_gcs += 2; + str = format("%06ld", s); + record.overwrite(str,pos_gcs); //Sottoconto + pos_gcs += 6; + + record.overwrite(sez,pos_sez); //Sezione + pos_sez++; + } + } + while (num < 15); + + _numrec_cau++; + + _tras_file.write_control_rec(record,size); + } + delete _prog; + + _tras_file.close(); + + return TRUE; +} + +void TInv_cont::scrivi_telefono(TString& appoggio) +{ + TString ptel; + TString tel; + + if (_tclifo->get(CLI_TEL).not_empty()) + { + ptel = _tclifo->get(CLI_PTEL); + tel = _tclifo->get(CLI_TEL); + } + else + if (_tclifo->get(CLI_TEL2).not_empty()) + { + ptel = _tclifo->get(CLI_PTEL2); + tel = _tclifo->get(CLI_TEL2); + } + else + if (_tclifo->get(CLI_TEL3).not_empty()) + { + ptel = _tclifo->get(CLI_PTEL3); + tel = _tclifo->get(CLI_TEL3); + } + + if (real::is_natural(ptel)) + { + appoggio << ptel; + if (ptel.not_empty()) + appoggio << "/" << tel; + else + appoggio << tel; + } + else + appoggio << tel; +} + +bool TInv_cont::invio_clifo() +{ + int size = 256; + TString record(size); + + long cicli = _tclifo->items(); + _prog = new TProgind(cicli,"Anagrafica Clienti/Fornitori: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); + + _tras_file.open(_trasf,TRUE); + + for (_tclifo->first(); !_tclifo->eof(); _tclifo->next()) + { + TString str; + + _prog->addstatus(1); + + record.spaces(); + + // Il tipocf su PC e' C = cliente F = fornitore. + // Il tipocf su AS400 e' 1 = cliente 2 = fornitore. + TString tipo_cod; + + char tipo = _tclifo->get_char(CLI_TIPOCF); + if (tipo == 'C') + tipo_cod = "1"; + else + if (tipo == 'F') + tipo_cod = "2"; + + record.overwrite("A1",0); //Tipo record + record.overwrite(tipo_cod,2); //Tipo cliente/fornitore + + long codice = _tclifo->get_long(CLI_CODCF); + str.format("%06ld", codice); + record.overwrite(str,3); //Codice cliente/fornitore + + //Il tipo persona su PC e' F = fisica G = giuridica + //Il tipo persona su AS400 e' 0 = giuridica 1 = fisica + char tipop = _tclifo->get_char(CLI_TIPOPERS); + TString tipopers; + + if (tipop == 'F') + tipopers = "1"; + else + if (tipop == 'G') + tipopers = "0"; + + record.overwrite(tipopers,15); //Tipo persona + + TString ragsoc = _tclifo->get(CLI_RAGSOC); + TString cognome = ragsoc.mid(0,30); + TString nome = ragsoc.mid(30,20); + str.format("%-30s", (const char*) cognome); //Cognome o I ragione sociale + record.overwrite(str,16); + str.format("%-20s", (const char*) nome); + record.overwrite(str,46); //Nome o II ragione sociale + + TString paiv = _tclifo->get(CLI_PAIV); + str.format("%011s", (const char*) paiv); + record.overwrite(str,66); //Partita IVA + + TString cofi = _tclifo->get(CLI_COFI); + str.format("%-16s", (const char*) cofi); + record.overwrite(str,77); //Codice fiscale + + TString indcf = _tclifo->get(CLI_INDCF); + TString civcf = _tclifo->get(CLI_CIVCF); + int lind = indcf.len(); + int lciv = civcf.len(); + int totlen = lind + lciv + 1; + if (totlen < 36) + indcf << " " << civcf; + + str.format("%-35s", (const char*) indcf); + record.overwrite(str,93); //Indirizzo + + TString capcf = _tclifo->get(CLI_CAPCF); + str.format("%05s", (const char*) capcf); + record.overwrite(str,128); //Codice di avviamento postale + + TString localita = _tclifo->get(CLI_LOCCF); + str.format("%-.20s", (const char*) localita); + record.overwrite(str,133); //Localita' + + TString comcf = _tclifo->get(CLI_COMCF); + TString provincia = ""; + if (comcf.not_empty()) + provincia = cerca_provincia(comcf); + str.format("%-2s", (const char*) provincia); + record.overwrite(str,153); //Provincia + +/* TString ptel = _tclifo->get(CLI_PTEL); + TString tel = _tclifo->get(CLI_TEL); + TString appoggio; + appoggio << ptel << " " << tel; + record.overwrite(appoggio,155); +*/ + TString appoggio = ""; + scrivi_telefono(appoggio); + appoggio.format("%-12s", (const char*) appoggio); + appoggio.cut(12); + record.overwrite(appoggio,155); + + TString alleg = _tclifo->get(CLI_ALLEG); + record.overwrite(alleg,167); //Flag gestione allegato + + int gruppo = _tclifo->get_int(CLI_GRUPPORIC); + int conto = _tclifo->get_int(CLI_CONTORIC); + long sottoc = _tclifo->get_long(CLI_SOTTOCRIC); + str.format("%02d", gruppo); + record.overwrite(str,168); //Gruppo di costo/ricavo + str.format("%02d", conto); + record.overwrite(str,170); //Conto di costo/ricavo + str.format("%06ld", sottoc); + record.overwrite(str,172); //sottoconto di costo/ricavo + + long codalleg = _tclifo->get_long(CLI_CODALLEG); + str.format("%06ld", codalleg); + record.overwrite(str,179); + + TString codpag = _tclifo->get(CLI_CODPAG); + str.format("%-2s", (const char*) codpag); + + _numrec_clifo++; + + _tras_file.write_control_rec(record,size); + } + delete _prog; + + _tras_file.close(); + + return TRUE; +} + +bool TInv_cont::invio_pcon() +{ + int size = 256; + TString record(size); + + long cicli = _tpcon->items(); + _prog = new TProgind(cicli,"Anagrafica Piano Conti: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); + + _tras_file.open(_trasf,TRUE); + + for (_tpcon->first(); !_tpcon->eof(); _tpcon->next()) + { + TString str; + + _prog->addstatus(1); + + record.spaces(); + + int g = _tpcon->get_int (PCN_GRUPPO); + int c = _tpcon->get_int (PCN_CONTO); + long s = _tpcon->get_long(PCN_SOTTOCONTO); + + // Se si tratta di un GRUPPO + + if (g != 0 && c == 0 && s == 0) + { + record.overwrite("P1",0); //Tipo record + str.format("%02d", g); + record.overwrite(str,2); //Gruppo + + TString descr (_tpcon->get(PCN_DESCR)); + str.format("%-.30s", (const char*) descr); + record.overwrite(str,15); //Descrizione gruppo + } + + // Se si tratta di un CONTO + + if (g != 0 && c != 0 && s == 0) + { + record.overwrite("P2",0); //Tipo record + str.format("%02d", g); + record.overwrite(str,2); //Gruppo + + str.format("%02d", c); + record.overwrite(str,4); //Conto + + TString descr (_tpcon->get(PCN_DESCR)); + str.format("%-.30s", (const char*) descr); + record.overwrite(str,15); //Descrizione conto + + int indbil = _tpcon->get_int(PCN_INDBIL); + str.format("%d", indbil); + record.overwrite(str,45); //Indicatore di bilancio + + TString tmcf = _tpcon->get(PCN_TMCF); + record.overwrite(tmcf,46); //Flag conto cliente/fornitore + + bool stsottbil = _tpcon->get_bool(PCN_STSOTTBIL); + if (stsottbil) + str = "1"; + else + str = "0"; + record.overwrite(str,47); //Flag stampa dettaglio sottoconti su bilancio + + // Classe IV direttiva CEE + + TString sez = _tpcon->get(PCN_SEZIVD); + if (sez == "0") + sez = " "; + record.overwrite(sez,48); //Sezione IV dir + + TString let = _tpcon->get(PCN_LETTIVD); + record.overwrite(let,49); //Lettera IV dir + + int numrom = atoi(_tpcon->get(PCN_NUMRIVD)); + str.format("%03d", numrom); + record.overwrite(str,60); //Numero arabo corrispondente al numero romano + TString numr = itor(numrom); + str.format("%-8s", (const char*) numr); + record.overwrite(str,50); //Numero romano IV dir + + int num = _tpcon->get_int(PCN_NUMIVD); + str.format("%02d", num); + record.overwrite(str,58); //Numero arabo IV dir + + // Classe IV direttiva CEE di segno opposto + + TString sezop = _tpcon->get(PCN_SEZIVDOPP); + if (sezop == "0") + sezop = " "; + record.overwrite(sezop,63); //Sezione IV dir + + TString letop = _tpcon->get(PCN_LETTIVDOPP); + record.overwrite(letop,64); //Lettera IV dir + + int numromop = atoi(_tpcon->get(PCN_NUMRIVDOPP)); + str.format("%03d", numromop); + record.overwrite(str,75); //Numero arabo corrispondente al numero romano + TString numrop = itor(numromop); + str.format("%-8s", (const char*) numrop); + record.overwrite(str,65); //Numero romano IV dir + + int numop = _tpcon->get_int(PCN_NUMIVDOPP); + str.format("%02d", numop); + record.overwrite(str,73); //Numero arabo IV dir + } + + // Se si tratta di un SOTTOCONTO + + if (g != 0 && c != 0 && s != 0) + { + record.overwrite("P3",0); //Tipo record + str.format("%02d", g); + record.overwrite(str,2); //Gruppo + + str.format("%02d", c); + record.overwrite(str,4); //Conto + + str.format("%06ld", s); + record.overwrite(str,6); //Sottoconto + + TString descr (_tpcon->get(PCN_DESCR)); + str.format("%-.30s", (const char*) descr); + record.overwrite(str,15); //Descrizione sottoconto + + int tipospric = _tpcon->get_int(PCN_TIPOSPRIC); + str.format("%d", tipospric); + record.overwrite(str,45); //Tipo costo/ricavo + + int ricser = _tpcon->get_int(PCN_RICSER); + if (ricser == 0) + str = " "; + else + str.format("%d", ricser); + record.overwrite(str,46); //Tipo attivita' + + // Classe IV direttiva CEE + + TString sez = _tpcon->get(PCN_SEZIVD); + if (sez == "0") + sez = " "; + record.overwrite(sez,47); //Sezione IV dir + + TString let = _tpcon->get(PCN_LETTIVD); + record.overwrite(let,48); //Lettera IV dir + + int numrom = atoi(_tpcon->get(PCN_NUMRIVD)); + str.format("%03d", numrom); + record.overwrite(str,59); //Numero arabo corrispondente al numero romano + TString numr = itor(numrom); + str.format("%-8s", (const char*) numr); + record.overwrite(str,49); //Numero romano IV dir + + int num = _tpcon->get_int(PCN_NUMIVD); + str.format("%02d", num); + record.overwrite(str,57); //Numero arabo IV dir + + // Classe IV direttiva CEE di segno opposto + + TString sezop = _tpcon->get(PCN_SEZIVDOPP); + if (sezop == "0") + sezop = " "; + record.overwrite(sezop,62); //Sezione IV dir + + TString letop = _tpcon->get(PCN_LETTIVDOPP); + record.overwrite(letop,63); //Lettera IV dir + + int numromop = atoi(_tpcon->get(PCN_NUMRIVDOPP)); + str.format("%03d", numromop); + record.overwrite(str,74); //Numero arabo corrispondente al numero romano + TString numrop = itor(numromop); + str.format("%-8s", (const char*) numrop); + record.overwrite(str,64); //Numero romano IV dir + + int numop = _tpcon->get_int(PCN_NUMIVDOPP); + str.format("%02d", numop); + record.overwrite(str,72); //Numero arabo IV dir + } + + _numrec_pcon++; + + _tras_file.write_control_rec(record,size); + } + delete _prog; + + _tras_file.close(); + + return TRUE; +} + +void TInv_cont::testata_mov_PN() +{ + _annoes = _tmov->get_int (MOV_ANNOES); + _datareg = _tmov->get_date(MOV_DATAREG); + _datadoc = _tmov->get_date(MOV_DATADOC); + _numdoc = _tmov->get (MOV_NUMDOC); + _reg = _tmov->get (MOV_REG); + _codcausm = _tmov->get (MOV_CODCAUS); + _codpag = _tmov->get (MOV_CODPAG); +// _tipodoc = _tmov->get (MOV_TIPODOC); + _protiva = _tmov->get_long(MOV_PROTIVA); + _uprotiva = _tmov->get_long(MOV_UPROTIVA); + _inviato = _tmov->get_bool(MOV_INVIATO); +} + +void TInv_cont::testata_trasfer(long nreg, int nrig, TString& record) +{ + TString str; + + record.overwrite("Z1",0); //Tipo record + + str.format("%06ld", nreg); + record.overwrite(str,2); //Numero di registrazione + + str.format("%02d", nrig); + record.overwrite(str,8); //Numero di riga + + TString datastr = _datareg.string(); + str = riconverti(datastr,FALSE); + str.format("%06s", (const char*) str); + record.overwrite(str,15); //Data di registrazione + + //Determino il segnalino della competenza + int segnalino; + + int anno = date2esc(_datareg); + if (_annoes == anno) + segnalino = 0; + else + segnalino = 1; + str.format("%d", segnalino); + record.overwrite(str,21); //Segnalino della competenza + + TString datadocstr = _datadoc.string(); + str = riconverti(datadocstr,FALSE); + str.format("%06s", (const char*) str); + record.overwrite(str,22); //Data documento + + str.format("%-7s", (const char*) _numdoc); + record.overwrite(str,28); + + TString reg; + if (real::is_natural(_reg)) + { + int app = atoi(_reg); + reg.format("%d", app); + } + else + reg = _reg.trim(); + + record.overwrite(reg,35); //Codice registro IVA + + str.format("%05d", _protiva); + record.overwrite(str,36); //Numero protocollo IVA + + const char* cod_causm = (const char*)_codcausm; + str.format("%03s", (const char*)_codcausm); + record.overwrite(str,41); //Codice causale + + str.format("%-2s", (const char*) _codpag); + record.overwrite(str,95); //Codice di pagamento + + str.format("%05d", _uprotiva); + record.overwrite(str,108); //Ultimo numero di protocollo IVA + + record.overwrite("0",218); //Flag di solo sezionale +} + +void TInv_cont::sola_iva(TString& record) +{ + TString str; + TLocalisamfile rcaus (LF_RCAUSALI); + int gruppo = 0; + int conto = 0; + long sottoc = 0; + + rcaus.setkey(1); + rcaus.zero(); + rcaus.put(RCA_CODCAUS, _codcausm); + rcaus.read(); + TString codcau = rcaus.get(RCA_CODCAUS); + if (codcau == _codcausm) + { + gruppo = rcaus.get_int (RCA_GRUPPO); + conto = rcaus.get_int (RCA_CONTO); + sottoc = _tmov->get_long(MOV_CODCF); + } + + str.format("%02d", gruppo); + record.overwrite(str,74); //Gruppo di partita + str.format("%02d", conto); + record.overwrite(str,76); //Conto di partita + str.format("%06ld", sottoc); + record.overwrite(str,78); //Sottoconto di partita + + record.overwrite("0000000000",85); //Sottoconto di contropartita + + record.overwrite("00000000000",97); //Importo +} + +bool TInv_cont::invio_mov_PN() +{ + int size = 256; + TString record(size); + bool almeno_una_riga = FALSE; + + long cicli = _tmov->items(); + _prog = new TProgind(cicli,"Movimenti di Prima nota: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); + + _tras_file.open(_trasf,TRUE); + + for (_tmov->first(); !_tmov->eof(); _tmov->next()) + { + TString str; + + _prog->addstatus(1); + + record.spaces(); + + long nreg = _tmov->get_long(RMV_NUMREG); + + testata_mov_PN(); + + _trmov->setkey(1); + _trmov->zero(); + _trmov->put(RMV_NUMREG, nreg); + TRectype trmov(LF_RMOV); + trmov = _trmov->curr(); + + for (_trmov->read(); !_trmov->eof(); _trmov->next()) + { + if (_trmov->curr() > trmov) break; + + record = ""; + record.spaces(); + + almeno_una_riga = TRUE; + + int nrig = _trmov->get_int (RMV_NUMRIG); + + testata_trasfer(nreg,nrig,record); + + TString descr = _trmov->get(RMV_DESCR); + str.format("%-.30s", (const char*) descr); + record.overwrite(str,44); //Descrizione riga di movimento + + int gruppo = _trmov->get_int(RMV_GRUPPO); + str.format("%02d", gruppo); + record.overwrite(str,74); //Gruppo di partita + + int conto = _trmov->get_int(RMV_CONTO); + str.format("%02d", conto); + record.overwrite(str,76); //Conto di partita + + long sottoc = _trmov->get_long(RMV_SOTTOCONTO); + str.format("%06ld", sottoc); + record.overwrite(str,78); //Sottoconto di partita + + TString sez = _trmov->get(RMV_SEZIONE); + str.format("%s", (const char*) sez); + record.overwrite(str,84); //Sezione importo + + int gruppoc = _trmov->get_int(RMV_GRUPPOC); + str.format("%02d", gruppoc); + record.overwrite(str,85); //Gruppo di contropartita + + int contoc = _trmov->get_int(RMV_CONTOC); + str.format("%02d", contoc); + record.overwrite(str,87); //Conto di contropartita + + long sottocc = _trmov->get_long(RMV_SOTTOCONTOC); + str.format("%06ld", sottocc); + record.overwrite(str,89); //Sottoconto di contropartita + + real importo (_trmov->get_real(RMV_IMPORTO)); + TString numero = importo.string(); + if (importo.sign() < 0) + negPC2negAS(numero); + str.format("%011s", (const char*) numero); + record.overwrite(str,97); //Importo riga di movimento + +// TString tipoc = _trmov->get(RMV_TIPOC); +// record.overwrite(tipoc,219); //Flag cliente/fornitore + + _tras_file.write_control_rec(record,size); + _numrec_pn++; + } + + if (!almeno_una_riga) + { + int nrig = 1; + testata_trasfer(nreg,nrig,record); + sola_iva(record); + _numrec_pn++; + _tras_file.write_control_rec(record,size); + } + else + almeno_una_riga = FALSE; + } + delete _prog; + + _tras_file.close(); + + return TRUE; +} + +bool TInv_cont::testata_mov_IVA(long numreg) +{ + _tmov->setkey(1); + _tmov->zero(); + _tmov->put(MOV_NUMREG, numreg); + if (_tmov->read() == NOERR) + { + _codcf = _tmov->get_long(MOV_CODCF); + _data74ter = _tmov->get_date(MOV_DATA74TER); + _corrlire = _tmov->get_real(MOV_CORRLIRE); + _codvali = _tmov->get (MOV_CODVALI); + _cambioi = _tmov->get_real(MOV_CAMBIOI); + _corrval = _tmov->get_real(MOV_CORRVALUTA); + _ocfpi = _tmov->get (MOV_OCFPI); + _dataregiva = _tmov->get_date(MOV_DATAREG); + _inviato = _tmov->get_bool(MOV_INVIVA); + if (_ocfpi.not_empty()) + cerca_occasionale(); + } + else + return FALSE; + + return TRUE; +} + +void TInv_cont::cerca_occasionale() +{ + _toccas->setkey(1); + _toccas->zero(); + _toccas->put(OCC_CFPI, _ocfpi); + if (_toccas->read() == NOERR) + { + _ragsococc = _toccas->get(OCC_RAGSOC); + _indocc = _toccas->get(OCC_INDIR); + _capocc = _toccas->get(OCC_CAP); + TString com = _toccas->get(OCC_COM); + cerca_comune_occas(com); + } + else + { + _ragsococc = ""; + _indocc = ""; + _capocc = ""; + _localocc = ""; + _provocc = ""; + } +} + +void TInv_cont::cerca_comune_occas(const TString& com) +{ + TLocalisamfile comuni (LF_COMUNI); + + comuni.setkey(1); + comuni.zero(); + comuni.put(COM_COM, com); + if (comuni.read() == NOERR) + { + _localocc = comuni.get(COM_DENCOM); + _provocc = comuni.get(COM_PROVCOM); + } +} + +bool TInv_cont::invio_mov_IVA() +{ + int size = 256; + TString record(size); + long nreg_p; + int numero_righe = 0; + + nreg_p = -1; + + long cicli = _triva->items(); + _prog = new TProgind(cicli,"Movimenti Iva: generazione file TRASFER per Sistema\nPrego attendere.",FALSE); + + _tras_file.open(_trasf,TRUE); + + for (_triva->first(); !_triva->eof(); _triva->next()) + { + TString str; + + _prog->addstatus(1); + + record.spaces(); + + long nreg = _triva->get_long(RMI_NUMREG); + int nrig = _triva->get_int (RMI_NUMRIG); + + if (nreg != nreg_p) + { + numero_righe = 0; + if (!testata_mov_IVA(nreg)) + return error_box("Rilevata riga mancante di testata: impossibile proseguire. /n Registrazione %07d Riga %03d",nreg,nrig); + } + + record.overwrite("U1",0); //Tipo record + + str.format("%06ld", nreg); + record.overwrite(str,2); //Numero di registrazione + + str.format("%02d", nrig); + record.overwrite(str,8); //Numero di riga + + nreg_p = nreg; + + str.format("%06ld", _codcf); + record.overwrite(str,15); //Codice cliente/fornitore + + real imponibile (_triva->get_real(RMI_IMPONIBILE)); + TString numero = imponibile.string(); + if (imponibile.sign() < 0) + negPC2negAS(numero); + str.format("%011s", (const char*) numero); + record.overwrite(str,21); //Imponibile + + TString codiva (_triva->get(RMI_CODIVA)); + str.format("%02s", (const char*) codiva); + record.overwrite(str,32); //Codice iva + + real imposta (_triva->get_real(RMI_IMPOSTA)); + numero = imposta.string(); + if (imposta.sign() < 0) + negPC2negAS(numero); + str.format("%09s", (const char*) numero); + record.overwrite(str,34); //Imposta + + int tipocr = _triva->get_int(RMI_TIPOCR); + str.format("%01d", tipocr); + record.overwrite(str,43); //Tipo costo/ricavo + + int tipodet = _triva->get_int(RMI_TIPODET); + str.format("%01d", tipodet); + record.overwrite(str,44); //Tipo detraibilita' + + int gruppo = _triva->get_int(RMI_GRUPPO); + str.format("%02d", gruppo); + record.overwrite(str,45); //Gruppo + + int conto = _triva->get_int(RMI_CONTO); + str.format("%02d", conto); + record.overwrite(str,47); //Conto + + long sottoc = _triva->get_long(RMI_SOTTOCONTO); + str.format("%06ld", sottoc); + record.overwrite(str,49); //Sottoconto + + TString data74terstr = _data74ter.string(); + str = riconverti(data74terstr,FALSE); + str.format("%06s", (const char*) str); + record.overwrite(str,55); //Data per registri 74 TER + + if (_ocfpi.not_empty()) + { + str.format("%-.25s", (const char*) _ragsococc); + record.overwrite(str,61); //Ragione sociale cliente occasionale + + str.format("%-.22s", (const char*) _indocc); + record.overwrite(str,86); //indirizzo cliente occasionale + + str.format("%-.18s", (const char*) _localocc); + record.overwrite(str,108); //Localita cliente occasionale + + str.format("%05s", (const char*) _capocc); + record.overwrite(str,126); //Codice avviamento postale cliente occasionale + + str.format("%-.2s", (const char*) _provocc); + record.overwrite(str,131); //Provincia cliente occasionale + } + + int tipoatt = _triva->get_int(RMI_TIPOATT); + str.format("%01d", tipoatt); + record.overwrite(str,133); //Tipo attivita' + + bool intra = _triva->get_bool(RMI_INTRA); + if (intra) + record.overwrite("X",134); + else + record.overwrite(" ",134); //Flag causale x acquisti intracomunitari + + TString corrlire = _corrlire.string(); + if (_corrlire.sign() < 0) + negPC2negAS(corrlire); + str.format("%011s", (const char*) corrlire); + record.overwrite(str,135); //Corrispettivo in lire + + record.overwrite(_codvali,146); //Codice valuta + + dec2integer(_cambioi,100000); + TString cambioi = _cambioi.string(); + if (_cambioi.sign() < 0) + negPC2negAS(cambioi); + str.format("%011s", (const char*) cambioi); + record.overwrite(str,149); //Cambio + + dec2integer(_corrval,1000); + TString corrval = _corrval.string(); + if (_corrval.sign() < 0) + negPC2negAS(corrval); + str.format("%014s", (const char*) corrval); + record.overwrite(str,160); //Corrispettivo in valuta + + _numrec_iva++; + + _tras_file.write_control_rec(record,size); + + iva_inviata(nreg); + } + delete _prog; + + _tras_file.close(); + + return TRUE; +} + +void TInv_cont::negPC2negAS(TString& numero) +{ + numero.trim(); + numero = numero.mid(1); // Considero il numero senza il segno - + + int len = numero.len(); + int cifra = atoi(numero.mid(len -1 ,1)); // Considero l'ultima cifra + + char carattere = _tabella[cifra]; + + numero = numero.mid(0,len -1); // Considero il numero senza l'ultima cifra + numero << carattere; +} + +void TInv_cont::dec2integer(real& val, long dec) +{ + val = val * dec; +} diff --git a/cg/pagament.cpp b/cg/pagament.cpp index 3c5a24900..690e7b421 100755 --- a/cg/pagament.cpp +++ b/cg/pagament.cpp @@ -1499,8 +1499,10 @@ void TPagamento::adjust_fixed_scad() { if (_fixd[0] > 0 && _fixd[0] < d.day()) { - d.set_day(_fixd[0]); - d.set_month(d.month() == 12 ? 1 : d.month() + 1); + d.set_day(_fixd[0]); + bool chyear = d.month() == 12; + d.set_month(chyear? 1 : d.month() + 1); + if (chyear) d.set_year(d.year() + 1); } } }