diff --git a/ha/ha2100.cpp b/ha/ha2100.cpp index c652fd33d..536215d5f 100755 --- a/ha/ha2100.cpp +++ b/ha/ha2100.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -17,23 +18,6 @@ const char* const APPNAME = TR("Esselunga: generazione file Privat"); -/////////////////////////////////////////////////////////// -// TEsselunga_recordset: serve per potre scrivere il primo record che e' diverso dagli altri -/////////////////////////////////////////////////////////// -class TEsselunga_recordset : public TAS400_recordset -{ -protected: - //esportazione - void add_field(const char* name, const char* tipo, int pos, int len); - void insert_field(const char* name, const char* tipo, int pos, int len); - void add_eol_field(); - //importazione - void add_trc_field(const char* tr, const char* name, const char* tipo, int pos, int len); - -public: - TEsselunga_recordset(const int rec_length); -}; - /////////////////////////////////////////////////////////// // TAutomask /////////////////////////////////////////////////////////// @@ -119,7 +103,7 @@ public: }; TPrivat_recordset::TPrivat_recordset() -: TAS400_recordset("AS400(51)") +: TAS400_recordset("AS400(53)") { create_field("CDC", -1, 3, _intfld); // centro di costo create_field("CODART", -1, 6, _longfld); // codice articolo @@ -130,6 +114,7 @@ TPrivat_recordset::TPrivat_recordset() create_field("QTACONS", -1, 7, _realfld); // qta consegnata create_field("QTARESA", -1, 7, _realfld); // qta resa create_field("CODDIP", -1, 1, _alfafld); // codice dipendenza + create_field("FINE-REC", -1, 2, _alfafld, true, TVariant("\r\n")); // a capo } /////////////////////////////////////// @@ -141,7 +126,8 @@ protected: long genera_recordset(const TMask& mask, TISAM_recordset& recset); void elabora(const TMask& mask); void check_date(const TDate& datafine, TDate& dataini); - long check_cliente(const long codcf); + long check_cliente(const long codcf, const TString4 dipendenza); + TFilename scrivi_testata(const TMask& mask); public: virtual void main_loop(); @@ -202,22 +188,45 @@ long THardy_esselunga::genera_recordset(const TMask& mask, TISAM_recordset& recs recset.set_var("#DATAFIN", datafin); return recset.items(); } +TFilename THardy_esselunga::scrivi_testata(const TMask& mask) +{ + const TString4 dipendenza = mask.get(F_DIPENDENZA); + TConfig config(CONFIG_DITTA, "ha"); + TFilename file_privat = config.get("Esselunga_Path"); + if (dipendenza[0] == 'D') + file_privat.add("CDMI"); + else + file_privat.add("CDFI"); + file_privat.ext("txt"); + ofstream file_output(file_privat); + TString record(260); + // tipo record/filler/tot_record/progr_record + record = "PVT*?*001001"; + // nome del file + record << file_privat.name(); + // identificativo mittente + record.overwrite(config.get("Esselunga_PIvaEsselunga"), 85); + record.overwrite(config.get("Esselunga_TipoEmissione"), 120); + // identificativo destinatario + record.overwrite(config.get("Esselunga_PIvaHardy"), 138); + record.overwrite(config.get("Esselunga_TipoEmissione"), 173); + // formato (Ascii) + record.overwrite("A", 191); + // identificativo univoco del documento + record.overwrite("0000000000000001", 243); + file_output << record << endl; + file_output.close(); + return file_privat; +} void THardy_esselunga::elabora(const TMask& mask) { TLog_report log; // lettura dei dati fissi da configurazione TConfig config(CONFIG_DITTA, "ha"); - const TString16 piva_esselunga = config.get("Esselunga_PIvaEsselunga"); - const TString16 piva_hardy = config.get("Esselunga_PIvaHardy"); const TString16 cod_hardy = config.get("Esselunga_CodHardy"); - const TString16 tipo_emissione = config.get("Esselunga_TipoEmissione"); const TString4 dipendenza = mask.get(F_DIPENDENZA); - TFilename file_privat = config.get("Esselunga_Path"); - if (dipendenza[0] == 'D') - file_privat.add("CDMI"); - else - file_privat.add("CDFI"); + TFilename file_privat = scrivi_testata(mask); TISAM_recordset recset(""); const long items = genera_recordset(mask, recset); if (items == 0) @@ -242,33 +251,46 @@ void THardy_esselunga::elabora(const TMask& mask) TString80 codart_esselunga = ""; // decodifica tramite cache() privat.new_rec(""); privat.set("CDC", TVariant(codcf_esselunga)); - /* - privat.set("CODART", - privat.set("CODFORN", - privat.set("TIPOBOLLA", - privat.set("NUMBOLLA", - privat.set("DATABOLLA", - privat.set("QTACONS", - privat.set("QTARESA", - */ + privat.set("CODART", rigadoc->get(RDOC_CODART)); + privat.set("CODFORN", cod_hardy); + //privat.set("TIPOBOLLA", + //privat.set("NUMBOLLA", + privat.set("DATABOLLA", recset.get(DOC_DATADOC)); + privat.set("QTACONS", rigadoc->get(RDOC_QTA)); + //privat.set("QTARESA",); privat.set("CODDIP", TVariant(dipendenza)); } //FOR_EACH... delete doc; } // if check_cliente... } //for (bool ok = recset.move_first()... - //se elaborazione definitiva -> cambia lo stato ai documenti di vendita elaborati, mettendolo uguale.. - //..a quello deciso in configurazione - const bool definitivo = mask.get_bool(F_DEFINITIVO); + TFilename tempfile; + tempfile.temp(); + privat.save_as(tempfile, fmt_text); + fcopy(tempfile, file_privat, true); + // memorizzo su campo virtuale che il doc. e' stato inviato + const bool definitivo = mask.get_bool(F_DEFINITIVO); if (definitivo) { + } log.print_or_preview(); } -long THardy_esselunga::check_cliente(const long codcf) +long THardy_esselunga::check_cliente(const long codcf, const TString4 dipendenza) { - return true; + long codcf_hardy = -1; + TString key; + key.format("%ld", codcf); + const TRectype rec_cliente = cache().get("&CEL", key); + const bool invio = rec_cliente.get_bool("B0"); + if (invio) + { + const char dip_cliente = rec_cliente.get("S1")[0]; + if (dip_cliente == dipendenza[0]) + codcf_hardy = rec_cliente.get_long("I0"); + } + return codcf_hardy; } void THardy_esselunga::main_loop()