Patch level :10.0 futura
Files correlati : Ricompilazione Demo : [ ] Commento :aggiunti metodi per il calcolo del fido. NON ancora funzionanti nè completi! git-svn-id: svn://10.65.10.50/trunk@17588 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
8d85138e61
commit
f54a6e0898
132
ve/velib07.cpp
132
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);
|
||||
}
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user