From 50a1a35af322f172afb78e85a6c779cad4fde374 Mon Sep 17 00:00:00 2001 From: mtollari Date: Thu, 25 Jan 2018 14:15:16 +0000 Subject: [PATCH] Patch level : 12.0 514 Files correlati : li Commento : Aggiunta funzione popolaPlafond() per fatturazione bolle git-svn-id: svn://10.65.10.50/branches/R_10_00@24299 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/li/li0100.cpp | 2 +- src/li/lilib01.cpp | 72 +++++++++++++++++++++++++++++++++++++++++----- src/li/lilib01.h | 1 + 3 files changed, 67 insertions(+), 8 deletions(-) diff --git a/src/li/li0100.cpp b/src/li/li0100.cpp index 90c7321a1..e763c4ca7 100644 --- a/src/li/li0100.cpp +++ b/src/li/li0100.cpp @@ -339,7 +339,7 @@ bool TVisLI_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { // Creo una maschera che richiede la data TMask app("Creazione storico LI", 1, 50, 10); - app.add_button_tool(DLG_OK, "Esegui", TOOL_OK); + app.add_button_tool(DLG_OK, "~Conferma", TOOL_OK); app.add_button_tool(DLG_CANCEL, "Annulla", TOOL_CANCEL); app.add_date(101, 0, "Data iniziale ", 1,1); app.field(101).check_type(CHECK_REQUIRED); diff --git a/src/li/lilib01.cpp b/src/li/lilib01.cpp index d8d3c77cb..0d8da6cd1 100644 --- a/src/li/lilib01.cpp +++ b/src/li/lilib01.cpp @@ -15,6 +15,8 @@ const TToken_string& TLi_manager::getUse(TDocumento& d, const bool write) { static TToken_string& ret = get_tmp_string(); TAssoc_array tabIva = d.tabella_iva(true); + TString4 numDoc = d.numerazione(); + int nDoc = d.numero(); real plaUtil = ZERO; @@ -36,7 +38,7 @@ const TToken_string& TLi_manager::getUse(TDocumento& d, const bool write) { ret.cut(0) << consPlaf(plaUtil, write); if(ret.starts_with("ERRORE")) - ret << " al documento " << d.numerazione() << " n." << d.numero() << "\nTotale plafond da consumare: " << plaUtil.string() << "\nTotale rimasto: " << getPlafond().string(); + ret << " al documento " << d.numerazione() << " n." << d.numero() << "\nTotale plafond da utilizzare: " << plaUtil.string() << "\nTotale rimasto: " << getPlafond().string(); } } @@ -623,10 +625,6 @@ bool TLi_manager::testPlafond(TLista_documenti& dout, TLog_report& lerr) clearModifiche(); err = true; } - else - { - dout[i].put("PLAFOND", use); - } } return err; @@ -762,7 +760,7 @@ bool generaLiStorico(TDate dataIni) // Date TDate startCurr = rletint.get_date("DAL"), endCurr; - endCurr = rletint.get_int("CODCLI") == rletintn.get_int("CODCLI") ? rletintn.get_date("DAL")-- : NULLDATE; + endCurr = rletint.get_int("CODCLI") == rletintn.get_int("CODCLI") ? --rletintn.get_date("DAL") : NULLDATE; // Dati lettera real impLI = rletint.get_real("IMPORTO"); bool soluzione = rletint.get_int("TIPOOP") == SOLUZIONE_UNICA; @@ -817,4 +815,64 @@ bool generaLiStorico(TDate dataIni) } } return true; -} \ No newline at end of file +} + +bool popolaPlafond(TLista_documenti & din, const TDate& data_elab) +{ + std::map plafs; + TProgress_monitor mDoc(din.items(), "Generazione plafond nelle fatture"); + bool ok = true; + for(int i = 0; i < din.items() && ok; i++) + { + if (!mDoc.add_status()) + return false; + + // Per ogni fattura richiamo il plafond dell'intestatario e faccio le mie elaborazioni + if (plafs.find(din[i].codcf()) == plafs.end()) + { + TLi_manager* app = new TLi_manager(din[i].tipocf(), din[i].codcf(), data_elab); + plafs.insert(std::pair(din[i].codcf(), app)); + } + TLi_manager& thisPla = *plafs[din[i].codcf()]; // Forget about optimization! + if (!thisPla.hasValidPlafond()) continue; + + // Calcolo quanto plafond sta utilizzando + real utilizzato = ZERO; + TAssoc_array tabIva = din[i].tabella_iva(true); + for (TRiepilogo_iva * totali = (TRiepilogo_iva *)tabIva.get(); totali != NULL; totali = (TRiepilogo_iva *)tabIva.get()) + { + if (thisPla.checkIva(totali->cod_iva().codice())) + utilizzato += cache().get("%TIP", din[i].tipo().codice()).get_bool("B7") ? -totali->imp_orig() : totali->imp_orig(); + } + + // Passo a un altro doc se non usa plafond + if (utilizzato.is_zero()) continue; + + TToken_string used; + if (din[i].tipo().nota_credito()) + { + used = thisPla.incrPlaf(din[i], utilizzato, true); + } + else + { + // Il controllo è andato bene, adesso mi segno i plafond che ho utilizzato nel memo del documento + used = thisPla.consPlaf(utilizzato, true); + } + + // Rincontrollo che l'utilizzo del pladond sia tutto ok, meglio una volta in più che una in meno! + if (used.starts_with("ERRORE")) + { + error_box("Errore! Superato l'utilizzo del plafond per il documento %s %d, del cli/fo %c%d, come è possibile?", din[i].tipo().codice(), din[i].numero(), din[i].tipocf(), din[i].codcf()); + ok = false; + } + else + { + din[i].put("PLAFOND", used); + } + } + + for (auto it = plafs.begin(); it != plafs.end(); ++it) + delete it->second; + + return ok; +} diff --git a/src/li/lilib01.h b/src/li/lilib01.h index 9da065fcb..775b04e8f 100644 --- a/src/li/lilib01.h +++ b/src/li/lilib01.h @@ -101,6 +101,7 @@ public: static void createTipiStati(TToken_string& tipi, TToken_string& stati); bool generaLiStorico(TDate dataIni); +bool popolaPlafond(TLista_documenti& din, const TDate& data_elab); #endif \ No newline at end of file