Patch level :4.0 506

Files correlati     :ca0.exe ca3.exe ca0300.msk
Ricompilazione Demo : [ ]
Commento            :aggiunto trattamento causali rateo/risconto in configurazione e stampa rendiconto; richiesta di Eva Braun del CRPA


git-svn-id: svn://10.65.10.50/trunk@14372 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2006-10-09 14:01:26 +00:00
parent 10db434c95
commit 058332cd99
4 changed files with 125 additions and 22 deletions

View File

@ -153,6 +153,7 @@ bool TConf_Analitica::preprocess_config (TMask& mask, TConfig& config)
{
config_loader(mask.sfield(F_RIGHE_NUM), config, "ND");
config_loader(mask.sfield(F_RIGHE_FDR), config, "NF");
config_loader(mask.sfield(F_RIGHE_RER), config, "RR");
return true;
}
@ -160,6 +161,7 @@ bool TConf_Analitica::postprocess_config (TMask& mask, TConfig& config)
{
config_setter(mask.sfield(F_RIGHE_NUM), config, "ND");
config_setter(mask.sfield(F_RIGHE_FDR), config, "NF");
config_setter(mask.sfield(F_RIGHE_RER), config, "RR");
return true;
}

View File

@ -50,6 +50,7 @@
#define F_RIGHE_NUM 170
#define F_RIGHE_FDR 171
#define F_RIGHE_RER 172
//elementi dello sheet dei documenti da escludere dal rendiconto
#define SN_CODNUM 101
@ -61,3 +62,7 @@
//elementi dello sheet dei documenti da considerare fatture da ricevere
#define SF_CODNUM 101
#define SF_DESCR 102
//elementi dello sheet delle causali per ratei e risconti
#define SR_CODNUM 101
#define SR_DESCR 102

View File

@ -406,14 +406,14 @@ END
ENDPAGE
PAGE "Regole" -1 -1 78 20
PAGE "Regole rendiconto" -1 -1 78 20
TEXT -1
BEGIN
PROMPT 1 1 "@bNumerazioni documenti da escludere nel rendiconto"
END
SPREADSHEET F_RIGHE_NUM -1 -12
SPREADSHEET F_RIGHE_NUM -1 4
BEGIN
PROMPT 1 2 ""
ITEM "Numerazione"
@ -425,16 +425,26 @@ END
TEXT -1
BEGIN
PROMPT 1 13 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto"
PROMPT 1 7 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto"
END
SPREADSHEET F_RIGHE_FDR -1 -1
SPREADSHEET F_RIGHE_FDR -1 4
BEGIN
PROMPT 1 14 ""
PROMPT 1 8 ""
ITEM "Numerazione"
ITEM "Descrizione@50"
END
TEXT -1
BEGIN
PROMPT 1 13 "@bCausali per ratei e risconti"
END
SPREADSHEET F_RIGHE_RER -1 4
BEGIN
PROMPT 1 14 ""
ITEM "Causale"
ITEM "Descrizione@50"
END
ENDPAGE
@ -554,3 +564,48 @@ ENDPAGE
ENDMASK
PAGE "Riga causali per ratei e risconti" -1 -1 78 8
STRING SR_CODNUM 4
BEGIN
PROMPT 1 1 "Codice numerazione "
USE LF_CAUSALI SELECT MOVIND!=''
CHECKTYPE REQUIRED
INPUT CODCAUS SR_CODNUM
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT SR_CODNUM CODCAUS
OUTPUT SR_DESCR DESCR
FLAGS "UZ"
END
STRING SR_DESCR 50
BEGIN
PROMPT 1 3 "Descrizione "
USE LF_CAUSALI
KEY 2
SELECT MOVIND!=''
INPUT DESCR SR_DESCR
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT SR_CODNUM
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -236,6 +236,7 @@ class TPrint_rendiconto_ca_recordset : public TISAM_recordset
bool _riclassificato;
bool _reverse_cos_ric;
TString _prefix;
TAssoc_array _ratrisc;
protected:
int _anno;
@ -260,18 +261,37 @@ protected:
int sort_indbil(int indbil) const;
TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr);
real get_budget(const TString& conto, char tipo) const;
bool is_causale_rateo_risconto(const char* codcaus);
public:
virtual void set_filter(const TPrint_rendiconto_ca_mask& msk, int cms_row);
TPrint_rendiconto_ca_recordset(const TString& sql) : TISAM_recordset(sql), _riclassificato(false) { _tmp = NULL;}
TPrint_rendiconto_ca_recordset(const TString& sql);
~TPrint_rendiconto_ca_recordset();
};
static TPrint_rendiconto_ca_recordset* myself = NULL;
TPrint_rendiconto_ca_recordset::TPrint_rendiconto_ca_recordset(const TString& sql)
: TISAM_recordset(sql), _riclassificato(false), _tmp(NULL)
{
//Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono causali di tipo..
//..rateo/risconto che devono essere calcolate come solo maturato (Eva Braun request)
TConfig& config = ca_config();
//riempie l'assoc_array contenente i codici causale rateo/risconto
for (int j = 0;;j++)
{
const TString& codcaus = config.get("RR", NULL, j); //scansione delle righe RR(i)=.. sul paragrafo di configurazione CA
if (codcaus.blank())
break;
_ratrisc.add(codcaus, codcaus);
}
}
TPrint_rendiconto_ca_recordset::~TPrint_rendiconto_ca_recordset()
{ }
@ -523,6 +543,12 @@ static int bill2indbil(const TString& codconto, bool is_anal)
return indbil;
}
//controlla se la causale passata e' di tipo rateo/risconto
bool TPrint_rendiconto_ca_recordset::is_causale_rateo_risconto(const char* codcaus)
{
return _ratrisc.objptr(codcaus) != NULL;
}
//compila i campi del file temporaneo che sara' poi stampato
void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc)
{
@ -532,14 +558,15 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
TString8 codnum_desc; //codnum da usare sia per compilare il campo "CODNUM"
codnum_desc.cut(0);
//----- CONTI -----//
TString codconto = rmovana.get(RMOVANA_CODCONTO);
TString codcontocg;
int indbil = 0;
// il conto puo' essere analitico o contabile...
//se è compilato l'archivio di collegamento PANAPDC
//si deve usare come conto il campo codconto del panapdc!!!...
//Solo se si ha un conto contabile e' possibile riclassificare in analitico!!!
//se è compilato l'archivio di collegamento PANAPDC..
//..si deve usare come conto il campo codconto del panapdc!!!...
//Ricordare ch SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!!
if (_riclassificato) //traduzione:sei il CRPA/CSA
{
//prende il gr/co/so dalla riga rmovana in esame
@ -578,8 +605,9 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
const int ordcont = sort_indbil(indbil);
tmpcurr.put("ORDCONT", ordcont);
//---- FINE CONTI ----//
//---- DOC D'ORIGINE DELL' ANALMOV ----//
//tipo movimento CONSUNTIVO (o TEMPORANEO)
const char tipomov = movana.get_char(MOVANA_TIPOMOV);
if (tipomov <= ' ' || tipomov == 'T')
@ -612,8 +640,12 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
tmpcurr.put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana
}
//ricerca del mitico documento padre della riga documento attuale!
int selettore = 0;
bool inverti_sezione = false; //inversore D/A per causali rateo/risconto
const int anno_caus = movana.get_date(MOVANA_DATAREG).year();
const TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus); //la causale serve un po' ovunque...
//ricerca del mitico documento padre della riga documento attuale!
if (newdoc != NULL)
{
tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana
@ -664,6 +696,7 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale)
//---- FINE DOC ORIG DELL'ANALMOV ----//
/*[Tipo documento] //schema divino per destinare gli importi nei campi corretti
O=I**
B=IM*
@ -671,6 +704,7 @@ BO=*M*
FB=**F
FO=*MF
F=IMF*/
//---- IMPEGANTO,MATURATO O FATTURATO? QUESTO E' IL PROBLEMA.. ----//
switch (tipo_documento)
{
case TTipo_documento::_bolla: //bolla B -> IM a meno che non sia bolla da ordine BO -> M
@ -703,20 +737,28 @@ F=IMF*/
} //if(newdoc != NULL)
else //movimenti puri di analitica (no documento di origine!)
{
if (is_causale_rateo_risconto(caus.codice())) //movimenti con causali "rateo/risconto"
{
selettore = MATURATO;
inverti_sezione = true;
}
else //movimenti con causali "normali"
{
selettore = FATTURATO;
selettore |= MATURATO;
selettore |= IMPEGNATO;
}
} //if(newdoc != NULL)
//riempie i record del file temporaneo nel caso di rmovana con documento di origine
const char sezione = rmovana.get_char(RMOVANA_SEZIONE);
char sezione = rmovana.get_char(RMOVANA_SEZIONE);
if (inverti_sezione)
sezione = sezione == 'D' ? 'A' : 'D';
TImporto imp(sezione, rmovana.get_real(RMOVANA_IMPORTO));
const int anno_caus = movana.get_date(MOVANA_DATAREG).year();
TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus);
TipoIVA tipoiva = caus.iva();
TipoIVA tipoiva = caus.iva(); //tipo iva legato alla causale (codcaus e' letto ad inizio procedura)
char sezione_normale;
if (tipoiva == iva_vendite)
@ -903,7 +945,7 @@ void TPrint_rendiconto_ca_recordset::scrive_riga_speciale(const TDocumento* doc,
//i documenti speciali vanno SOLO in FATTURATO
tmpcurr.put("FATTURATO", imp.valore());
}
else
else //if(codcaus.full()
{
//i documenti speciali vanno SOLO in FATTURATO
tmpcurr.put("FATTURATO", importo);
@ -1030,12 +1072,11 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
//Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono numerazioni relative
//..alle fatture da ricevere che devono essere trattate in modo particolare
TConfig& config = ca_config();
//TString_array contenente le numerazioni delle fatture da ricevere
TString_array num_fdr;
for (int j = 0;;j++)
{
TString codfdr(config.get("NF", NULL, j)); //scansione delle righe NF(i)=.. sul paragrafo di configurazione CA
const TString& codfdr = config.get("NF", NULL, j); //scansione delle righe NF(i)=.. sul paragrafo di configurazione CA
if (codfdr.blank())
break;
num_fdr.add(codfdr);