diff --git a/tc/tc9.cpp b/tc/tc9.cpp index 6e4d29eb6..cc4659f50 100755 --- a/tc/tc9.cpp +++ b/tc/tc9.cpp @@ -8,7 +8,8 @@ int main(int argc, char** argv) switch (op) { case 0: tc9100(argc,argv); break; // esiste sulla 4.0 Invio a Proforma - case 1: tc9200(argc,argv); break; // esiste dalla 4.0 Invio a Sispac/Cosmo + case 1: tc9200(argc,argv); break; // esiste dalla 4.0 Invio a ??? + case 2: tc9300(argc,argv); break; // esiste dalla 4.0 Invio a Sispac/Cosmo default: tc9100(argc,argv); break; } exit(0); diff --git a/tc/tc9.h b/tc/tc9.h index c15b7a871..f24cf2da2 100755 --- a/tc/tc9.h +++ b/tc/tc9.h @@ -3,6 +3,7 @@ int tc9100(int argc, char** argv); int tc9200(int argc, char** argv); +int tc9300(int argc, char** argv); #endif // __TC9_H diff --git a/tc/tc9200.cpp b/tc/tc9200.cpp index 13366dbf7..6080a77d6 100755 --- a/tc/tc9200.cpp +++ b/tc/tc9200.cpp @@ -12,37 +12,37 @@ #define ALIAS_REG 100 -class TInvioS_file: public TFile_text +class TInvioW_file: public TFile_text { protected: virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str); public: - TInvioS_file(const TString& file_name); - virtual ~TInvioS_file() { } + TInvioW_file(const TString& file_name); + virtual ~TInvioW_file() { } }; -TInvioS_file::TInvioS_file(const TString& file_name) +TInvioW_file::TInvioW_file(const TString& file_name) : TFile_text(file_name, "tc9200a.ini") { } -class TInvioS_mask : public TAutomask +class TInvioW_mask : public TAutomask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: - TInvioS_mask(); + TInvioW_mask(); - virtual ~TInvioS_mask(){}; + virtual ~TInvioW_mask(){}; }; -TInvioS_mask::TInvioS_mask() :TAutomask ("tc9200a") +TInvioW_mask::TInvioW_mask() :TAutomask ("tc9200a") { } -bool TInvioS_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +bool TInvioW_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { @@ -60,11 +60,11 @@ bool TInvioS_mask::on_field_event(TOperable_field& o, TField_event e, long jolly return TRUE; } -class TInvioS : public TSkeleton_application +class TInvioW : public TSkeleton_application { TCursor* _cur; - TInvioS_mask* _msk; - TInvioS_file* _trasfile; + TInvioW_mask* _msk; + TInvioW_file* _trasfile; TConfig* _configfile; TDate _dataini, _datafin; @@ -72,24 +72,24 @@ protected: virtual bool create(void); virtual bool destroy(void); virtual void main_loop() ; - void invio_sispac(); - long i_sispac_clifor(const char* tipocf, const bool invio = TRUE); - long i_sispac_movcont(const bool invio = TRUE); - long i_sispac_moviva(const bool invio = TRUE); + void invio_whatis(); + long i_whatis_clifor(const char* tipocf, const bool invio = TRUE); + long i_whatis_movcont(const bool invio = TRUE); + long i_whatis_moviva(const bool invio = TRUE); public: - TInvioS_file* apri_file(const char* nome); - void chiudi_file(TInvioS_file* trasfile); + TInvioW_file* apri_file(const char* nome); + void chiudi_file(TInvioW_file* trasfile); TConfig& config() {return *_configfile;}; - TInvioS() {} ; - virtual ~TInvioS() {} ; + TInvioW() {} ; + virtual ~TInvioW() {} ; }; // restituisce un riferimento all' applicazione -inline TInvioS& app() { return (TInvioS&) main_app();} +inline TInvioW& app() { return (TInvioW&) main_app();} // gestione dei messaggi estesi nei campi -void TInvioS_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str) +void TInvioW_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str) { const TString code(s.get(0)); TString valore; @@ -185,26 +185,26 @@ void TInvioS_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TS str = valore; } -TInvioS_file* TInvioS::apri_file(const char* nome) +TInvioW_file* TInvioW::apri_file(const char* nome) { TFilename filename = _msk->get(F_DESTINAZIONE); filename.add(nome); filename.ext("txt"); if (filename.exist()) remove(filename); - TInvioS_file* trasfile = new TInvioS_file(filename); + TInvioW_file* trasfile = new TInvioW_file(filename); trasfile->open(filename,'w'); trasfile->force_record_separator(); return trasfile; } -void TInvioS::chiudi_file(TInvioS_file* trasfile) +void TInvioW::chiudi_file(TInvioW_file* trasfile) { trasfile->close(); delete trasfile; } -long TInvioS::i_sispac_movcont(const bool invio) +long TInvioW::i_whatis_movcont(const bool invio) { TRectype da(LF_MOV); TRectype a(LF_MOV); @@ -249,7 +249,7 @@ long TInvioS::i_sispac_movcont(const bool invio) } -long TInvioS::i_sispac_moviva(const bool invio) +long TInvioW::i_whatis_moviva(const bool invio) { TRectype da(LF_MOV); TRectype a(LF_MOV); @@ -291,11 +291,11 @@ long TInvioS::i_sispac_moviva(const bool invio) return 0; } -long TInvioS::i_sispac_clifor(const char* tipocf, const bool invio) +long TInvioW::i_whatis_clifor(const char* tipocf, const bool invio) { TString80 nomefile = "FILE"; nomefile << tipocf; - TInvioS_file* trasfilecf = apri_file(_configfile->get(nomefile, "OPZIONI")); + TInvioW_file* trasfilecf = apri_file(_configfile->get(nomefile, "OPZIONI")); TRelation rel(LF_CLIFO); rel.add(LF_COMUNI, "STATO==STATOCF|COM==COMCF", 1); rel.add(LF_ANAGFIS,"CODANAGR==CODANAGPER", 1); @@ -324,40 +324,40 @@ long TInvioS::i_sispac_clifor(const char* tipocf, const bool invio) } //metodone globale che chiama, come un menu, i vari sottometodi in base alle scelte sulla maschera -void TInvioS::invio_sispac() +void TInvioW::invio_whatis() { if (_msk->get_bool(F_CLIFOR)) { - i_sispac_clifor("C"); - i_sispac_clifor("F"); + i_whatis_clifor("C"); + i_whatis_clifor("F"); } if (_msk->get_bool(F_MOVCONT)) { TString80 filename = _configfile->get("FILEM", "OPZIONI"); _trasfile = apri_file(filename); - i_sispac_movcont(); - i_sispac_moviva(); + i_whatis_movcont(); + i_whatis_moviva(); chiudi_file(_trasfile); } } -bool TInvioS::create() +bool TInvioW::create() { - _msk = new TInvioS_mask(); + _msk = new TInvioW_mask(); TFilename configname = "tc9200conf.ini"; configname.custom_path(); _configfile = new TConfig(configname); return TSkeleton_application::create(); } -bool TInvioS::destroy() +bool TInvioW::destroy() { delete _configfile; delete _msk; return TSkeleton_application::destroy(); } -void TInvioS::main_loop() +void TInvioW::main_loop() { _msk->set(F_NUMEROINVIO, _configfile->get_int("NUMEROINVIO","OPZIONI")+1); _msk->set(F_DATAINI, _configfile->get("DATA","OPZIONI")); @@ -372,14 +372,14 @@ void TInvioS::main_loop() _datafin = _msk->get_date(F_DATAFIN); const char tipoinvio = _msk->get(F_TIPOINVIO)[0]; if (tipoinvio == 'S') - invio_sispac(); + invio_whatis(); } } int tc9200(int argc, char **argv) { - TInvioS a; - a.run(argc, argv, "Invio dati contabilità Sispac/Cosmo"); + TInvioW a; + a.run(argc, argv, "Invio dati contabilità whatis"); return 0; } diff --git a/tc/tc9300.cpp b/tc/tc9300.cpp index 5c83e794a..e92cbbfda 100755 --- a/tc/tc9300.cpp +++ b/tc/tc9300.cpp @@ -1,7 +1,1186 @@ -//NON riportare nulla!!!! Esiste dalla 4.0; qui e' solo un segnaposto -#include "tc9.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../cg/cglib01.h" +#include "../cg/cglib03.h" + +#include "tc0.h" +#include "tc9300a.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#define SLF_MOV "23" +#define ALIAS_REG 100 + + +class TMovim_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int from = -1, int len = 0, char tipo = 'a', + const char* def = NULL); + +public: + TMovim_set(); +}; + +void TMovim_set::add_field(const char* name, int from, int len, + char tipo, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TMovim_set::TMovim_set() : TAS400_recordset("AS400(217)") +{ + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("ESIVA", -1, 2, _intfld); + create_field("ESCOGE", -1, 4, _intfld); + create_field("ARGOMENTO", -1, 1, _alfafld); + create_field("COMPETENZA", -1, 1, _alfafld); + create_field("NUMPART", -1, 7, _intfld); + create_field("NUMINT", -1, 3, _intfld); + create_field("DATAOP", -1, 6, _intfld); + create_field("CODCONTO", -1, 12, _alfafld); + create_field("TIPOREG", -1, 2, _intfld); + create_field("CODREG", -1, 2, _intfld); + create_field("NUMPROT", -1, 7, _intfld); + create_field("TIPOART", -1, 1, _intfld); + create_field("TIPOMOV", -1, 1, _alfafld); + create_field("CODCOST", -1, 3, _intfld); + create_field("CODCAUS", -1, 5, _intfld); + create_field("NUMDESC", -1, 1, _intfld); + create_field("SGNIMPT", -1, 1, _alfafld); + create_field("IMPORTO", -1, 13, _intfld); + create_field("SGNCONTIMP", -1, 1, _alfafld); + create_field("ANNOTAZ", -1, 30, _alfafld); + create_field("DATADOC", -1, 6, _intfld); + create_field("NUMDOC", -1, 7, _alfafld); + create_field("TIPOANAG", -1, 1, _alfafld); + create_field("FLGSTO", -1, 1, _alfafld); + create_field("LIBERO", -1, 20, _alfafld); + create_field("FINEREC", -1, 2, _alfafld, true, "\r\n"); +} + +class TIvamov_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int from = -1, int len = 0, char tipo = 'a', + const char* def = NULL); + +public: + TIvamov_set(); +}; + +void TIvamov_set::add_field(const char* name, int from, int len, + char tipo, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TIvamov_set::TIvamov_set() : TAS400_recordset("AS400(171)") +{ + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("NUMPART", -1, 7, _intfld); + create_field("NUMINT", -1, 2, _intfld); + create_field("SGNIMPB", -1, 1, _alfafld); + create_field("IMPONIBILE", -1, 13, _intfld); + create_field("SGNIMPIVA", -1, 1, _alfafld); + create_field("IMPOSTA", -1, 13, _intfld); + create_field("CODCAUS", -1, 5, _intfld); + create_field("CODIVA", -1, 3, _alfafld); + create_field("FILLER", -1, 2, _alfafld); + create_field("MERCIVEN", -1, 1, _alfafld); + create_field("QUADROA", -1, 1, _alfafld); + create_field("CODCOSTRIC", -1, 6, _alfafld); + create_field("FLGES", -1, 1, _alfafld); + create_field("DETRAIB", -1, 5, _intfld); + create_field("CODTABPRODAG", -1, 3, _alfafld); + create_field("CODIVACOMPAG", -1, 3, _alfafld); + create_field("DATAFATTSOSP", -1, 1, _alfafld); + create_field("MULTIPUNTO", -1, 2, _alfafld); + create_field("LIBERO", -1, 22, _alfafld); + create_field("FINEREC", -1, 2, _alfafld,true,"\r\n"); +} + +class TIntramov_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int from = -1, int len = 0, char tipo = 'a', + const char* def = NULL); + +public: + TIntramov_set(); +}; + +void TIntramov_set::add_field(const char* name, int from, int len, + char tipo, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TIntramov_set::TIntramov_set() : TAS400_recordset("AS400(206)") +{ + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("TIPOREC", -1, 1, _alfafld); + create_field("ESERCIZIO", -1, 4, _intfld); + create_field("NUMPART", -1, 7, _intfld); + create_field("NUMPROG", -1, 2, _intfld); + create_field("SGNIMPT", -1, 1, _alfafld); + create_field("IMPORTO", -1, 13, _intfld); + create_field("SGNVAL", -1, 1, _alfafld); + create_field("IMPVAL", -1, 13, _intfld); + create_field("TRANSAZ", -1, 1, _intfld); + create_field("NOMENC", -1, 8, _intfld); + create_field("MASSA", -1, 10, _intfld); + create_field("UNIT", -1, 10, _intfld); + create_field("SGNSTAT", -1, 1, _alfafld); + create_field("IMPVAL", -1, 13, _intfld); + create_field("RGMCONS", -1, 1, _alfafld); + create_field("MODTRASP", -1, 1, _intfld); + create_field("PAPROV", -1, 2, _alfafld); + create_field("PADEST", -1, 2, _alfafld); + create_field("PROVINCIA", -1, 2, _alfafld); + create_field("MESE", -1, 2, _intfld); + create_field("TRIMESTRE", -1, 1, _intfld); + create_field("ANNO", -1, 1, _intfld); + create_field("SGNATTRIB", -1, 1, _alfafld); + create_field("ESIVA", -1, 2, _intfld); + create_field("CODCLIFO", -1, 6, _alfafld); + create_field("LIBERO", -1, 20, _alfafld); + create_field("FINEREC", -1, 2, _alfafld, true, "\r\n"); +} + +/* non li abbiamo i ratei +class TRateimov_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int len = 0, char tipo = 'a', + int from = -1, const char* def = NULL); + +public: + TRateimov_set(); +}; + +void TRateimov_set::add_field(const char* name, int len, + char tipo, int from, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TRateimov_set::TRateimov_set() : TAS400_recordset("AS400(222)") +{ + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("ESCOGEIN", -1, 4, _intfld); + create_field("ESCOGEFI", -1, 4, _intfld); + create_field("NUMPART", -1, 7, _intfld); + create_field("NUMPROG", -1, 3, _intfld); + create_field("INRATRIS", -1, 8, _intfld); + create_field("FIRATRIS", -1, 8, _intfld); + create_field("CODCPART", -1, 6, _alfafld); + create_field("CODCCONT", -1, 6, _alfafld); + create_field("SGNIMPT", -1, 1, _alfafld); + create_field("IMPORTO", -1, 13, _intfld); + create_field("SGNCNIMPT", -1, 1, _alfafld); + create_field("CODCLIFO", -1, 6, _alfafld); + create_field("DATADOC", -1, 8, _intfld); + create_field("NUMDOC", -1, 7, _alfafld); + create_field("ANNOTAZ", -1, 30, _alfafld); + create_field("DATAOP", -1, 8, _intfld); + create_field("CCOSTO", -1, 3, _intfld); + create_field("LIBERO", -1, 20, _alfafld); + create_field("FINEREC", -1, 2, _alfafld,true,"\r\n"); +} +*/ + +class TForsisp_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int from = -1, int len = 0, char tipo = 'a', + const char* def = NULL); + +public: + TForsisp_set(); +}; + +void TForsisp_set::add_field(const char* name, int from, int len, + char tipo, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TForsisp_set::TForsisp_set() : TAS400_recordset("AS400(304)") +{ + create_field("CODANAG", -1, 6, _alfafld); + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("TIPOANAG", -1, 1, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("INDIRIZZO", -1, 28, _alfafld); + create_field("NUMERO", -1, 7, _alfafld); + create_field("COMUNE", -1, 35, _alfafld); + create_field("CAP", -1, 5, _intfld); + create_field("STATEST", -1, 35, _alfafld); + create_field("TELEFONO", -1, 20, _alfafld); + create_field("TELEFAX", -1, 20, _alfafld); + create_field("TELEX", -1, 20, _alfafld); + create_field("PREFISSO", -1, 4, _alfafld); + create_field("FRAZIONE", -1, 35, _alfafld); + create_field("PROVINCIA", -1, 2, _alfafld); + create_field("TESTAZMUN", -1, 1, _alfafld); + create_field("CODCOM", -1, 4, _alfafld); + create_field("CODFRAZ", -1, 2, _alfafld); + create_field("FINEREC", -1, 2, _alfafld,true,"\r\n"); +} + +class TClisisp_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int from = -1, int len = 0, char tipo = 'a', + const char* def = NULL); + +public: + TClisisp_set(); +}; + +void TClisisp_set::add_field(const char* name, int from, int len, + char tipo, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TClisisp_set::TClisisp_set() : TAS400_recordset("AS400(304)") +{ + create_field("CODANAG", -1, 6, _alfafld); + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("TIPOANAG", -1, 1, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("INDIRIZZO", -1, 28, _alfafld); + create_field("NUMERO", -1, 7, _alfafld); + create_field("COMUNE", -1, 35, _alfafld); + create_field("CAP", -1, 5, _intfld); + create_field("STATEST", -1, 35, _alfafld); + create_field("TELEFONO", -1, 20, _alfafld); + create_field("TELEFAX", -1, 20, _alfafld); + create_field("TELEX", -1, 20, _alfafld); + create_field("PREFISSO", -1, 4, _alfafld); + create_field("FRAZIONE", -1, 35, _alfafld); + create_field("PROVINCIA", -1, 2, _alfafld); + create_field("TESTAZMUN", -1, 1, _alfafld); + create_field("CODCOM", -1, 4, _alfafld); + create_field("CODFRAZ", -1, 2, _alfafld); + create_field("FINEREC", -1, 2, _alfafld,true,"\r\n"); +} + +/* +class TMovplus_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int len = 0, char tipo = 'a', + int from = -1, const char* def = NULL); + +public: + TMovplus_set(); +}; + +void TMovplus_set::add_field(const char* name, int len, + char tipo, int from, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TMovplus_set::TMovplus_set() + : TAS400_recordset("AS400(200)") +{ + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("ARGOMENTO", -1, 1, _alfafld); + create_field("NUMPART", -1, 7, _intfld); + create_field("NUMINT", -1, 3, _intfld); + create_field("PROMEM", -1, 50, _alfafld); + create_field("NOTEVAR", -1, 1, _alfafld); + create_field("CODANCOIN", -1, 6, _alfafld); + create_field("TIPOCOIN", -1, 1, _alfafld); + create_field("PRIPCOIN", -1, 5, _intfld); + create_field("LIBERO", -1, 47, _alfafld); + create_field("FINEREC", -1, 2, _alfafld,true,"\r\n"); +} +*/ + +class TMovpart_set : public TAS400_recordset +{ +protected: + void add_field(const char* name = "Filler", int len = 0, char tipo = 'a', + int from = -1, const char* def = NULL); + +public: + TMovpart_set(); +}; + +void TMovpart_set::add_field(const char* name, int len, + char tipo, int from, const char* def) +{ + const bool required = false; + TString80 fname(name); + + const TFieldtypes t = tipo == 'n' ? _longzerofld : _alfafld; + const int pos = from - 1; + if (def && *def) + { + CHECKS(def == NULL || (int)strlen(def) <= len, "Invalid default value ", def); + TVariant var(def); var.convert_to(t); + create_field(fname, pos, len, t, required, var); + } + else + create_field(fname, pos, len, t, required); +} + +TMovpart_set::TMovpart_set() : TAS400_recordset("AS400(322)") +{ + create_field("COFI", -1, 16, _alfafld); + create_field("PAIV", -1, 11, _alfafld); + create_field("RAGSOC", -1, 50, _alfafld); + create_field("ARGOMENTO", -1, 1, _intfld); + create_field("NUMPART", -1, 7, _intfld); + create_field("NUMINT", -1, 3, _intfld); + create_field("DATAOP", -1, 8, _intfld); + create_field("CODSCONT", -1, 6, _alfafld); + create_field("CODCLIFO", -1, 6, _alfafld); + create_field("TIPOREG", -1, 2, _intfld); + create_field("CODREG", -1, 2, _intfld); + create_field("ANNODOC", -1, 4, _intfld); + create_field("NUMDOC", -1, 7, _alfafld); + create_field("NUMPROT", -1, 7, _intfld); + create_field("DATADOC", -1, 8, _intfld); + create_field("ANNOPAG", -1, 4, _intfld); + create_field("TIPOMOV", -1, 1, _alfafld); + create_field("CODCAUS", -1, 5, _intfld); + create_field("CODPAG", -1, 6, _alfafld); + create_field("DATASCAD", -1, 8, _intfld); + create_field("IMPTMOV", -1, 12, _intfld); + create_field("SGNIMPT", -1, 1, _alfafld); + create_field("CODAG", -1, 3, _alfafld); + create_field("CODVALEST", -1, 3, _alfafld); + create_field("CAMBIO", -1, 9, _intfld); + create_field("CODABICF", -1, 5, _intfld); + create_field("CODCABCF", -1, 5, _intfld); + create_field("CODABIAZ", -1, 5, _intfld); + create_field("CODCABAZ", -1, 5, _intfld); + create_field("NUMDOC2", -1, 7, _alfafld); + create_field("NUMPROT2", -1, 7, _intfld); + create_field("DATADOC2", -1, 8, _intfld); + create_field("ANNOTAZ", -1, 30, _alfafld); + create_field("TIPOPAG", -1, 1, _intfld); + create_field("DTNEWSCAD", -1, 8, _intfld); + create_field("IMPTSP", -1, 12, _intfld); + create_field("CONTUNI", -1, 8, _intfld); + create_field("IMPTIVA", -1, 12, _intfld); + create_field("TIPOANAG", -1, 1, _alfafld); + create_field("TIPOVAL", -1, 1, _alfafld); + create_field("LIBERO", -1, 15, _alfafld); + create_field("FINEREC", -1, 2, _alfafld,true,"\r\n"); +} + +class TInvioSispac_mask : public TAutomask +{ +protected: + bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + + TInvioSispac_mask(); + + virtual ~TInvioSispac_mask(){}; +}; + +TInvioSispac_mask::TInvioSispac_mask() :TAutomask ("tc9300a") +{ +} + +bool TInvioSispac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_CODDITTA: + if (e==fe_init && o.empty()) + { + set(F_CODDITTA, main_app().get_firm()); + ((TEdit_field&) o).check(); + disable(F_CODDITTA); + } + break; + default: + break; + } + return TRUE; +} + +class TInvioSispac : public TSkeleton_application +{ + TCursor* _cur; + TInvioSispac_mask* _msk; + TConfig* _configfile; + TDate _dataini, _datafin; + +protected: + virtual bool create(void); + virtual bool destroy(void); + virtual void main_loop() ; + void invio_sispac(); + void sispac_cli(); + void sispac_for(); + void sispac_movim(); + void sispac_moviva(); + void sispac_intramov(); + void sispac_movpart(); + void conferma(bool conf = true); + +public: + TConfig& config() {return *_configfile;}; + TInvioSispac() {} ; + virtual ~TInvioSispac() {} ; +}; + +// restituisce un riferimento all' applicazione +inline TInvioSispac& app() { return (TInvioSispac&) main_app();} + +void TInvioSispac::sispac_cli() +{ + TClisisp_set recset; + TString query; + + query << "USE " << LF_CLIFO + << "\nJOIN " << LF_COMUNI << " INTO " << COM_STATO << "==" << CLI_STATOCF << " " << COM_COM << "==" << CLI_COMCF + << "\nFROM " << CLI_TIPOCF << "=C" + << "\nTO " << CLI_TIPOCF << "=C"; + + TISAM_recordset input(query); + TVariant var; + TString fcomname; + + fcomname << LF_COMUNI << "." << COM_DENCOM; + + TProgind p(input.items(), TR("Esportazione Clienti"), true, true); + + for (bool ok = input.move_first(); ok ; ok = input.move_next()) + { + recset.new_rec(); + + const long codcli = input.get(CLI_CODCF).as_int(); + + var = format("%06d", codcli); + recset.set("CODANAG", var); + recset.set("COFI", input.get(CLI_COFI)); + recset.set("PAIV", input.get(CLI_PAIV)); + + const int cflen = input.get(CLI_COFI).as_string().len(); + const int pilen = input.get(CLI_PAIV).as_string().len(); + + if (cflen > 11) + var = "F"; + else + if (cflen == 0 && pilen == 0) + var = "P"; + else + var = "D"; + recset.set("TIPOANAG", var); + recset.set("RAGSOC", input.get(CLI_RAGSOC)); + recset.set("INDIRIZZO", input.get(CLI_INDCF)); + recset.set("NUMERO", input.get(CLI_CIVCF)); + TString loc(input.get(CLI_LOCCF).as_string()); + TString comune(input.get(fcomname).as_string()); + + if (comune.full()) + { + if (loc.full()) + loc << " - "; + loc << comune; + } + var = comune; + recset.set("COMUNE", var); + recset.set("CAP", input.get(CLI_CAPCF)); + recset.set("FINEREC", "\r\n"); + p.addstatus(1L);; + if (p.iscancelled()) + break; + + } + + TFilename outputname = _configfile->get("PATH", "OPZIONI"); + + outputname << "/clisisp"; + recset.save_as(outputname); +} + +void TInvioSispac::sispac_for() +{ + TForsisp_set recset; + TString query; + + query << "USE " << LF_CLIFO + << "\nJOIN " << LF_COMUNI << " INTO " << COM_STATO << "==" << CLI_STATOCF << " " << COM_COM << "==" << CLI_COMCF + << "\nFROM " << CLI_TIPOCF << "=F" + << "\nTO " << CLI_TIPOCF << "=F"; + + TISAM_recordset input(query); + TVariant var; + TString fcomname; + + fcomname << LF_COMUNI << "." << COM_DENCOM; + + TProgind p(input.items(), TR("Esportazione Fornitori"), true, true); + + for (bool ok = input.move_first(); ok ; ok = input.move_next()) + { + recset.new_rec(); + const long codfor = input.get(CLI_CODCF).as_int(); + + var = format("%06d", codfor); + recset.set("CODANAG", var); + recset.set("COFI", input.get(CLI_COFI)); + recset.set("PAIV", input.get(CLI_PAIV)); + + const int cflen = input.get(CLI_COFI).as_string().len(); + const int pilen = input.get(CLI_PAIV).as_string().len(); + + if (cflen > 11) + var = "F"; + else + if (cflen == 0 && pilen == 0) + var = "P"; + else + var = "D"; + recset.set("TIPOANAG", var); + recset.set("RAGSOC", input.get(CLI_RAGSOC)); + recset.set("INDIRIZZO", input.get(CLI_INDCF)); + recset.set("NUMERO", input.get(CLI_CIVCF)); + TString loc(input.get(CLI_LOCCF).as_string()); + TString comune(input.get(fcomname).as_string()); + + if (comune.full()) + { + if (loc.full()) + loc << " - "; + loc << comune; + } + var = comune; + recset.set("COMUNE", var); + recset.set("CAP", input.get(CLI_CAPCF)); + recset.set("FINEREC", "\r\n"); + p.addstatus(1L);; + if (p.iscancelled()) + break; + } + + TFilename outputname = _configfile->get("PATH", "OPZIONI"); + + outputname << "/forsisp"; + recset.save_as(outputname); +} + +void TInvioSispac::sispac_movim() +{ + TMovim_set recset; + TString query; + TString key; + TEsercizi_contabili esc; + TAssoc_array causarr(_configfile->list_variables("CAUSALI")); + + key << prefix().get_codditta(); + + const TRectype & ditta = cache().get(LF_NDITTE, key); + + key = ditta.get(NDT_TIPOA); + key << "|" < 0) + { + real v = ZERO; + + if (rdare == 1 && ravere > 1) + v = UNO; + else + if (rdare > 1 && ravere == 1) + v = 2.00; + else + if (rdare > 1 && ravere > 1) + v = 3.00; + tipoart.add(v, lastmov - firstmov); + } + lastmov = nmov; + rdare = 0; + ravere = 0; + } + if (input.get(RMV_SEZIONE).as_string() == "D") + rdare++; + else + ravere++; + p.addstatus(1L);; + if (p.iscancelled()) + break; + } + if (lastmov > 0) + { + real v = ZERO; + + if (rdare == 1 && ravere > 1) + v = UNO; + else + if (rdare > 1 && ravere == 1) + v = 2.00; + else + if (rdare > 1 && ravere > 1) + v = 3.00; + tipoart.add(v, lastmov - firstmov); + } + + for (bool ok = input.move_first(); ok ; ok = input.move_next()) + { + recset.new_rec(); + var = cofi; + recset.set("COFI", var); + var = paiv; + recset.set("PAIV", var); + var = ragsoc; + recset.set("RAGSOC", var); + var = format("%02ld", input.get(SLF_MOV "." MOV_ANNOIVA).as_int() % 100); + recset.set("ESIVA", var); + recset.set("ESCOGE", input.get(RMV_ANNOES)); + const TString & reg = input.get(SLF_MOV "." MOV_REG).as_string(); + + if (reg.blank()) + { + var = "P"; + treg = "01"; + } + else + { + TRegistro r(reg); + switch (r.iva()) + { + case iva_vendite : + if (r.corrispettivi()) + { + var = "S"; + treg = "04"; + } + else + { + var = "V"; + treg = "03"; + } + break; + case iva_acquisti : + var = "A"; + treg = "02"; + break; + default: + var = ""; + treg = "01"; + break; + } + } + recset.set("ARGOMENTO", var); + var = "N"; + + const TDate & datacomp = input.get(SLF_MOV "." MOV_DATACOMP).as_date(); + + if (annoes != esc.date2esc(datacomp)) // qui + var = "Y"; + recset.set("COMPETENZA", var); + var = format("%07ld", input.get(RMV_NUMREG).as_int()); + recset.set("NUMPART", var); + var = format("%03ld", input.get(RMV_NUMRIG).as_int()); + recset.set("NUMINT", var); + recset.set("DATAOP", input.get(RMV_DATAREG).as_date().string(brief, '\0', full, full, amg_date)); + TString16 codice; + int gruppo = input.get(RMV_GRUPPO).as_int(); + + if (gruppo == 10) + gruppo = 0; + + codice.format("%03ld%03ld%06ld", gruppo + , input.get(RMV_CONTO).as_int() + , input.get(RMV_SOTTOCONTO)); + recset.set("CODCONTO", var); + recset.set("TIPOREG", treg); + recset.set("CODREG", TVariant("01")); // in futuro campo su registro + var = format("%07ld", input.get(MOV_PROTIVA).as_int()); + recset.set("NUMPROT", var); + const real * v = (real *) tipoart.objptr(lastmov - firstmov); // qui + + if (v != NULL) + recset.set("TIPOART", *v); + + TString8 ccaus(input.get(MOV_CODCAUS).as_string()); + TString * codcaus = (TString * )causarr.objptr(ccaus); + + var = "R"; + if (codcaus != NULL) + { + if (codcaus->len() < 5) + codcaus->right_just(5, '0'); + if (*codcaus == "00255") + var = "S"; + } + recset.set("TIPOMOV", var); + recset.set("CODCOST", TVariant("000")); + var = ""; + if (codcaus != NULL) + { + var = *codcaus; + recset.set("CODCAUS", var); + } + + recset.set("NUMDESC", TVariant("0")); + + real importo = input.get(RMV_IMPORTO).as_real(); + + var = "P"; + if (importo < ZERO) + { + importo = -importo; + var = "N"; + } + + recset.set("SGNIMPT", var); + importo *= CENTO; + var = importo.string(13, 0, '0'); + recset.set("IMPORTO", var); + recset.set("SGNCONTIMP", input.get(RMV_SEZIONE)); + recset.set("DATADOC", input.get(MOV_DATADOC)); + recset.set("NUMDOC", input.get(MOV_NUMDOC)); + + const long codcf = input.get(MOV_CODCF).as_int(); + + var = ""; + if (codcf > 0L) + { + key = input.get(MOV_TIPO).as_string(); key << codcf; + const TRectype & clifo = cache().get(LF_CLIFO, key); + const int cflen = input.get(CLI_COFI).as_string().len(); + + if (cflen > 11) + var = "2"; + } + recset.set("TIPOANAG", var); + recset.set("FINEREC", "\r\n"); + p.addstatus(1L);; + if (p.iscancelled()) + break; + } + + TFilename outputname = _configfile->get("PATH", "OPZIONI"); + + outputname << "/movim"; + recset.save_as(outputname); +} + + void TInvioSispac::sispac_moviva() +{ + TIvamov_set recset; + TString query; + TString key; + TEsercizi_contabili esc; + TAssoc_array causarr(_configfile->list_variables("CAUSALI")); + TAssoc_array codivaarr(_configfile->list_variables("CODIVA")); + + key << prefix().get_codditta(); + + const TRectype & ditta = cache().get(LF_NDITTE, key); + + key = ditta.get(NDT_TIPOA); + key << "|" <len() < 5) + codcaus->right_just(5, '0'); + var = *codcaus; + recset.set("CODCAUS", var); + } + + const TString8 civa(input.get(RMI_CODIVA).as_string()); + TString * codiva = (TString *) codivaarr.objptr(civa); + + if (codiva != NULL) + { + if (codiva->len() < 3) + codiva->right_just(3, '0'); + var = *codiva; + recset.set("CODIVA", var); + } + recset.set("FILLER", TVariant("00")); + recset.set("MERCIVEN", TVariant("N")); + + var = ""; + if (codcaus != NULL) + { + if (*codcaus == "00100") + var = "S"; + else + if (*codcaus =="00110") + var = "N"; + } + recset.set("QUADROA", var); + int tipodet; + TCausale cau(ccaus, _dataini.year()); + const real percdetr = (CENTO - indetraibile_al(input.get(RMI_TIPODET).as_string(), cau, _dataini.year(), tipodet)) * CENTO; + + var = percdetr.string(5, 0, '0'); + recset.set("DETRAIB", percdetr); + recset.set("FINEREC", "\r\n"); + p.addstatus(1L);; + if (p.iscancelled()) + break; + + } + + TFilename outputname = _configfile->get("PATH", "OPZIONI"); + + outputname << "/ivamov"; + recset.save_as(outputname); +} + +void TInvioSispac::sispac_intramov() +{ + TIntramov_set recset; +/* + TString query; + + query << "USE " << LF_CLIFO + << "\nJOIN " << LF_COMUNI << " INTO " << COM_STATO << "==" << CLI_STATOCF << " " << COM_COM << "==" << CLI_COMCF << "\n" + << "FROM " << CLI_TIPOCF << "=F\n" + << "TO " << CLI_TIPOCF << "=F"; + + TISAM_recordset input(query); + TVariant var; + + for (bool ok = input.move_first(); ok ; input.move_next()) + { + } + + TFilename outputname = _configfile->get("PATH", "OPZIONI"); + + outputname << "intramov"; + recset.save_as(outputname); */ +} + +void TInvioSispac::sispac_movpart() +{ + TMovpart_set recset; +/* + TString query; + + query << "USE " << LF_CLIFO + << "\nJOIN " << LF_COMUNI << " INTO " << COM_STATO << "==" << CLI_STATOCF << " " << COM_COM << "==" << CLI_COMCF << "\n" + << "FROM " << CLI_TIPOCF << "=F\n" + << "TO " << CLI_TIPOCF << "=F"; + + TISAM_recordset input(query); + TVariant var; + + for (bool ok = input.move_first(); ok ; input.move_next()) + { + } + + TFilename outputname = _configfile->get("PATH", "OPZIONI"); + + outputname << "movpart"; + recset.save_as(outputname); + */ +} + +void TInvioSispac::conferma(bool conf) +{ + TString query; + + query << "USE " << LF_MOV << "KEY 2" + << "\nFROM " << RMV_DATAREG << "=" << _dataini.date2ansi() + << "\nTO " << RMV_DATAREG << "=" << _datafin.date2ansi(); + + TISAM_recordset mov(query); + + if (mov.items() > 0L) + { + TProgind pi(mov.items(), conf ? TR("Conferma movimenti") : TR("Ripristino movimenti"), true, true); + TLocalisamfile cgmov(LF_MOV); + + for (bool ok = mov.move_first(); ok; ok = mov.move_next()) + { + if (!pi.addstatus(1)) + break; + + const long numreg = mov.get(MOV_NUMREG).as_int(); + + cgmov.put(MOV_NUMREG, numreg); + if (cgmov.read(_isequal, _lock) == NOERR) + { + cgmov.put(MOV_INVIATO, conf); + cgmov.rewrite(); + } + } + } +} + +void TInvioSispac::invio_sispac() +{ + if (_msk->get_bool(F_CLIFOR)) + { + sispac_cli(); + sispac_for(); + } + if (_msk->get_bool(F_RIPRISTIN0)) + conferma(false); + if (_msk->get_bool(F_MOVCONT)) + { + sispac_movim(); + sispac_moviva(); + sispac_intramov(); + sispac_movpart(); + if (yesno_box(TR("Confermare il traferimento"))) + { + _configfile->set("NUMEROINVIO", _msk->get(F_NUMEROINVIO),"OPZIONI"); + _configfile->set("DATA", _msk->get_date(F_DATAFIN),"OPZIONI"); + conferma(); + } + } +} + +bool TInvioSispac::create() +{ + _msk = new TInvioSispac_mask(); + TFilename configname = "tc9300conf.ini"; + configname.custom_path(); + _configfile = new TConfig(configname); + return TSkeleton_application::create(); +} + +bool TInvioSispac::destroy() +{ + delete _configfile; + delete _msk; + return TSkeleton_application::destroy(); +} + +void TInvioSispac::main_loop() +{ + _msk->set(F_NUMEROINVIO, _configfile->get_int("NUMEROINVIO","OPZIONI")+1); + _msk->set(F_DATAINI, _configfile->get("DATA","OPZIONI")); + _msk->set(F_DESTINAZIONE, _configfile->get("PATH","OPZIONI")); + while (_msk->run() != K_QUIT) + { + _configfile->set("PATH", _msk->get(F_DESTINAZIONE),"OPZIONI"); + _dataini = _msk->get_date(F_DATAINI); + _datafin = _msk->get_date(F_DATAFIN); + invio_sispac(); + _msk->set(F_NUMEROINVIO, _configfile->get_int("NUMEROINVIO","OPZIONI")+1); + _msk->set(F_DESTINAZIONE, _configfile->get("PATH","OPZIONI")); + } +} int tc9300(int argc, char **argv) { - return 0; + TInvioSispac a; + a.run(argc, argv, "Invio dati contabilità Sispac/Cosmo"); + return 0; } + diff --git a/tc/tc9300a.h b/tc/tc9300a.h new file mode 100755 index 000000000..ad1ef795c --- /dev/null +++ b/tc/tc9300a.h @@ -0,0 +1,12 @@ +// invio dati ad altra procedura + +#define F_CODDITTA 101 +#define F_RAGSOC 102 +#define F_CLIFOR 112 +#define F_MOVCONT 113 +#define F_TIPOINVIO 120 +#define F_DESTINAZIONE 121 +#define F_NUMEROINVIO 122 +#define F_DATAINI 123 +#define F_DATAFIN 124 +#define F_RIPRISTIN0 125 diff --git a/tc/tc9300a.uml b/tc/tc9300a.uml new file mode 100755 index 000000000..98da6b1aa --- /dev/null +++ b/tc/tc9300a.uml @@ -0,0 +1,79 @@ +#include "tc9300a.h" + +PAGE "Invio dati contabilita'" -1 -1 78 20 + +GROUPBOX DLG_NULL 76 3 +BEGIN + PROMPT 2 1 "@bDitta corrente" +END + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 3 2 "Codice " + FLAGS "FD" + USE LF_NDITTE + INPUT CODDITTA F_CODDITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 23 2 "" + FLAGS "D" +END + +GROUPBOX DLG_NULL 76 4 +BEGIN + PROMPT 2 4 "Dati da inviare" +END + +BOOLEAN F_CLIFOR +BEGIN + PROMPT 3 5 "Clienti/Fornitori" +END + +BOOLEAN F_MOVCONT +BEGIN + PROMPT 3 6 "Movimenti" + MESSAGE TRUE,ENABLE F_DATAFIN +END + +STRING F_DESTINAZIONE 50 +BEGIN + PROMPT 2 9 "Destinazione " +END + +NUMBER F_NUMEROINVIO 2 +BEGIN + PROMPT 2 10 "Numero invio " +END + +DATE F_DATAINI +BEGIN + PROMPT 20 10 "Data iniz. " +END + +DATE F_DATAFIN +BEGIN + PROMPT 44 10 "Data fin. " +END + +BOOLEAN F_RIPRISTIN0 +BEGIN + PROMPT 2 11 "Ripristina movimenti da inviare" +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/tc/tc9300conf.ini b/tc/tc9300conf.ini new file mode 100755 index 000000000..d7f89756f --- /dev/null +++ b/tc/tc9300conf.ini @@ -0,0 +1,13 @@ +[OPZIONI] +DATA = +PATH = +NUMEROINVIO = +[CAUSALI] +001=100 +004=7 +008=110 +003=255 +[CODIVA] +20=03 +NS01=55 +NS15=012 \ No newline at end of file