From 7835079aae3749e155821ef732feb53a351a4b6b Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Wed, 8 Sep 2021 16:46:02 +0200 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2012.?= =?UTF-8?q?0=201076=20Files=20correlati=20=20=20=20=20:=20ve0.exe=20ve1.ex?= =?UTF-8?q?e=20ve5.exe=20ve6.exe=20fp0.exe=20li0300a.msk=20lv2.exe=20Comme?= =?UTF-8?q?nto=20=20=20=20=20=20=20=20:=20In=20fatturazione=20bolle=20scri?= =?UTF-8?q?tto=20il=20cliente=20originale=20della=20fattura=20nel=20campo?= =?UTF-8?q?=20CFORIG=20quando=20uso=20il=20cliente=20FATTURARE=20A=20per?= =?UTF-8?q?=20poterlo=20recuperae=20nelle=20lettere=20d'intento=20In=20con?= =?UTF-8?q?figurazione=20delle=20lettere=20d'intento=20c'=C3=A8=20il=20par?= =?UTF-8?q?ametro=20"Uitlizza=20il=20cliente=20originale=20nelle=20fatture?= =?UTF-8?q?"=20per=20attivare=20il=20meccanismo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lv/lv0400.cpp | 2 +- src/lv/lv0600a.uml | 4 +- src/lv/lv2500.cpp | 141 ++++++++++++++++++++++----------------------- 3 files changed, 73 insertions(+), 74 deletions(-) diff --git a/src/lv/lv0400.cpp b/src/lv/lv0400.cpp index faa06675a..bfaf5c980 100755 --- a/src/lv/lv0400.cpp +++ b/src/lv/lv0400.cpp @@ -6,7 +6,7 @@ #include #include -#include "../cg/cglib01.h" +#include "../cg/cglib.h" #include "lvcondv.h" #include "lvrcondv.h" diff --git a/src/lv/lv0600a.uml b/src/lv/lv0600a.uml index 94222de54..518347dd0 100755 --- a/src/lv/lv0600a.uml +++ b/src/lv/lv0600a.uml @@ -246,9 +246,9 @@ END STRING F_NUM_G 4 BEGIN - PROMPT 2 16 "Numerazione " + PROMPT 2 16 "Numerazione" FIELD #CODNUM_G - FLAGS "H" + FLAGS "D" END diff --git a/src/lv/lv2500.cpp b/src/lv/lv2500.cpp index 3c613d25c..94d281a96 100755 --- a/src/lv/lv2500.cpp +++ b/src/lv/lv2500.cpp @@ -9,7 +9,7 @@ #include "../pr/agenti.h" #include "../pr/percprov.h" #include "../cg/cfban.h" -#include "../cg/cglib03.h" +#include "../cg/cglib.h" #include "comuni.h" #include "lvcondv.h" @@ -1212,7 +1212,7 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do if (row_has_02) { - const TString key = format("%04d%04d", doc.get_int("FATID"), rdoc.get_int(RDOC_IDRIGA)); + const TString key = format("%04d%04d", doc.get_int(DOC_FATID), rdoc.get_int(RDOC_IDRIGA)); real new_qta = real_qta; TCalc_02_data * data = (TCalc_02_data *) _output_rows_02.objptr(key); @@ -1418,6 +1418,10 @@ void TFatturazione_lavanderie::post_process(TLista_documenti& doc_out, TLista_do if (new_cli > 0L) { + TToken_string cf_orig = tipocf; + + cf_orig.add(act_cli); + doc.put(DOC_CFORIG, cf_orig); doc.put(DOC_CODCF, new_cli); key = tipocf; key.add(new_cli); @@ -1583,7 +1587,7 @@ TRiga_documento& TFatturazione_lavanderie::find_or_create_row(TDocumento& doc_ou if (fatt_02()) { doc_out.set_row_ids(); - const TString key = format("%04d%04d", doc_out.get_int("FATID"), doc_out[r].get_int(RDOC_IDRIGA)); + const TString key = format("%04d%04d", doc_out.get_int(DOC_FATID), doc_out[r].get_int(RDOC_IDRIGA)); TCalc_02_data * data = (TCalc_02_data *) _output_rows_02.objptr(key); if (data == NULL) @@ -2178,21 +2182,22 @@ void TFatturazione_lav_app::main_loop() _msk = new TFatturazione_msk(); _msk->show(F_SAVEDATA, lv_is_02_active()); - while (_msk->run()!= K_QUIT) + while (_msk->run() != K_QUIT) { _solototali = _msk->get_bool(F_SOLOTOTALI); + const int annoes = _msk->get_date(F_DATAFAT).year(); if (!controlli_preliminari()) { TString str; + str << "Prima di poter eseguire la fatturazione è necessario correggere tutti gli errori segnalati.\n" << "Si prega di controllare i dati di configurazione."; warning_box(str); return; } _log = new TLog_report(TR("Fatturazione")); - if (_msk->get_bool(F_SAVEDATA)) { TFilename src = firm2dir(-1); @@ -2200,11 +2205,13 @@ void TFatturazione_lav_app::main_loop() copy_tree(src, dst); } //leggo i dati di primo interesse + const TString4 mskzona = _msk->get(F_CODZONA); const TString4 mskcat = _msk->get(F_CODCATC); //preparo le date estremi (dal - al) della query e l'anno dell'esercizio TDate al = _msk->get_date(F_ADATA); //se la data "al" non è corretta, la pongo uguale alla data fattura + if (!al.ok()) al = _msk->get_date(F_DATAFAT); @@ -2212,6 +2219,7 @@ void TFatturazione_lav_app::main_loop() TDate dal = _msk->get_date(F_DADATA); //se la data "dal" non è corretta, la pongo uguale a 1/1/annoes + if (!dal.ok()) { dal.set_day(1); @@ -2246,15 +2254,11 @@ void TFatturazione_lav_app::main_loop() const TString& fromcod = _msk->get(F_DACODCF); const TString& tocod = _msk->get(F_ACODCF); - //&&(BETWEEN(DATADOC,#DADATA,#ADATA))&&(STATO==\"2\")&&(TIPODOC==\"B01\") query << "USE DOC KEY 3 SELECT (TIPOCF==\"C\")&&" << "STR(BETWEEN(CODCF,\"" << fromcod << "\",\"" << tocod << "\"))\n" << "BY TIPOCF CODCF DATADOC\n" << "FROM DATADOC=#DAL PROVV=D ANNO=" << year << "\n" << "TO DATADOC=#AL PROVV=D ANNO=" << year << "\n"; -// query << "USE DOC KEY 2 SELECT BETWEEN(DATADOC,#DADATA,#ADATA)&&STATO==\"2\")&&(TIPODOC==\"B01\")\n" -// << "FROM " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#DADATA \n" -// << "TO " << "TIPOCF=C PROVV=D ANNO=#ANNO DATADOC=#ADATA \n"; //instanzio il recordset011 @@ -2276,24 +2280,25 @@ void TFatturazione_lav_app::main_loop() //TAssoc_array dei clienti per cui ho generato dei documenti TAssoc_array cliela; //scorro tutti documenti che la query mi restiuisce - for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + + recset.cursor()->relation()->lfile().set_curr(new TDocumento); + for (bool ok = recset.move_first(); ok && pi->add_status(); ok = recset.move_next()) { - //leggo il codcf - const long clifo = recset.get(DOC_CODCF).as_int(); - if (clifo != last_clifo) + TDocumento & doc =(TDocumento &) recset.cursor()->curr(); + const TCli_for &cli = cached_clifor('C', doc.get_long(DOC_CODCF)); + //preparo la chiave e recupero da CFVEN i dati di quel cliente + + if (cli.codice() != last_clifo) { - key.format("C|%ld", clifo); + key.format("C|%ld", cli.codice()); TString str; - str << TR("Cliente") << ' ' << clifo << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC); + str << TR("Cliente") << ' ' << cli.codice() << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC); pi->set_text(str); - last_clifo=clifo; + last_clifo = cli.codice(); } - if (!pi->add_status()) - break; - //se non è l'ultimo cliente, allora: - if (clifo != lastcli) + if (cli.codice() != lastcli) { //se effettivamente devo elaborare delle bolle per questo cliente, allora: if (docsin.items() > 0) @@ -2339,24 +2344,19 @@ void TFatturazione_lav_app::main_loop() docsin.rewrite(); docsin.destroy(-1); } - lastcli = clifo; + lastcli = cli.codice(); } - //preparo la chiave e recupero da CFVEN i dati di quel cliente - key.format("C|%ld", clifo); - const TRectype& clienti = cache().get(LF_CFVEN,key); - const TRectype& docrec = recset.cursor()->curr(); - const TRectype& clirec = cache().get(LF_CLIFO,key); - //se il documento che sto analizzando è corretto, allora: - bool cliok = elab.is_document_ok(docrec); + bool cliok = elab.is_document_ok(doc); + if (cliok) { //se il codice di zona è pieno, allora: if (mskzona.full()) { //leggo il codice di zona standard di quel cliente e lo confronto con quello della maschera (V o F) - const TString& codzona = clienti.get(CFV_CODZONA); + const TString& codzona = cli.vendite().get(CFV_CODZONA); cliok = (codzona == mskzona); } @@ -2364,15 +2364,16 @@ void TFatturazione_lav_app::main_loop() if (cliok && mskcat.full()) { //leggo il codice categoria economica standard di quel cliente e lo confronto con quello della maschera (V o F) - const TString& codcat = clienti.get(CFV_CODCATC); + const TString& codcat = cli.vendite().get(CFV_CODCATC); cliok = (codcat == mskcat); } } else - if (!_solototali && elab.is_document_compatible(docrec) && docrec.get(DOC_STATO) < stato_min) + if (!_solototali && elab.is_document_compatible(doc) && doc.get(DOC_STATO) < stato_min) { TString msg; - msg << "Cli. " << clifo << ' ' << clirec.get(CLI_RICALT) << " Bolla n. " << docrec.get(DOC_NDOC) << " del " << docrec.get(DOC_DATADOC) << " in stato " << docrec.get(DOC_STATO); + + msg << "Cli. " << cli.codice() << ' ' << cli.get(CLI_RICALT) << " Bolla n. " << doc.get(DOC_NDOC) << " del " << doc.get(DOC_DATADOC) << " in stato " << doc.get(DOC_STATO); log(msg); } @@ -2380,33 +2381,34 @@ void TFatturazione_lav_app::main_loop() if (cliok) { //cerco sul contratto qual'è il periodo di fatturazione di quel cliente - indsped = recset.get(DOC_CODINDSP).as_int(); - TLaundry_contract contr(clifo, indsped, datafat); + indsped = doc.get_int(DOC_CODINDSP); + + TLaundry_contract contr(cli.codice(), indsped, datafat); + if(!contr.ok()) { TString msg; - msg << TR("Non ci sono contratti in essere per il cliente ") << clifo << " " << clirec.get(CLI_RICALT) << TR(" in data ") << datafat.string(); + + msg << TR("Non ci sono contratti in essere per il cliente ") << cli.codice() << " " << cli.get(CLI_RICALT) << TR(" in data ") << datafat.string(); log(msg); continue; } + const int contrper = contr.get_int(LVCONDV_PERFAT); //se il cliente non è sospeso e se si è nel periodo di fatturazione giusto, aggiungo il documento alla //lista dei documenti da elaborare if (!contr.get_bool(LVCONDV_FATTSOSP) && contrper <= period) { - TDocumento * doc = new TDocumento(recset.cursor()->curr()); - // if (aggcli && !_solototali && doc->get(DOC_CODNUM) == num_buoni && doc->tipo().codice() == tipo_buoni) if (aggcli && !_solototali) { bool doc_updated = false; // banche - key.cut(0); - key.add(clirec.get(CLI_TIPOCF)); - key.add(clirec.get(CLI_CODCF)); + key.add(cli.get(CLI_TIPOCF)); + key.add(cli.get(CLI_CODCF)); key.add("V"); key.add("1"); @@ -2417,9 +2419,9 @@ void TFatturazione_lav_app::main_loop() if (cfban.empty()) { - abi = clirec.get(CLI_CODABI); - cab = clirec.get(CLI_CODCAB); - iban = clirec.get(CLI_IBAN); + abi = cli.get(CLI_CODABI); + cab = cli.get(CLI_CODCAB); + iban = cli.get(CLI_IBAN); } else { @@ -2435,8 +2437,8 @@ void TFatturazione_lav_app::main_loop() doc->put(DOC_IBAN, iban); } key.cut(0); - key.add(clirec.get(CLI_TIPOCF)); - key.add(clirec.get(CLI_CODCF)); + key.add(cli.get(CLI_TIPOCF)); + key.add(cli.get(CLI_CODCF)); key.add("N"); key.add("1"); @@ -2445,8 +2447,8 @@ void TFatturazione_lav_app::main_loop() if (cfbanpr.empty()) { - abi = clienti.get(CFV_CODABIPR); - cab = clienti.get(CFV_CODCABPR); + abi = cli.vendite().get(CFV_CODABIPR); + cab = cli.vendite().get(CFV_CODCABPR); } else { @@ -2486,26 +2488,27 @@ void TFatturazione_lav_app::main_loop() if (doc_updated) { TString msg(" Cli."); - msg << clifo << " " << clirec.get(CLI_RICALT) << "Bolla " << docrec.get(DOC_CODNUM) << ' ' << docrec.get(DOC_TIPODOC) - << ' ' << docrec.get(DOC_NDOC) << " del " << docrec.get(DOC_DATADOC) << " aggiornata la testata "; + + msg << cli.codice() << " " << cli.get(CLI_RICALT) << "Bolla " << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_TIPODOC) + << ' ' << doc.get(DOC_NDOC) << " del " << doc.get(DOC_DATADOC) << " aggiornata la testata "; log(msg); } } - for (int r = 1; !_solototali && r <= doc->physical_rows(); r++) + for (int r = 1; !_solototali && r <= doc.physical_rows(); r++) { - const TRiga_documento& rdoc = (*doc)[r]; + const TRiga_documento& rdoc = doc[r]; const TCodice_articolo codart = rdoc.get(RDOC_CODARTMAG); if (codart.full()) { const TRectype & rcont = contr.row(codart); - const TArticolo_lavanderie& art = cached_article_laundry(codart, 'C', clifo, use_indsp ? indsped : 0); + const TArticolo_lavanderie& art = cached_article_laundry(codart, 'C', cli.codice(), use_indsp ? indsped : 0); //estraggo il record corrispondente su LF_CLIFOGIAC const TRecmag_lavanderie& rec = art.find_rec(annoes); TString str; - str << "Cli." << clifo << ' ' << clirec.get(CLI_RICALT) << " Bolla " << docrec.get(DOC_CODNUM) << ' ' << docrec.get(DOC_TIPODOC) - << ' ' << docrec.get(DOC_NDOC) << " del " << docrec.get(DOC_DATADOC) << " art." << codart << " - "; + str << "Cli." << cli.codice() << ' ' << cli.get(CLI_RICALT) << " Bolla " << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_TIPODOC) + << ' ' << doc.get(DOC_NDOC) << " del " << doc.get(DOC_DATADOC) << " art." << codart << " - "; if (rec.get_real("DOTOD") < ZERO) { @@ -2521,15 +2524,11 @@ void TFatturazione_lav_app::main_loop() } bool prezzo_nullo = false; + if (prezzo_da_contratto) - { - // Segnalo prezzo nullo solo se il contratto non è ad importo fisso (07/11/2011) - prezzo_nullo = rcont.get_real(LVRCONDV_PREZZO).is_zero() && contr.get_real(LVCONDV_IMPFIX).is_zero(); - } + prezzo_nullo = rcont.get_real(LVRCONDV_PREZZO) == ZERO && contr.get_real(LVCONDV_IMPFIX) == ZERO; // Segnalo prezzo nullo solo se il contratto non è ad importo fisso (07/11/2011) else - { - prezzo_nullo = rdoc.get_real(RDOC_PREZZO).is_zero(); // Prezzo sulla bolla - } + prezzo_nullo = rdoc.get_real(RDOC_PREZZO) == ZERO; // Prezzo sulla bolla if (prezzo_nullo) { const TString8 causale = rdoc.get(RDOC_CODAGG1); @@ -2547,17 +2546,11 @@ void TFatturazione_lav_app::main_loop() } } } - docsin.add(doc); } } } - - // Forzo l'eliminazione - if(pi != NULL) - delete pi; - - //se ho dei documenti in lista li elaboro e poi svuoto le TList_file + safe_delete(pi); // se ho dei documenti in lista li elaboro e poi svuoto le TList_file if (docsin.items() != 0) { if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest")) @@ -2611,9 +2604,15 @@ void TFatturazione_lav_app::main_loop() switch (numdocgen) { - case 0: str << TR("Non è stata ") << parolasi << TR(" alcuna fattura"); break; - case 1: str << TR("E' stata ") << parolasi << TR(" una fattura"); break; - default: str << TR("Sono state ") << parolapl << ' ' << numdocgen << TR(" fatture"); break; + case 0: + str << TR("Non è stata ") << parolasi << TR(" alcuna fattura"); + break; + case 1: + str << TR("E' stata ") << parolasi << TR(" una fattura"); + break; + default: + str << TR("Sono state ") << parolapl << ' ' << numdocgen << TR(" fatture"); + break; } if (numdocgen <= 0) warning_box(str);