From f54a6e08989cfe938556a721c2a6625c544e5683 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 11 Nov 2008 14:24:22 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:10.0?= =?UTF-8?q?=20futura=20Files=20correlati=20=20=20=20=20:=20Ricompilazione?= =?UTF-8?q?=20Demo=20:=20[=20]=20Commento=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20:aggiunti=20metodi=20per=20il=20calcolo=20del=20fido.=20NON?= =?UTF-8?q?=20ancora=20funzionanti=20n=C3=A8=20completi!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/trunk@17588 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/velib07.cpp | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ ve/velib07.h | 8 +++ 2 files changed, 140 insertions(+) diff --git a/ve/velib07.cpp b/ve/velib07.cpp index fce702cca..87fe113c0 100755 --- a/ve/velib07.cpp +++ b/ve/velib07.cpp @@ -1,5 +1,6 @@ #include "velib07.h" +#include "../cg/cgsaldac.h" #include "../db/dblib.h" /////////////////////////////////////////////////////////// @@ -593,3 +594,134 @@ bool TDocument_report::execute_usr_word(unsigned int opcode, TVariant_stack& sta return true; } +///////////////////////////////////////// +// Metodi non appartenenti a classi +///////////////////////////////////////// +static TImporto get_importo(const TISAM_recordset& partite, const char* sezione, const char* valore) +{ + const char sez = partite.get(sezione).as_string()[0]; + const real val = partite.get(valore).as_real(); + return TImporto(sez, val); +} + + +static void calcola_fido_da_saldaconto (const char tipocf, const long codcf, const TDate& datacalc, const int riskdays, + real& saldo, real& saldo_sbf) +{ + //estrae le partite aperte del clifo selezionato (no righe 9999) con data <= della data selezionata datacalc + TString query; + query << "USE PART\nSELECT ((NRIGA!=9999)&&(CHIUSA!=\"X\")&&(BETWEEN(DATAREG,0,#DATACALC)))\n"; + query << "FROM TIPOC=#TIPOCF GRUPPO=0 CONTO=0 SOTTOCONTO=#CODCF\n"; + query << "TO TIPOC=#TIPOCF GRUPPO=0 CONTO=0 SOTTOCONTO=#CODCF"; + + TISAM_recordset partite(query); + + TString4 str_tipocf = tipocf; + partite.set_var("#TIPOCF", TVariant(str_tipocf)); + partite.set_var("#CODCFCF", codcf); + partite.set_var("#DATACALC", datacalc); + + //importone somma degli importi delle righe del recordset + TImporto importone_saldo, importone_sbf; + + //data considerante i giorni di rischio ammessi dall'utonto + TDate data_sbf = datacalc; + data_sbf -= riskdays; + + for (bool ok = partite.move_first(); ok; ok = partite.move_next()) + { + TImporto importo_riga; + + //fatture,note di credito,pagamenti + TImporto importo_partita = get_importo(partite, PART_SEZ, PART_IMPORTO); + importo_riga += importo_partita; + + //pagamenti (tm=3), insoluti (tm=5), pagamenti insoluti(tm=6) + if (partite.get(PART_TIPOMOV).as_int() >= tm_pagamento) + { + TImporto importo_abbuono = get_importo(partite, PART_SEZABB, PART_ABBUONI); + importo_riga += importo_abbuono; + //pagamenti in valuta + if (!partite.get(PART_CODVAL).is_empty()) + { + TImporto importo_diff_cambio = get_importo(partite, PART_SEZDIFCAM, PART_DIFFCAM); + importo_riga += importo_diff_cambio; + } + //importo pagamento a rischio (solo pagamenti, mai fatture) + const bool is_sbf = partite.get(PART_DATAREG).as_date() >= data_sbf; + if (is_sbf) + importone_sbf += importo_riga; + } + + //somma importi presenti sulla riga partita (fatture, pagamenti, insoluti, pagamenti insoluti) + importone_saldo += importo_riga; + + } + //la normalizzazione del totale delle partite va fatta in base al fatto che si parli di 'C'liente o 'F'ornitore + const char sezione_finale = (tipocf == 'C') ? 'A' : 'D'; + importone_saldo.normalize(sezione_finale); + importone_sbf.normalize(sezione_finale); + + //primo valore in output + saldo += importone_saldo.valore(); + saldo_sbf += importone_sbf.valore(); +} + + +static void calcola_fido_da_documenti(const char tipocf, const long codcf, const TDate& datacalc, const int riskdays, + real& saldo, real& saldo_sbf) +{ + TConfig config(CONFIG_DITTA, "ve"); + + //scansione delle righe FIDO_XX(j)=.. sul paragrafo di configurazione VE per avere i parametri di numerazione/tipo.. + //..da considerare + for (int j = 0;;j++) + { + const TString& num_fido = config.get("FIDO_NUM", NULL, j); + //se manca la numerazione si puņ fermare,in quanto non puņ esistere un tipo senza numerazione + if (num_fido.blank()) + break; + const TString& tipo_fido = config.get("FIDO_TIP", NULL, j); + const int stato_fido = config.get_int("FIDO_STA", NULL, j); + const bool residuo_fido = config.get_bool("FIDO_RES", NULL, j); + + //per la numerazione scelta queryzza gli archivi alla ricerca dei documenti che rientrano nei parametri + TString query; + query << "USE DOC KEY 2\n"; + query << "SELECT (CODNUM=#CODNUM)&&(TIPODOC=#TIPODOC)&&(STATO=#STATO)\n"; + query << "FROM TIPOCF=#TIPOCF CODCF=#CODCF PROVV='D'\n"; + query << "TO TIPOCF=#TIPOCF CODCF=#CODCF PROVV='D' ANNO=#ANNO DATADOC=#DATACALC"; + + TISAM_recordset documenti(query); + + TString4 str_tipocf = tipocf; + documenti.set_var("#TIPOCF", TVariant(str_tipocf)); + documenti.set_var("#CODCFCF", codcf); + documenti.set_var("#ANNO", TVariant((long)datacalc.year())); + documenti.set_var("#DATACALC", datacalc); + documenti.set_var("#CODNUM", TVariant(num_fido)); + documenti.set_var("#TIPODOC", TVariant(tipo_fido)); + documenti.set_var("#STATO", TVariant((long)stato_fido)); + + const int items = documenti.items(); + + //adesso che ha i documenti che cercava.. + for (bool ok = documenti.move_first(); ok; ok = documenti.move_next()) + { + const real totdoc = documenti.get("G1:TOTDOC").as_real(); + + } + + } +} + + +//metodo per il calcolo fido di un cliente ad una data definita +void calcola_fido_cliente (const char tipocf, const long codcf, const TDate& datacalc, const int riskdays, + real& saldo, real& saldo_sbf) +{ + //PRIMA PARTE: controlla il saldaconto + calcola_fido_da_saldaconto(tipocf, codcf, datacalc, riskdays, saldo, saldo_sbf); + //SECONDA PARTE: controlla i documenti + calcola_fido_da_documenti(tipocf, codcf, datacalc, riskdays, saldo, saldo_sbf); +} \ No newline at end of file diff --git a/ve/velib07.h b/ve/velib07.h index 0b4ecec9e..06f3c091a 100755 --- a/ve/velib07.h +++ b/ve/velib07.h @@ -118,5 +118,13 @@ public: bool load(const char* name); }; + +/////////////////////////////////////////////// +// Metodi non appartenenti a classi +/////////////////////////////////////////////// +//metodo per il calcolo del fido cliente +void calcola_fido_cliente (const char tipocf, const long codcf, const TDate& datacalc, const int riskdays, + real& saldo, real& saldo_sbf); + #endif