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_NUM), config, "ND");
config_loader(mask.sfield(F_RIGHE_FDR), config, "NF"); config_loader(mask.sfield(F_RIGHE_FDR), config, "NF");
config_loader(mask.sfield(F_RIGHE_RER), config, "RR");
return true; 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_NUM), config, "ND");
config_setter(mask.sfield(F_RIGHE_FDR), config, "NF"); config_setter(mask.sfield(F_RIGHE_FDR), config, "NF");
config_setter(mask.sfield(F_RIGHE_RER), config, "RR");
return true; return true;
} }

View File

@ -50,6 +50,7 @@
#define F_RIGHE_NUM 170 #define F_RIGHE_NUM 170
#define F_RIGHE_FDR 171 #define F_RIGHE_FDR 171
#define F_RIGHE_RER 172
//elementi dello sheet dei documenti da escludere dal rendiconto //elementi dello sheet dei documenti da escludere dal rendiconto
#define SN_CODNUM 101 #define SN_CODNUM 101
@ -61,3 +62,7 @@
//elementi dello sheet dei documenti da considerare fatture da ricevere //elementi dello sheet dei documenti da considerare fatture da ricevere
#define SF_CODNUM 101 #define SF_CODNUM 101
#define SF_DESCR 102 #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 ENDPAGE
PAGE "Regole" -1 -1 78 20 PAGE "Regole rendiconto" -1 -1 78 20
TEXT -1 TEXT -1
BEGIN BEGIN
PROMPT 1 1 "@bNumerazioni documenti da escludere nel rendiconto" PROMPT 1 1 "@bNumerazioni documenti da escludere nel rendiconto"
END END
SPREADSHEET F_RIGHE_NUM -1 -12 SPREADSHEET F_RIGHE_NUM -1 4
BEGIN BEGIN
PROMPT 1 2 "" PROMPT 1 2 ""
ITEM "Numerazione" ITEM "Numerazione"
@ -425,16 +425,26 @@ END
TEXT -1 TEXT -1
BEGIN 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 END
SPREADSHEET F_RIGHE_FDR -1 -1 SPREADSHEET F_RIGHE_FDR -1 4
BEGIN BEGIN
PROMPT 1 14 "" PROMPT 1 8 ""
ITEM "Numerazione" ITEM "Numerazione"
ITEM "Descrizione@50" ITEM "Descrizione@50"
END 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 END
ENDPAGE ENDPAGE
@ -554,3 +564,48 @@ ENDPAGE
ENDMASK 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 _riclassificato;
bool _reverse_cos_ric; bool _reverse_cos_ric;
TString _prefix; TString _prefix;
TAssoc_array _ratrisc;
protected: protected:
int _anno; int _anno;
@ -260,18 +261,37 @@ protected:
int sort_indbil(int indbil) const; int sort_indbil(int indbil) const;
TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr); TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr);
real get_budget(const TString& conto, char tipo) const; real get_budget(const TString& conto, char tipo) const;
bool is_causale_rateo_risconto(const char* codcaus);
public: public:
virtual void set_filter(const TPrint_rendiconto_ca_mask& msk, int cms_row); 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(); ~TPrint_rendiconto_ca_recordset();
}; };
static TPrint_rendiconto_ca_recordset* myself = NULL; 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() TPrint_rendiconto_ca_recordset::~TPrint_rendiconto_ca_recordset()
{ } { }
@ -523,6 +543,12 @@ static int bill2indbil(const TString& codconto, bool is_anal)
return indbil; 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 //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) 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" TString8 codnum_desc; //codnum da usare sia per compilare il campo "CODNUM"
codnum_desc.cut(0); codnum_desc.cut(0);
//----- CONTI -----//
TString codconto = rmovana.get(RMOVANA_CODCONTO); TString codconto = rmovana.get(RMOVANA_CODCONTO);
TString codcontocg; TString codcontocg;
int indbil = 0; int indbil = 0;
// il conto puo' essere analitico o contabile... // il conto puo' essere analitico o contabile...
//se è compilato l'archivio di collegamento PANAPDC //se è compilato l'archivio di collegamento PANAPDC..
//si deve usare come conto il campo codconto del panapdc!!!... //..si deve usare come conto il campo codconto del panapdc!!!...
//Solo se si ha un conto contabile e' possibile riclassificare in analitico!!! //Ricordare ch SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!!
if (_riclassificato) //traduzione:sei il CRPA/CSA if (_riclassificato) //traduzione:sei il CRPA/CSA
{ {
//prende il gr/co/so dalla riga rmovana in esame //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! //..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
const int ordcont = sort_indbil(indbil); const int ordcont = sort_indbil(indbil);
tmpcurr.put("ORDCONT", ordcont); tmpcurr.put("ORDCONT", ordcont);
//---- FINE CONTI ----//
//---- DOC D'ORIGINE DELL' ANALMOV ----//
//tipo movimento CONSUNTIVO (o TEMPORANEO) //tipo movimento CONSUNTIVO (o TEMPORANEO)
const char tipomov = movana.get_char(MOVANA_TIPOMOV); const char tipomov = movana.get_char(MOVANA_TIPOMOV);
if (tipomov <= ' ' || tipomov == 'T') if (tipomov <= ' ' || tipomov == 'T')
@ -611,9 +639,13 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
tmpcurr.put("NUMRD", movana.get(MOVANA_NUMREGCG)); //numregcg del movana tmpcurr.put("NUMRD", movana.get(MOVANA_NUMREGCG)); //numregcg del movana
tmpcurr.put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana tmpcurr.put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana
} }
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! //ricerca del mitico documento padre della riga documento attuale!
int selettore = 0;
if (newdoc != NULL) if (newdoc != NULL)
{ {
tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana
@ -664,13 +696,15 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale) 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 /*[Tipo documento] //schema divino per destinare gli importi nei campi corretti
O=I** O=I**
B=IM* B=IM*
BO=*M* BO=*M*
FB=**F FB=**F
FO=*MF FO=*MF
F=IMF*/ F=IMF*/
//---- IMPEGANTO,MATURATO O FATTURATO? QUESTO E' IL PROBLEMA.. ----//
switch (tipo_documento) switch (tipo_documento)
{ {
case TTipo_documento::_bolla: //bolla B -> IM a meno che non sia bolla da ordine BO -> M case TTipo_documento::_bolla: //bolla B -> IM a meno che non sia bolla da ordine BO -> M
@ -704,19 +738,27 @@ F=IMF*/
} //if(newdoc != NULL) } //if(newdoc != NULL)
else //movimenti puri di analitica (no documento di origine!) else //movimenti puri di analitica (no documento di origine!)
{ {
selettore = FATTURATO; if (is_causale_rateo_risconto(caus.codice())) //movimenti con causali "rateo/risconto"
selettore |= MATURATO; {
selettore |= IMPEGNATO; selettore = MATURATO;
inverti_sezione = true;
}
else //movimenti con causali "normali"
{
selettore = FATTURATO;
selettore |= MATURATO;
selettore |= IMPEGNATO;
}
} //if(newdoc != NULL) } //if(newdoc != NULL)
//riempie i record del file temporaneo nel caso di rmovana con documento di origine //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)); 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(); //tipo iva legato alla causale (codcaus e' letto ad inizio procedura)
TipoIVA tipoiva = caus.iva();
char sezione_normale; char sezione_normale;
if (tipoiva == iva_vendite) 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 //i documenti speciali vanno SOLO in FATTURATO
tmpcurr.put("FATTURATO", imp.valore()); tmpcurr.put("FATTURATO", imp.valore());
} }
else else //if(codcaus.full()
{ {
//i documenti speciali vanno SOLO in FATTURATO //i documenti speciali vanno SOLO in FATTURATO
tmpcurr.put("FATTURATO", importo); 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 //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 //..alle fatture da ricevere che devono essere trattate in modo particolare
TConfig& config = ca_config(); TConfig& config = ca_config();
//TString_array contenente le numerazioni delle fatture da ricevere //TString_array contenente le numerazioni delle fatture da ricevere
TString_array num_fdr; TString_array num_fdr;
for (int j = 0;;j++) 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()) if (codfdr.blank())
break; break;
num_fdr.add(codfdr); num_fdr.add(codfdr);