From 8ce29efe9147d3521346779a68bed3c707c4c795 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 1 Feb 2011 11:40:26 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : hardy git-svn-id: svn://10.65.10.50/branches/R_10_00@21554 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ha/ha1200.cpp | 51 +++++++------ ha/ha1300.cpp | 197 +++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 184 insertions(+), 64 deletions(-) diff --git a/ha/ha1200.cpp b/ha/ha1200.cpp index 9bd912a1e..c213f5525 100755 --- a/ha/ha1200.cpp +++ b/ha/ha1200.cpp @@ -302,37 +302,42 @@ void TFile2Txt::genera_sospesi_txt() { progind.addstatus(1); - sospesi.new_rec(""); - //per riempire i campi è necessario un po' di casino sulla partita in esame const TRectype& rec_part = archivio_part.cursor()->curr(); TPartita partita(rec_part); //cerca il saldo, il totale del doc originale, il residuo TImporto saldo, doc, pag, imp; partita.calcola_saldo(saldo, doc, pag, imp); - TImporto residuo = doc; - residuo -= saldo; - const int nriga = rec_part.get_int(PART_NRIGA); - const TRiga_scadenze& scad = partita.rata(nriga, 1); - const TDate datascad = scad.get_date(SCAD_DATASCAD); + //solo se il saldo è > 0 crea la nuova riga da esportare nel txt + //...così volle Hardy!... + if (saldo.valore() > ZERO) + { + sospesi.new_rec(""); - //e vai che riempiamo i campi - const long codcf = rec_part.get_long(PART_SOTTOCONTO); //riprendiamo il codcf come long - const TString& codage = hd_find_codag(codcf); - sospesi.set("CodiceTerminale", codage); - sospesi.set("CodiceCliente", codcf); - const TString& ndoc = rec_part.get(PART_NUMDOC); - sospesi.set("NumeroFattura", ndoc); - const TDate datadoc = rec_part.get_date(PART_DATADOC); - sospesi.set("DataFattura", hd_format_date6(datadoc)); - sospesi.set("ImportoResiduo", residuo.valore()); - sospesi.set("ImpOriginalDoc", doc.valore()); - sospesi.set("DataScadenza", hd_format_date6(datascad)); - TString16 cod_partita; - cod_partita << rec_part.get_int(PART_ANNO) << "-" << rec_part.get(PART_NUMPART); - sospesi.set("Partita", cod_partita); - sospesi.set("TipoDoc", "F"); + const int nriga = rec_part.get_int(PART_NRIGA); + const TRiga_scadenze& scad = partita.rata(nriga, 1); + const TDate datascad = scad.get_date(SCAD_DATASCAD); + + //e vai che riempiamo i campi + const long codcf = rec_part.get_long(PART_SOTTOCONTO); //riprendiamo il codcf come long + const TString& codage = hd_find_codag(codcf); + sospesi.set("CodiceTerminale", codage); + sospesi.set("CodiceCliente", codcf); + const TString& ndoc = rec_part.get(PART_NUMDOC); + sospesi.set("NumeroFattura", ndoc); + const TDate datadoc = rec_part.get_date(PART_DATADOC); + sospesi.set("DataFattura", hd_format_date6(datadoc)); + real residuo = saldo.valore(); + residuo *= CENTO; + sospesi.set("ImportoResiduo", residuo); + sospesi.set("ImpOriginalDoc", doc.valore()); + sospesi.set("DataScadenza", hd_format_date6(datascad)); + TString16 cod_partita; + cod_partita << rec_part.get_int(PART_ANNO) << "-" << rec_part.get(PART_NUMPART); + sospesi.set("Partita", cod_partita); + sospesi.set("TipoDocumento", "F"); + } } TFilename output_path = genera_path("sospesi"); diff --git a/ha/ha1300.cpp b/ha/ha1300.cpp index 1d732908c..9e9d17d2f 100755 --- a/ha/ha1300.cpp +++ b/ha/ha1300.cpp @@ -18,35 +18,44 @@ int ordina_upload(const TObject** o1, const TObject** o2) const TString& s1 = *(TString*)*o1; const TString& s2 = *(TString*)*o2; - if (s1[1] == 'F' && s2[1] == 'F') + if (s1[0] == 'V' || s2[0] == 'V') { - TToken_string k[2]; - for (int i = 0; i < 2; i++) - { - const TString& rec = i == 0 ? s1 : s2; - TToken_string& key = k[i]; - if (rec[0] == 'T') - { - key.add(rec.mid(14,2)); //anno - key.add(rec.mid(16,1)); //tipodoc - key.add(rec.mid(5,5)); //numdoc - } - else - { - key.add(rec.mid(14,2)); //anno - key.add(rec.mid(28,1)); //tipodoc - key.add(rec.mid(5,5)); //numdoc - key.add(rec.mid(29,5)); //codart - } - } - return k[0].compare(k[1]); + if (s1[0] != 'V' || s2[0] != 'V') + return s1[0] == 'V' ? -1 : +1; } else { - if (s1[1] == 'F') - return +1; - if (s2[1] == 'F') - return -1; + //ordinatore dei record Testata e Riga fattura + if (s1[1] == 'F' && s2[1] == 'F') + { + TToken_string k[2]; + for (int i = 0; i < 2; i++) + { + const TString& rec = i == 0 ? s1 : s2; + TToken_string& key = k[i]; + if (rec[0] == 'T') + { + key.add(rec.mid(14,2)); //anno + key.add(rec.mid(16,1)); //tipodoc + key.add(rec.mid(5,5)); //numdoc + } + else + { + key.add(rec.mid(14,2)); //anno + key.add(rec.mid(28,1)); //tipodoc + key.add(rec.mid(5,5)); //numdoc + key.add(rec.mid(29,5)); //codart + } + } + return k[0].compare(k[1]); + } + else + { + if (s1[1] == 'F') + return +1; + if (s2[1] == 'F') + return -1; + } } return s1.compare(s2); @@ -203,17 +212,17 @@ THardy_upload_recordset::THardy_upload_recordset(const TFilename& filename) //-------------- add_trc_field("VC", "TipoRecord", T_X, 1, 2); //x add_trc_field("VC", "CodiceTerminale", T_N, 3, 3); //x - add_trc_field("VC", CLI_CODCF, T_X, 6, 6); //x - add_trc_field("VC", CLI_RAGSOC, T_X, 12, 34); //x - add_trc_field("VC", CLI_INDCF, T_X, 46, 34); //x + add_trc_field("VC", "CodiceCliente", T_X, 6, 6); //x + add_trc_field("VC", "RagioneSociale", T_X, 12, 34); //x + add_trc_field("VC", "Indirizzo", T_X, 46, 34); //x add_trc_field("VC", "Localita", T_X, 80, 20); //x attenzione che potrebbe essere il com_dencom - add_trc_field("VC", CLI_CAPCF, T_X, 100, 5); //x + add_trc_field("VC", "CAP", T_X, 100, 5); //x add_trc_field("VC", "Provincia", T_X, 105, 2); //x da questo e da dencom ricaviamo il codcom - add_trc_field("VC", CLI_PAIV, T_X, 107, 16); //x - add_trc_field("VC", CLI_CODPAG, T_X, 123, 1); //x - add_trc_field("VC", "CodiceListino", T_X, 124, 3); - add_trc_field("VC", "TipoDocumento", T_X, 127, 1); - add_trc_field("VC", CLI_COFI, T_X, 128, 16); //x + add_trc_field("VC", "PartitaIVA", T_X, 107, 16); //x + add_trc_field("VC", "CodicePagamento", T_X, 123, 2); //x + add_trc_field("VC", "CodiceListino", T_X, 125, 3); + add_trc_field("VC", "TipoDocumento", T_X, 128, 1); + add_trc_field("VC", "CodiceFiscale", T_X, 129, 16); //x //Tipo record RC @@ -259,6 +268,7 @@ class TUpload2Campo : public TSkeleton_application { TFilename _intput_dir; bool _can_write; + TAssoc_array _nuovi_clienti; protected: //metodi di basso livello @@ -344,12 +354,116 @@ void TUpload2Campo::elabora_SU(THardy_upload_recordset& recset, TLog_report& log void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log) { - const TString& cod_term = recset.get("CodiceTerminale").as_string(); - const TString& codcf = recset.get(CLI_CODCF).as_string(); - const TString& ragsoc = recset.get(CLI_RAGSOC).as_string(); + //dati dal recordset di upload + TString4 codice_terminale = recset.get("CodiceTerminale").as_string(); + const TString& codice_agente = check_agente(codice_terminale, log); + + long codcf = recset.get("CodiceCliente").as_int(); + + TLocalisamfile file_clifo(LF_CLIFO); + + //se il codice contiene un '*' -> il cliente è nuovo e va aggiunto alla lista di Campo + //se invece il cliente ha un codice normale -> è un aggiornamento dei suoi dati -> controlla che esista davvero + if (codcf <= 0) + { + //questa è un surrogato della get_next_cli + file_clifo.zero(); + file_clifo.put(CLI_TIPOCF, 'C'); + file_clifo.read(_isgteq); + if (file_clifo.good()) + file_clifo.prev() ; + file_clifo.setstatus(NOERR); + if (file_clifo.good()) + codcf += file_clifo.get_long(CLI_CODCF); + + //finestra propositiva del nuovo codcf + + file_clifo.zero(); + file_clifo.put(CLI_TIPOCF, 'C'); + file_clifo.put(CLI_CODCF, codcf); + file_clifo.write(); + } + + //il cliente, se non nuovo, deve esistere! + file_clifo.put(CLI_TIPOCF, 'C'); + file_clifo.put(CLI_CODCF, codcf); + + int err = file_clifo.read(); + + //se non esiste non scrive ma continua + if (err != NOERR) + { + _can_write = false; + TString msg; + msg << "Impossibile aggiornare il cliente " << codcf << ". File clifo."; + log.log(2, msg); + } + + //campi clifo + const TString& ragsoc = recset.get("RagioneSociale").as_string(); + file_clifo.put(CLI_RAGSOC, ragsoc); + const TString& indcf = recset.get("Indirizzo").as_string(); + file_clifo.put(CLI_INDCF, indcf); + const TString& localita = recset.get("Localita").as_string(); + file_clifo.put(CLI_LOCCF, localita); + const TString& cap = recset.get("CAP").as_string(); + file_clifo.put(CLI_CAPCF, cap); + //la provincia non serve perchè si passa dal codice del comune + //const TString& provincia = recset.get("Provincia").as_string(); + const TString& piva = recset.get("PartitaIVA").as_string(); + file_clifo.put(CLI_PAIV, piva); + const TString& codpag = recset.get("CodicePagamento").as_string(); + file_clifo.put(CLI_CODPAG, codpag); + const TString& cofi = recset.get("CodiceFiscale").as_string(); + file_clifo.put(CLI_COFI, cofi); + + //campi cfven + TLocalisamfile file_cfven(LF_CFVEN); + file_cfven.put(CFV_TIPOCF, 'C'); + file_cfven.put(CFV_CODCF, codcf); + err = file_cfven.read(); + + if (err != NOERR) + { + _can_write = false; + TString msg; + msg << "Impossibile aggiornare il cliente " << ragsoc << ". File cfven."; + log.log(2, msg); + } + + file_cfven.put(CFV_CODAG, codice_agente); + const TString& codlist = recset.get("CodiceListino").as_string(); + file_cfven.put(CFV_CODLIST, codlist); + + //se alla fin fine può scrivere -> aggiorna sia clifo che cfven + if (_can_write) + file_clifo.rewrite(); + + //incredibilmente arriva in fondo TString msg; - msg << "Scartato nuovo cliente. Terminale: " << cod_term << " CodCli: " << codcf << " Ragsoc: " << ragsoc; - log.log(0, msg); + msg << "Cliente: " << codcf << " Terminale: " << codice_terminale; + //se può scrivere... + if (_can_write) + { + //alla fine della fiera salva il cliente e il cfven + err = file_clifo.rewrite() && file_cfven.rewrite(); + + if (err == NOERR) + { + msg.insert("Registrato cliente: ", 0); + log.log(0, msg); + } + else + { + msg.insert("Impossibile registrare cliente: ", 0); + log.log(2, msg); + } + } + else //..sennò avverte e basta + { + msg.insert("Controllato cliente: ", 0); + log.log(0, msg); + } } @@ -785,6 +899,7 @@ void TUpload2Campo::elabora_RC(THardy_upload_recordset& recset, TLog_report& log } + void TUpload2Campo::elabora(const TMask& mask) { TToken_string tipi_record("SU|TF|RF|SI|BR|VC|RC"); @@ -844,8 +959,8 @@ void TUpload2Campo::elabora(const TMask& mask) case 4: //tipo record: BR (righe movimenti magazzino) elabora_BR(recset, log); break; - case 5: //tipo record: VC (Variazioni Cliente) - //elabora_VC(recset, log); //non serve! gli agenti non possono immettere clienti da terminale! + case 5: //tipo record: VC (nuovi clienti e Variazioni Cliente) + elabora_VC(recset, log); break; case 6: //tipo record: RC (Richiesta Carico) elabora_RC(recset, log);