From ed27d17134273701c91f6f1d67e1ed7dece011d2 Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 3 Feb 2011 16:55:44 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : importazione SI: seconda parte git-svn-id: svn://10.65.10.50/branches/R_10_00@21577 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ha/ha1300.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 103 insertions(+), 13 deletions(-) diff --git a/ha/ha1300.cpp b/ha/ha1300.cpp index a2b65f56b..c8d6db36f 100755 --- a/ha/ha1300.cpp +++ b/ha/ha1300.cpp @@ -296,6 +296,7 @@ protected: long check_cliente(const TString& str_codcf, TLog_report& log); void check_magazzino(const TString& codmag_age, TLog_report& log); void check_causale(TString& codcaus, TLog_report& log); + bool genera_incasso(TPartita& game, int nriga, int nrata, const TMovimentoPN& mov, TLog_report& log) const; //metodi di alto livello void elabora_SU(THardy_upload_recordset& recset, TLog_report& log); @@ -398,6 +399,54 @@ long TUpload2Campo::check_cliente(const TString& str_codcf, TLog_report& log) return codcf; } +//aggiorna una partita con una nuova riga che riguarda l'incasso +bool TUpload2Campo::genera_incasso(TPartita& game, int nriga, int nrata, + const TMovimentoPN& mov, TLog_report& log) const +{ + TString msg; + msg.format(FR(" %d della riga %d della partita %d/%s"), + nrata, nriga, game.anno(), (const char*)game.numero()); + + if (!game.esiste(nriga, nrata)) // Non si sa mai col saldaconto! + { + msg.insert(TR("Non esiste la rata")); + log.log(1, msg); + //return false; + nriga = nrata = game.UNASSIGNED; + } + + const TRectype& head = mov.curr(); + + // Creo una riga di partita di tipo pagamento e ci copio i dati della testata del movimento + TRiga_partite& riga = game.new_row(); + const int nrigp = riga.get_int(PART_NRIGA); + riga.put(PART_TIPOMOV, tm_pagamento); + riga.put(PART_SEZ, game.conto().tipo() == 'F' ? 'D' : 'A'); + riga.put(PART_NREG, head.get(MOV_NUMREG)); + riga.put(PART_NUMRIG, 1); + riga.put(PART_DATAREG, head.get(MOV_DATAREG)); + riga.put(PART_DATAPAG, head.get(MOV_DATACOMP)); + riga.put(PART_CODCAUS, head.get(MOV_CODCAUS)); + riga.put(PART_NUMDOC, head.get(MOV_NUMDOC)); + riga.put(PART_DATADOC, head.get(MOV_DATADOC)); + riga.put(PART_DESCR, head.get(MOV_DESCR)); + + // Creo una nuova riga di pagamento assegnado il flag di saldo + TRectype new_pag(LF_PAGSCA); + if (nriga > 0 && nriga < game.UNASSIGNED) + { + TRiga_scadenze& scad = game.rata(nriga, nrata); + new_pag = scad.new_row(nrigp); // Creo nuova riga e la duplico + } + else //se la partita non esiste si inventa il pagamento + new_pag = game.pagamento(nriga, nrata, nrigp); + + new_pag.put(PAGSCA_ACCSAL, 'A'); + new_pag.put(PART_IMPORTO, head.get_real(MOV_TOTDOC)); + const TValuta valuta(head); + game.modifica_pagamento(new_pag, valuta, true); + return true; +} ///////////////////////////////////////////////////////////////////////////////////////////////// // Metodi di alto livello @@ -480,7 +529,7 @@ void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log log.log(2, msg); codcf = 0L; }*/ - } + } //if(codcf<=0)... //il cliente, se non nuovo, deve esistere! @@ -572,6 +621,7 @@ void TUpload2Campo::elabora_VC(THardy_upload_recordset& recset, TLog_report& log log.log(2, msg); } } + log.log(0, ""); } //movimenti di incasso @@ -585,16 +635,20 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log //crea un movimento contabile pescando i dati dal recordset (e inventandosene qualcuno!) //testata - const TDate data_incasso = recset.get("DataIncasso").as_date(); + const TString& str_dataincasso = recset.get("DataIncasso").as_string(); + const TDate data_incasso = upload_format_date6(str_dataincasso); const TDate datareg = data_incasso; const TDate datacomp = data_incasso; TEsercizi_contabili esc; const int annoes = esc.date2esc(data_incasso); const int anno = datareg.year(); const long numdoc = recset.get("NumeroFattura").as_int(); - const TDate datadoc = recset.get("DataFattura").as_date(); + const TString& str_datadoc = recset.get("DataFattura").as_string(); + const TDate datadoc = upload_format_date6(str_datadoc); const TString4 tipodoc = recset.get("TipoDocumento").as_string(); const real incasso = recset.get("ImportoIncassato").as_real() / CENTO; + //il codice partita su Campo è lungo 7 mentre i terminalini lo possono inviare lungo 15 (cazzi loro..) + const TString8 numpart = recset.get("Partita").as_string().left(7); TConfig config(CONFIG_DITTA, "ha"); const TString& codcaus = config.get("InpCausale"); @@ -619,10 +673,10 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log long numreg = 999999L; + TString msg; + msg << " movimento di incasso. Cliente: " << codcf << " - Agente: " << codice_agente << " - Data: " << data_incasso; if (_can_write) { - TString msg; - msg << " movimento di incasso. Cliente: " << codcf << " - Agente: " << codice_agente << " - Data: " << data_incasso; if (mov.write() != NOERR) { _can_write = false; @@ -636,6 +690,11 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log numreg = head.get_long(MOV_NUMREG); } } + else + { + msg.insert("Controllato"); + log.log(0, msg); + } //righe @@ -651,7 +710,7 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log //se il cliente non ha un suo conto, prova con il primo della causale incassi in configurazione if (zio_clifo.conto() <= 0) { - caus.bill(0, zio_clifo); + caus.bill(1, zio_clifo); gr_cli = zio_clifo.gruppo(); co_cli = zio_clifo.conto(); zio_clifo.set(gr_cli, co_cli, codcf, 'C'); @@ -665,7 +724,7 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log //se l'agente non ha un suo conto, prova con il secondo della causale incassi in configurazione if (zio_agente.conto() <= 0) { - caus.bill(1, zio_agente); + caus.bill(2, zio_agente); gr_age = zio_agente.gruppo(); co_age = zio_agente.conto(); sott_age = zio_agente.sottoconto(); @@ -676,8 +735,10 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log //riga 1: conto cliente TRectype& new_rmov_cli = mov.cg(-1); new_rmov_cli.put(RMV_ROWTYPE, 'K'); + new_rmov_cli.put(RMV_ANNOES, annoes); + new_rmov_cli.put(RMV_DATAREG, datareg); zio_clifo.put(new_rmov_cli); - const char sezione_cli = caus.sezione(0); + const char sezione_cli = caus.sezione(1); new_rmov_cli.put(RMV_SEZIONE, sezione_cli); TString descr_rmv_cli; descr_rmv_cli << "Incasso cliente " << codcf; @@ -687,8 +748,10 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log //riga 2: conto agente TRectype& new_rmov_age = mov.cg(-1); new_rmov_age.put(RMV_ROWTYPE, 'I'); + new_rmov_age.put(RMV_ANNOES, annoes); + new_rmov_age.put(RMV_DATAREG, datareg); zio_agente.put(new_rmov_age); - const char sezione_age = caus.sezione(1); + const char sezione_age = caus.sezione(2); new_rmov_age.put(RMV_SEZIONE, sezione_age); TString descr_rmv_age; descr_rmv_age << "Incasso agente " << codice_agente; @@ -697,9 +760,36 @@ void TUpload2Campo::elabora_SI(THardy_upload_recordset& recset, TLog_report& log new_rmov_age.put(RMV_IMPORTO, incasso); //crea i pagamenti aggiornando anche la partita (qui si parrà la tua nobilitate!) + TPartita game(zio_clifo, anno, numpart); + const int nriga = game.prima_fattura(); + const int nrata = 1; + //metodo magicissimo per l'aggiornamento della partita con l'incasso + genera_incasso(game, nriga, nrata, mov, log); - //alla fine della fiera scrive (se può) movimento e pagamento - + //alla fine della fiera scrive (se può) movimento e pagamento su partita + if (_can_write) + { + int err = mov.rewrite(); + + TString mov_msg; + mov_msg << " movimento di incasso n.reg.: " << numreg; + + if (err == NOERR) + { + mov_msg.insert("Completato"); + log.log(0, mov_msg); + + game.write(true); + } + else + { + _can_write = false; + mov_msg.insert("Impossibile completare"); + log.log(2, mov_msg); + } + } //if(_can_write)... + + log.log(0, ""); } @@ -1166,7 +1256,7 @@ void TUpload2Campo::elabora(const TMask& mask) TString4 tipo_record = recset.rec_type(); tipo_record.trim(); - //"SU|VC|TF|RF|SI|BR|RC" + //Sequenza di ordinamento dei record "SU|VC|TF|RF|SI|BR|RC": NON ATTENTATEVI A CAMBIARLA O NON FUNZIONA PIU' UN CAZZO!! const int pos = tipi_record.get_pos(tipo_record); //trattazione dei vari tracciati record @@ -1185,7 +1275,7 @@ void TUpload2Campo::elabora(const TMask& mask) //elabora_RF(recset, log); //non serve! lo fa l'elaborazione di testata break; case 4: //tipo record: SI (incasso documenti) - //elabora_SI(recset, log); + elabora_SI(recset, log); break; case 5: //tipo record: BR (righe movimenti magazzino) elabora_BR(recset, log);